Мой сокет сервер NIO потерял данные - PullRequest
0 голосов
/ 21 апреля 2011

Наш сервер - Solaris 10, а jdk - 1.5.0_12-b04. и клиентская сторона всегда сообщает о тайм-ауте чтения.

Наша функция всегда в режиме запрос-ответ, и мы используем wireshark на клиенте (Window), а на стороне сервера - snoop. Мы снимаем данные о трафике и находим данные записи на стороне сервера, но snoop не перехватывает их. И тогда клиент ждет ответа до истечения времени ожидания.

на стороне сервера находится сокет NIO server, код вроде него

int ret = 0;
        int writeBytes = 0;

        while ((ret = cb.write(buf)) > 0) {

            writeBytes += ret;
            if (buf.remaining() > 0) {
            } else {
                break;
            }
        }

        if (  _log.isDebugEnabled())
            _log.debug("in writeBuf , writeBytes  " + writeBytes +" , ret "+ ret);


        if (ret < 0) {

        } else {
            if( buf.remaining()> 0 ){

            }else {
                // packet buffer
            }
        }

_log - это log4j Logger, и я замечаю в файле журнала «in writeBuf, writeBytes 52 ret 52»

SocketChannel.write вернул результат> 0, а общий размер буфера составляет 52 байта, но snoop ничего не захватил.

Почему? Что здесь происходит?

...