Comment puis-je vérifier si un (TCP) socket (dis)connecté en C#?

Comment dois-je vérifier un (TCP) prise pour savoir si il est connecté?

J'ai lu sur la Socket.Connected propriété dans MSDN, mais il dit qu'il ne montre que l'état selon le dernier I/O. Ce n'est pas utile pour moi, car je veux faire ce avant essayer de lire à partir de la douille. La section remarques note également que:

Si vous avez besoin pour déterminer le courant
état de la connexion, faire un
non bloquantes, de zéro octet Envoyer l'appel. Si
les retours d'appel avec succès ou
jette un WAEWOULDBLOCK code d'erreur
(10035), puis le socket est toujours
connecté; sinon, le socket est pas
plus connecté.

L'exemple sur la même page montre comment le faire.(1) Mais un post par Ian Griffiths dit que je devrais lire de la prise, de ne pas envoyer à travers elle.

Un autre post par Pete Duniho dit:

... après que vous avez appelé Shutdown(),
appel Receive() jusqu'à ce qu'il retourne 0
(en supposant que le point de terminaison distant n'est pas
en réalité, va vous envoyer quoi que ce soit,
que se produira dès que la distance
point de terminaison a reçu la totalité de votre
de données). Sauf si vous le faites, vous avez
aucune assurance que le point de terminaison distant
a reçu toutes les données
vous avez envoyé, même à l'aide d'une longue
socket.

Je ne comprends pas vraiment sa déclaration à propos de l'appel de Receive() pour s'assurer que le point de terminaison distant a reçu toutes les données que je envoyé. (Ne sockets bloc de réception jusqu'à l'envoi de la mémoire tampon est vide?)

Je suis confus par les différentes méthodes proposées. Pourriez-vous nous expliquer?


(1) je me demande pourquoi le exemple pour la Socket.Connected propriété alloue un 1-tableau d'octets, même si elle appelle Send avec 0 longueur?

InformationsquelleAutor Hosam Aly | 2009-02-05