非阻塞写入 Java SocketChannel
Non-blocking writes to Java SocketChannel
如果我获得一个设置为非阻塞模式的 SocketChannel
,当我写入通道并且底层套接字缓冲区因另一端跟不上而已满时会发生什么?数据会被丢弃吗?
write()
方法 return 为零,数据保留在 ByteBuffer
中。那时你应该为 OP_WRITE
注册通道,记住输出缓冲区,return 到 select 循环。当通道变为可写时,重试写入,这次只要它完成,即 return 不为零或少于要写入的缓冲区中的剩余字节,注销 OP_WRITE
。
如果我获得一个设置为非阻塞模式的 SocketChannel
,当我写入通道并且底层套接字缓冲区因另一端跟不上而已满时会发生什么?数据会被丢弃吗?
write()
方法 return 为零,数据保留在 ByteBuffer
中。那时你应该为 OP_WRITE
注册通道,记住输出缓冲区,return 到 select 循环。当通道变为可写时,重试写入,这次只要它完成,即 return 不为零或少于要写入的缓冲区中的剩余字节,注销 OP_WRITE
。