【发布时间】:2016-06-09 13:01:00
【问题描述】:
如果我获得一个设置为非阻塞模式的SocketChannel,当我写入通道并且底层套接字缓冲区已满,因为对方无法跟上时会发生什么?数据会被丢弃还是类似的结果?
【问题讨论】:
标签: java sockets socketchannel
如果我获得一个设置为非阻塞模式的SocketChannel,当我写入通道并且底层套接字缓冲区已满,因为对方无法跟上时会发生什么?数据会被丢弃还是类似的结果?
【问题讨论】:
标签: java sockets socketchannel
write() 方法返回零,数据保留在ByteBuffer 中。此时您应该为OP_WRITE 注册通道,记住输出缓冲区,返回选择循环。当通道变为可写时,重试写入,这一次只要它完成,即不返回零或小于缓冲区中要写入的剩余字节,注销OP_WRITE。
【讨论】: