我们的服务器是Solaris 10,jdk是1.5.0_12-b04。并且客户端总是报告读取超时。
我们的功能始终是请求 - 响应模式,我们在客户端(Window)上使用wireshark,服务器端是snoop。我们嗅探流量数据并找到服务器端写入数据但snoop不捕获它。然后客户端等待响应直到超时。
服务器端是套接字NIO服务器,代码类似
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,我在日志文件中注意到“在writeBuf中,writeBytes 52 ret 52”
SocketChannel.write
已返回结果&gt; 0和总buff大小是52个字节,但是snoop没有捕获任何东西。
为什么呢?这里发生了什么?