為什麼iOS阻止綁定到UDP端口6785(IN_ADDRANY)?


Answers

Question

我正在使用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訪問我們的本地網絡。