如果我尝试通过DatagramChannel发送空UDP数据包但底层套接字缓冲区已满,会发生什么?

时间:2015-01-30 23:36:02

标签: java sockets udp real-time nio

我必须遗漏一些东西但是如何判断我的空UDP数据包是否是通过DatagramChannel发送方法发送的?如果它返回ZERO字节,是否意味着我的空数据包被发送,或者它是否意味着底层套接字缓冲区已满?

来自API:

  

发送的字节数,也就是字节数   调用此方法时保留在源缓冲区中的内容   或者,如果此通道是非阻塞的,如果有,则可能为零   底层输出缓冲区中的数据报空间不足。

http://docs.oracle.com/javase/7/docs/api/java/nio/channels/DatagramChannel.html#send(java.nio.ByteBuffer,%20java.net.SocketAddress)

1 个答案:

答案 0 :(得分:2)

如果您处于阻塞模式,则意味着零长度数据报被传输到套接字发送缓冲区。如果你处于非阻塞模式,这是一个折腾,但你可以通过使用选择器事先测试通道是否可写来解决它。

这也可能意味着根本没有发生任何事情,具体取决于您在评论中提到的错误状态。