【问题标题】:GCDAsyncUdpSocket cannot bind port on iOS simulatorGCDAsyncUdpSocket 无法在 iOS 模拟器上绑定端口
【发布时间】:2013-05-26 04:00:24
【问题描述】:

我正在通过 UDP 发送消息。但是,我一直被困在“绑定端口”的问题中。

当我第一次在 iOS 模拟器上构建项目时,没有发生任何奇怪的事情。一切都很好。

但是当我第二次构建项目时。当应用程序尝试绑定端口时,我从终端收到一条错误消息。

消息类似于“Error Domain=NSPOSIXErrorDomain Code=48 "Address already in use" UserInfo=0x767c830 {NSLocalizedFailureReason=Error in bind() function, NSLocalizedDescription=Address already in use}”

让我感到困惑的是,当我在 iPad 上运行我的应用程序时,并没有出现该错误。

我猜可能是因为我没有关闭套接字。但为什么它在 iPad 上能正常运行?

希望有人能解决这个问题。谢谢!

【问题讨论】:

  • 在这里看到的一样;它是 UDP 特定的;尽管在 GCDAAsyncUdpSocket 中设置了 SO_REUSE。 'netstat -na' 确认端口已绑定;并且“lsof”确认它不再属于某个进程。重置防火墙和接口没有帮助。

标签: ios udp gcdasyncsocket


【解决方案1】:

GDAAsyncUdpSocket 的当前负责人没有(也)设置 SO_REUSEPORT(它只是设置 ADDRESS,这对于 TCP 来说已经足够了)。

我只是快速修复:

https://github.com/dirkx/CocoaAsyncSocket/commit/5ec8c83d59ecb754824f706198eb62e29961c1be

https://github.com/dirkx/CocoaAsyncSocket

它也应该在上游得到修复:

https://github.com/robbiehanson/CocoaAsyncSocket/pull/159

谢谢,

Dw.

【讨论】:

    猜你喜欢
    • 2014-01-11
    • 2020-07-07
    • 2015-06-18
    • 1970-01-01
    • 2020-12-10
    • 1970-01-01
    • 1970-01-01
    • 2018-02-22
    相关资源
    最近更新 更多