2017-05-04 5 views
0

Je sais qu'un SocketChannel est "averti" d'une connexion ordonnée fermée en recevant "-1" après avoir appelé read(). Mais comment me prévenir d'une connexion fermée désordonnée? (dans le cadre d'un serveur NIO entier, fonctionnant avec un sélecteur et des socketChannels non bloquants)Java socketChannel pour détecter une connexion fermée désordonnée

+1

Pourquoi certains -1 cette question? Quel est le problème à ce sujet? le minimum que vous pouvez est d'expliquer. – slashms

+1

Vous avez reçu "-1" parce que vous avez eu une connexion ordonnée fermée :) – avim

Répondre

1

Un write() lancera IOException: connection reset. Finalement. En raison de la mise en mémoire tampon TCP, il ne se produira pas sur la première écriture après l'échec.

+0

Merci @EJP, mais c'est le seul moyen? Et si je m'attendais seulement à lire en tant que serveur? – slashms

+0

Aussi, que se passera-t-il si après il est désordonné fermé, je vais appeler socket.close()? Va-t-il bloquer parce qu'il pourrait attendre la fermeture de la connexion TCP? – slashms

+1

Vous pouvez ou non obtenir la réinitialisation si vous lisez seulement. 'close()' n'attend jamais, sauf si vous êtes en mode bloquant et que vous avez fait des choses idiotes à SO_LINGER. – EJP