TCP Connect error 115 Arbeit, Was ist die Ursache?
Meine Anwendung erstellt dazu eine TCP-Verbindung, Das funktioniert normalerweise.
Aber in einem Netzwerk-server hat viele IP-sagen
- 174.X.X.X
- 54.x.x.x
wie diese
Beim Aufruf TCP-Verbindung (Nicht blockierend mit timeout von 60 Sekunden)
IP 174.X.X.X
ist immer Erfolg .
Aber TCP-Verbindung zum selben server mit der ip - 54.x.x.x
ist nicht (fast immer) mit errno 115
measn operation in progress.
Kannst du bitte erklären Sie mir, was sind die möglichen Gründe für errno 115
OS : Linux
Mein TCP-conenct code ist wie folgt
tcp_connect(......)
{
int iValOpt = 0;
int iLength= 0;
fcnt((int)(long)SockID,F_SETFL_O_NONBLOCK);
ret = connect (sockID,(struct sockaddr*)pstSockAdr,uiSockLen);
if (ret < 0)
{
if (errno == EINPROGRESS)
{
stTv.tv_sec = 60;
stTv.tv_usec = 0;
FD_ZERO(&write_fd);
FD_SET(sockID,&write_fd);
iLength = sizeof(int);
if (0 < select (sockID+1) , NULL,&write_fd,NULL,&stTv);
{
if(0 > getsockopt(sockID,SOL_SOCKET,SO_ERROR,(void*)(&iValOpt),&iLength))
{
return -1
}
if (0 != iValOpt)
{
return -1;
}
return success;
}
else
{
return -1;
}
}
else
{
return -1;
}
}
return success;
}
- Was passiert, wenn Sie versuchen, mit telnet auf die 54.x.x.x-ip ohne Ihre Anwendung? Dasselbe Verhalten?
- Nein, die Manuelle putty-Anwendung funktionieren
- 'Nicht-blockierend mit timeout' ist ein Widerspruch in sich.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Basierend auf Ihren Informationen:
connect()
zu54.x.x.x
non-blocking
60 sec
Ersten, wenn Sie in Ihrem
/usr/include/asm-generic/errno.h
Sie werden sehen, die folgenden:Es bedeutet, einen bestehenden Betrieb an der Steckdose ist im Gange. Da, sagte Sie, Sie tun ein
connect()
nennen, können eineman-connect
:So, die beste Vermutung wäre, dass der TCP-3-Wege-handshake (Ihr
connect()
Aufruf54.x.x.x
IP-Adresse) dauert länger als erwartet zum abschließen. Da dieconnect()
operation bereits im Gange ist, ist jede nachfolgende operation in der Buchse ist, die inEINPROGRESS
Fehler-code. Wie bereits in der Mann-Seite, versuchen, Sie zu nutzenselect()
oderpoll()
um zu überprüfen, ob Ihre Steckdose ist bereit zu verwenden (zum ausführenread()
oderwrite()
Anrufe).Können Sie die pin-Nummer, was ist, verhindert, dass Ihre TCP-handshake zu vervollständigen, durch die Erfassung und Analyse der Datenverkehr zu/von Ihrem eigenen Computer und
54.x.x.x
. Das beste Werkzeug, um Ihnen helfen, dies nennt man WireShark. Viel Glück.Scheint dies das Verhalten der connect():