【问题标题】:Killing a blocked UDP socket杀死一个阻塞的 UDP 套接字
【发布时间】: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


【解决方案1】:

您可以在套接字中设置 ReuseAddress 套接字选项,以便它允许在不同的套接字上侦听相同的 IP 和端口。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-21
    • 1970-01-01
    相关资源
    最近更新 更多