1

我对DatagramChannel有一些疑问。当套接字绑定并且接收方法在后台以阻塞模式运行时,我刚刚使用拔掉电缆进行了快速测试。即使我写信给这个套接字,也没有抛出异常。
再次插入电缆后,一切看起来都很好 - 插座仍然被绑定。
本次测试后提出的一些问题:

1) 何时需要重新绑定套接字?(一些系统或网络事件的场景)
2)网络不可达时是否会抛出异常?(当我写入绑定在无法访问接口上的套接字时,数据包会在缓存中缓冲并等待接口启动)
3)系统何时可以关闭套接字通道?

提前致谢。您知道与此类主题相关的任何书籍(低级细节)吗?

4

2 回答 2

1

这在某种程度上是独立于实现的。当电缆断开时,操作系统可能检测到介质故障并使所有套接字无效,但这里没有发生这种情况。对于类似 UDP 的协议,它甚至可能不是真正有效的。

即使我写到这个套接字也没有抛出异常。

即使您通过 UDP 写入连接到黑洞的套接字,您也不在乎。只要发送缓冲区中有空间并且要发送的数据包是有效的(如大小,寻址),即使它被路由器破坏或沿途丢失也不会出错。在这里,它只是在离原点很近的地方迷路了。

2)网络不可达时会抛出异常吗?(当我写入绑定在无法访问接口上的套接字时,数据包是否会缓存在缓存中并等待接口启动)

一般来说,UDP 的精神是只发送数据包,而不考虑在丢失之前它会走多远。

3) 系统何时可以关闭套接字通道?

当它不是无连接协议时。如果这是 TCP,您将检测到缺少 keepalive 数据包和通信普遍中断,并且通道将被破坏。

于 2013-10-14T20:29:44.020 回答
0

1)何时需要重新绑定套接字?(一些带有系统或网络事件的场景)

您无法重新绑定套接字。

2)网络不可达时会抛出异常吗?

除非套接字连接到目标,否则您不会收到发送 UDP 数据报的异常,此时您可能会收到“无法访问”错误。

(当我写入绑定在无法访问接口上的套接字时,数据包是否会缓存在缓存中并等待接口启动)

不。

3) 系统何时可以关闭套接字通道?

绝不。你必须自己关闭它。

您知道与此类主题相关的任何书籍(低级细节)吗?

对于这种细节,你必须去甲骨文,W. Richard Stevens,TCP/IP Illustrated,第一卷和第二卷。

于 2013-10-14T23:45:56.923 回答