【问题标题】:Non-blocking writes to Java SocketChannel对 Java SocketChannel 的非阻塞写入
【发布时间】:2016-06-09 13:01:00
【问题描述】:

如果我获得一个设置为非阻塞模式的SocketChannel,当我写入通道并且底层套接字缓冲区已满,因为对方无法跟上时会发生什么?数据会被丢弃还是类似的结果?

【问题讨论】:

    标签: java sockets socketchannel


    【解决方案1】:

    write() 方法返回零,数据保留在ByteBuffer 中。此时您应该为OP_WRITE 注册通道,记住输出缓冲区,返回选择循环。当通道变为可写时,重试写入,这一次只要它完成,即不返回零或小于缓冲区中要写入的剩余字节,注销OP_WRITE

    【讨论】:

      猜你喜欢
      • 2011-10-09
      • 2014-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-23
      • 1970-01-01
      相关资源
      最近更新 更多