View Issue Details

IDProjectCategoryView StatusLast Update
0001000PluginsFTP (old)public2009-08-24 13:31
ReporterSanek Assigned To 
PrioritynormalSeverityminorReproducibilitysometimes
Status newResolutionopen 
Product Version2.0 
Summary0001000: FAR посылает свой IP как 0.0.0.0 в PORT комманде: PORT 0,0,0,0,16,43
DescriptionFTP клиент во всех версиях (тестировано на 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 Information220 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.
TagsNo tags attached.

Activities

vskirdin

2009-08-07 13:12

administrator   bugnote:0003886

опция про пассивное соединение в каком состоянии?
с ней поиграйся

Sanek

2009-08-08 02:53

reporter   bugnote:0003889

Пассивное соединение тоже не работает. В моем сообщении на форуме, я написал, что сервер не поддерживает пассивные соединения, но я был неправ - поддерживает.

Лог:
-> 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

У меня пока не было времени разобраться что к чему - посмотрю на код на выходных.

vskirdin

2009-08-24 08:47

administrator   bugnote:0003925

Sanek, патч имеет смысл ждать?

Sanek

2009-08-24 13:31

reporter   bugnote:0003929

Патч ждать наверное смысла нет - я вроде как единственный с этой проблемой.

Проблема у меня происходит только на компьютере на работе, а там у меня нет времени разбираться что к чему.

Я постараюсть поченить проблему, но если кто-то другой хочет - я возражать не буду :)

Issue History

Date Modified Username Field Change
2009-08-06 14:44 Sanek New Issue
2009-08-07 13:12 vskirdin Note Added: 0003886
2009-08-08 02:53 Sanek Note Added: 0003889
2009-08-24 08:47 vskirdin Note Added: 0003925
2009-08-24 13:31 Sanek Note Added: 0003929
2013-05-20 20:30 alexy Category FTP => FTP (old)