2010-11-24 4 views
1

En socket de blocage normal, je peux utiliser Socket.getOutputStream(). Flush() pour contrôler partiellement quand envoyer un paquet TCP. Y a-t-il une opération équivalente pour SocketChannel? Edit: Je suppose que chaque fois que j'appelle SocketChannel.write (ByteBuffer src), au moins un paquet individuel sera envoyé, même le tampon a seulement 1 octet (supposons que Nagle est éteint), ai-je raison?Opération de vidage pour le socket non bloquant Java

Édition: paquet -> paquet, désolé pour une mauvaise orthographe.

Répondre

0

Comme je l'ai noté récemment Socket.getOutputStream(). Flush() ne fait rien dans le JDK de Sun 6.

Cependant, il n'y a pas guarentee write() qui va envoyer un paquet (non package) il pourrait envoyer plus ou moins. Tout ce que vous savez, c'est qu'il a été transmis à l'OS pour le gérer.

1

Je suppose que vous pourriez écrire quelque chose comme

while (buf.hasRemaining()) { 
    socketChan.write(buf); 
} 

Peut-être il y a une meilleure solution.

Questions connexes