Операция сброса для неблокирующего сокета Java - PullRequest
1 голос
/ 24 ноября 2010

В обычном блокирующем сокете я могу использовать Socket.getOutputStream (). Flush (), чтобы частично контролировать, когда отправлять TCP-пакет. Есть ли аналогичная операция для SocketChannel?

Редактировать: Я предполагаю, что каждый раз, когда я вызываю SocketChannel.write (ByteBuffer src), будет отправляться по крайней мере один отдельный пакет, даже если в буфере есть только 1 байт (предположим, что Nagle выключен), я прав?

Редактировать: пакет -> пакет, извините за неправильное написание.

Ответы [ 2 ]

1 голос
/ 24 ноября 2010

Полагаю, вы могли бы написать что-то вроде

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

Возможно, есть лучшее решение.

0 голосов
/ 24 ноября 2010

Как я недавно отметил, Socket.getOutputStream (). Flush () ничего не делает в JDK Sun 6.

Однако нет гарантии, что write () отправит один пакет (не пакет), который он может отправитьболее менее.Все, что вы знаете, это то, что он был передан в ОС для обработки.

...