Используя Sun Java VM 1.5 или 1.6 в Windows, я подключаю неблокирующий сокет. Затем я заполняю ByteBuffer
сообщением для вывода и пытаюсь write()
передать SocketChannel.
Я ожидаю, что запись будет завершена только частично, если объем записи больше, чем объем пространства в буфере вывода TCP сокета (это то, что я ожидаю интуитивно, это также в значительной степени мое понимание документы) , но это не то, что происходит. write()
всегда, похоже, возвращает сообщение о полной записанной сумме, даже если это несколько мегабайт (SO_SNDBUF сокета составляет 8 КБ, намного, намного меньше, чем мое многомегабайтное выходное сообщение).
Проблема здесь в том, что я не могу протестировать код, обрабатывающий случай, когда вывод частично записан (регистрация набора процентов WRITE
в селекторе и выполнение select()
для ожидания записи остатка), так как в этом случае никогда кажется, происходит. Что я не понимаю?