TCP erreur de connexion 115 Opération en cours, Quelle est la Cause?
Mon application crée une connexion TCP, Cela fonctionne normalement.
Mais dans un serveur de réseau a de nombreux propriété intellectuelle dire
- 174.X.X.X
- 54.x.x.x
comme ce
Lors de l'appel de la connexion TCP (Non bloquant avec délai d'attente de 60 secondes)
IP 174.X.X.X
est toujours un succès .
Mais la connexion TCP à même serveur avec ip 54.x.x.x
est un échec (la plupart du temps) avec errno 115
measn opération en cours.
Pouvez-vous svp m'expliquer quelles sont les raisons possibles pour errno 115
OS : Linux
Mon TCP conenct code est comme ci-dessous
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;
}
Qu'advient-il si vous essayez de telnet au 54.x.x.x ip sans l'aide de votre application? Même comportement?
non, Manuel mastic application, beau travail
"Le Non-blocage avec un timeout" est une contradiction dans les termes.
non, Manuel mastic application, beau travail
"Le Non-blocage avec un timeout" est une contradiction dans les termes.
OriginalL'auteur user1340512 | 2012-04-18
Vous devez vous connecter pour publier un commentaire.
Sur base de vos informations:
connect()
à54.x.x.x
non-blocking
60 sec
Tout d'abord, si vous regardez dans votre
/usr/include/asm-generic/errno.h
vous verrez suivantes:Cela signifie une opération existante sur le socket est en cours. Depuis, vous avez dit que vous faites un
connect()
appel, permet de faire unhomme se connecter
:Donc, la meilleure hypothèse serait que le TCP 3-way handshake (votre
connect()
appel à54.x.x.x
adresse IP) prend plus de temps que prévu pour terminer. Depuis leconnect()
opération est déjà en cours, pour toute opération ultérieure sur le socket est dansEINPROGRESS
code d'erreur. Comme suggéré dans la page de man, essayez d'utiliserselect()
oupoll()
pour vérifier si votre support est prêt à l'emploi (pour effectuerread()
ouwrite()
appels).Vous pouvez pin-point, ce qui empêche l'établissement d'une liaison TCP pour terminer par la capture et l'analyse du trafic vers/à partir de votre propre machine et
54.x.x.x
. Le meilleur outil pour vous aider avec ceci est appelé WireShark. Bonne chance.Essayez de poster propre et complète version du code, de sorte que l'on peut tester.
Merci pour u r répondre , je ne peux pas poster tout le code ici , Mais j'ai collé uniquement le code whhere échec est de retour . Le code fonctionne bien dans notre réseau (peut-être parce que dans notre réseau non-bloc d'erreur ne se produira jamais et conenct toujours un succès) . J'ai besoin de savoir, c'est si EINPROGRESS errno est code ci-dessus fonctionne bien ou avant 60 s la abvoe code peut renvoyer -1
TLDR... n'est-ce pas juste un délai d'attente réseau?
OriginalL'auteur gsbabil
Cela semble être le comportement de connect():
OriginalL'auteur Anders Lindahl