【问题标题】:Why does iOS prevent binding to UDP port 6785 (IN_ADDRANY)?为什么 iOS 阻止绑定到 UDP 端口 6785 (IN_ADDRANY)?
【发布时间】:2012-01-20 16:16:56
【问题描述】:

我正在开发一个使用 UDP 端口 6785 来发现网络连接数据记录器的应用程序。我的应用程序尝试调用 bind() 如下:

  int socket_handle;
  int error = 0;

  socket_handle = socket(AF_INET, SOCK_DGRAM, 0);
  if(socket_handle < 0)
     error = errno;
  if(error == 0)
  {
     struct sockaddr_in addr;
     memset(&addr, 0, sizeof(addr));
     addr.sin_len = sizeof(addr);
     addr.sin_family = AF_INET;
     addr.sin_port = htons(6785);
     addr.sin_addr.s_addr = htonl(INADDR_ANY);
     error = bind(socket_handle, (struct sockaddr const *)&addr, sizeof(addr));
  }

bind() 返回的错误是错误 49(无法分配请求的地址)。发生这种情况是因为与某些内部设备服务发生冲突,还是因为某些未知原因被操作系统阻止?

事实证明,如果我关闭了 VPN,则不会发生故障。我必须启用 VPN 才能从 wifi 访问我们的本地网络。

【问题讨论】:

  • 如果您将端口更改为其他内容,这是否有效?
  • 您的设备上是否运行了 Splashtop Remote?

标签: ios network-programming


【解决方案1】:

在调用 bind() 之前试试这个。如果端口被 TIME_WAIT 阻塞,这可以解决问题

int optval = 1;
setsockopt(socket_handle, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval));

【讨论】:

    猜你喜欢
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    • 2012-02-02
    • 1970-01-01
    • 1970-01-01
    • 2017-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多