Наш сервер - 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 ничего не захватил.
Почему? Что здесь происходит?