OVH Cloud OVH Cloud

comment canceler un connect() non bloquant.

6 réponses
Avatar
Erwan David
Sur un linux 2.2 (donc sans les aio) je fais des sockets en mode non
bloquant. Dans ce mode, connect() revient immédiatement, et select()
ou poll() préviennent quand il a terminé. Ma question est de savoir
comment arrêter ce connect() avant sa terminaison normale ?

Un simple close() suffit-il ?

--
Erwan

6 réponses

Avatar
Laurent Wacrenier
Erwan David écrit:
Sur un linux 2.2 (donc sans les aio) je fais des sockets en mode non
bloquant. Dans ce mode, connect() revient immédiatement, et select()
ou poll() préviennent quand il a terminé.


Il a pu terminer dès son retour.

Ma question est de savoir
comment arrêter ce connect() avant sa terminaison normale ?

Un simple close() suffit-il ?


Oui. Pourquoi faire compliqué ?

Avatar
Erwan David
Laurent Wacrenier <lwa@ teaser . fr> écrivait :

Erwan David écrit:
Sur un linux 2.2 (donc sans les aio) je fais des sockets en mode non
bloquant. Dans ce mode, connect() revient immédiatement, et select()
ou poll() préviennent quand il a terminé.


Il a pu terminer dès son retour.


Oui, évidemment, et dans ce cas là aucune raison de le canceller.

Ma question est de savoir
comment arrêter ce connect() avant sa terminaison normale ?

Un simple close() suffit-il ?


Oui. Pourquoi faire compliqué ?


C'est surtout que la doc n'en était pas claire...


Avatar
Erwan David
Laurent Wacrenier <lwa@ teaser . fr> écrivait :

Erwan David écrit:
Sur un linux 2.2 (donc sans les aio) je fais des sockets en mode non
bloquant. Dans ce mode, connect() revient immédiatement, et select()
ou poll() préviennent quand il a terminé.


Il a pu terminer dès son retour.


Oui, évidemment, et dans ce cas là aucune raison de le canceller.

Ma question est de savoir
comment arrêter ce connect() avant sa terminaison normale ?

Un simple close() suffit-il ?


Oui. Pourquoi faire compliqué ?


C'est surtout que la doc n'en était pas claire...

Merci.


Avatar
Laurent Wacrenier
Erwan David écrit:
Sur un linux 2.2 (donc sans les aio) je fais des sockets en mode non
bloquant. Dans ce mode, connect() revient immédiatement, et select()
ou poll() préviennent quand il a terminé.


Il a pu terminer dès son retour.


Oui, évidemment, et dans ce cas là aucune raison de le canceller.


Il n'y a surtout aucune raison de faire un select() pour connaitre
l'état d'avancement de la connexion.

C'est surtout que la doc n'en était pas claire...


Hà ? Tu as trouvé une doc quelque part ?
close() libère les ressouces, on ne peut pas faire mieux.
Il se peut que des parquets trainent encore par ci sur le réseau et
qu'il reste encore des traces de la session dans le noyau quelques
temps, mais c'est la vie.



Avatar
Laurent Wacrenier
Laurent Wacrenier écrit:
Il a pu terminer dès son retour.


Oui, évidemment, et dans ce cas là aucune raison de le canceller.


Il n'y a surtout aucune raison de faire un select() pour connaitre
l'état d'avancement de la connexion.


En fait, il faut faire un select() ou un poll() si connect() renvoie
-1 et que errno == EINPROGRESS. La connexion a pu foirer du premier
coup.



Avatar
Erwan David
Laurent Wacrenier <lwa@ teaser . fr> écrivait :

Laurent Wacrenier écrit:
Il a pu terminer dès son retour.


Oui, évidemment, et dans ce cas là aucune raison de le canceller.


Il n'y a surtout aucune raison de faire un select() pour connaitre
l'état d'avancement de la connexion.


En fait, il faut faire un select() ou un poll() si connect() renvoie
-1 et que errno == EINPROGRESS. La connexion a pu foirer du premier
coup.


Oui, c'est justement le cas qui m'embêtait...