【发布时间】:2014-06-27 01:53:19
【问题描述】:
假设我有一个在某个地址/端口上打开然后挂起的 UDP 套接字。
当我尝试在同一个地址/端口上初始化一个新的 UDP Socket (UDPClient) 时,它当然会引发一个 SocketException,因为它发现它已经在使用中。
是否可以从代码中杀死挂起的套接字以便我可以重用它?
编辑:这是导致 UDP 保持阻塞的代码(Apparently) Gracefully Closed UDPClient leaves the socket blocked
【问题讨论】:
-
我不知道。传统上,如果可能发生这种情况,您应该在连接上设置超时。或者,如果旧套接字恢复,则持续执行此操作可能会出现问题,但您可以在连接新套接字之前调用
.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true)。 -
你试过关闭它吗?
-
您可以设置一些“终止”标志,然后自己向端口发送数据报,以使阻塞的 readFrom() 或其他任何内容返回。
-
@500-InternalServerError 我试过这样做(如在此处发布:stackoverflow.com/questions/23564939/…),但尽管显然以优雅的方式关闭它,但套接字仍处于阻塞状态。
-
@SaverioTerracciano - 它是 UDP - 你可以直接向自己发送数据报,没问题。
标签: c# sockets socketexception udpclient