View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0001000 | Plugins | FTP (old) | public | 2009-08-06 14:44 | 2009-08-24 13:31 |
Reporter | Sanek | Assigned To | |||
Priority | normal | Severity | minor | Reproducibility | sometimes |
Status | new | Resolution | open | ||
Product Version | 2.0 | ||||
Summary | 0001000: FAR посылает свой IP как 0.0.0.0 в PORT комманде: PORT 0,0,0,0,16,43 | ||||
Description | FTP клиент во всех версиях (тестировано на 1.70+) Far глючит иногда при подключении к серверу. После LIST комманды, все виснет и проиходит timeout. FAR посылает свой IP как 0.0.0.0 в PORT комманде: PORT 0,0,0,0,16,43 Клиент: Far 1.70 build 2087, Far 2.0 build 981 x86, Far 2.0 build 1059 x86 Сервер: Windows CE .NET FTP Server Sample (WinCE 5.0) ipconfig /all: http://forum.farmanager.com/viewtopic.php?f=5&t=1247&p=48695#p48712 | ||||
Additional Information | 220 Service ready for new user. USER admin 331 User name okay, need password. PASS ******** 230 User logged in, proceed. SYST 215 Windows_CE version 5.0. PWD 257 "/". TYPE I 200 Command okay. REST 0 500 Syntax error, command unrecognized. PWD 257 "/". PORT 0,0,0,0,16,43 200 Command okay. TYPE A 200 Command okay. LIST 150 File status okay; about to open data connection. 425 Can't open data connection. | ||||
Tags | No tags attached. | ||||
|
опция про пассивное соединение в каком состоянии? с ней поиграйся |
|
Пассивное соединение тоже не работает. В моем сообщении на форуме, я написал, что сервер не поддерживает пассивные соединения, но я был неправ - поддерживает. Лог: -> PWD <- 257 "/". -> PASV <- 227 Entering Passive Mode (192,168,1,105,4,31). -> TYPE A После этого FTP плагин сидит и ждет timeout, а потом выдает Внутренную ошибку. Я посмотрел на код плагина. В ftp_cnInit.cpp, этот код вроде всегда получает правильный IP: --------------------------------- //Connect ConnectMessage(MWaitingForConnect,NULL); if( !nb_connect( &sock,(sockaddr*)&hisctladdr,sizeof(hisctladdr) ) ) break; //Local addr if ( getsockname( sock,(sockaddr*)&myctladdr,&len ) != 0 ) break; --------------------------------- myctladdr - все нормально Но, чуть позже, IP уже 0.0.0.0: --------------------------------- if ( getsockname(data_peer, (struct sockaddr *)&data_addr, &len) < 0) { Log(("!getsockname" )); ErrorCode = WSAGetLastError(); goto bad; } --------------------------------- data_addr - 0.0.0.0 Я пока не уверен, из-за чего это происходит, но возможно, из-за этого: "The getsockname function does not always return information about the host address when the socket has been bound to an unspecified address, unless the socket has been connected with connect or accept (for example, using ADDR_ANY). A Windows Sockets application must not assume that the address will be specified unless the socket is connected. The address that will be used for the socket is unknown unless the socket is connected when used in a multihomed host. If the socket is using a connectionless protocol, the address may not be available until I/O occurs on the socket." http://msdn.microsoft.com/en-us/library/ms738543%28VS.85%29.aspx У меня пока не было времени разобраться что к чему - посмотрю на код на выходных. |
|
Sanek, патч имеет смысл ждать? |
|
Патч ждать наверное смысла нет - я вроде как единственный с этой проблемой. Проблема у меня происходит только на компьютере на работе, а там у меня нет времени разбираться что к чему. Я постараюсть поченить проблему, но если кто-то другой хочет - я возражать не буду :) |