【问题标题】:Socket connect() on iOS blocks for more than 30 secondsiOS 上的 Socket connect() 阻塞超过 30 秒
【发布时间】:2013-08-11 20:28:08
【问题描述】:

我不知道是什么原因造成的,但是在 iOS 上使用套接字并调用 connect() 会使应用程序挂起 30 秒到 1 分钟或更长时间。当它最终返回时,有一半的时间连接失败,即使服务器工作正常。

我使用的是低级套接字,因为我完全避免使用客观的 C 代码。 什么可能导致这种情况?

【问题讨论】:

  • 这是正常行为。 connect() 系统调用在给出connection timeout 错误之前总共进行了大约一分钟的内部重试。当出现网络连接问题时,您会收到此信息。
  • 赞成毫无意义的无用的、无法解释的反对票。

标签: ios sockets networking


【解决方案1】:

虽然这种行为是正常的,但您可以在连接之前将您的套接字设置为非阻塞,这样您就可以在等待它的同时做其他事情。

使用 select 查看它是否可写,当它返回 true 时,连接已完成(一种或另一种方式)。

关于如何检测连接是否成功的详细信息是here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-14
    • 1970-01-01
    • 2018-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多