Невозможно установить адрес источника UDP в привязке - PullRequest
0 голосов
/ 24 октября 2018

Я пытаюсь установить исходный порт UDP для нового сокета.Для этого я использую bind.Вот мой код:

struct sockaddr_in udpAddr, udpAssignedAddr;
socklen_t sizeOfSockAddr;
struct newSocket _newSocket, errorSocket;
socklen_t  udpAddrLen;

int udpFd = socket(AF_INET, SOCK_DGRAM|SOCK_NONBLOCK, 0);  
if (udpFd > 0) {
  udpAddr.sin_family = AF_INET;
  udpAddr.sin_addr.s_addr = htonl(INADDR_ANY);
  udpAddr.sin_port = htons(41000);
  udpAddrLen = sizeof(udpAddr); 

  if (bind(udpFd, (struct sockaddr *)&udpAddr, udpAddrLen) < 0) 
    perror("Error");

  sizeOfSockAddr =  sizeof(udpAssignedAddr);
  getsockname(udpFd, (struct sockaddr *)&udpAssignedAddr, &udpAddrLen);

  printf("%s - %d \n", inet_ntoa(udpAssignedAddr.sin_addr), 
                       ntohs(udpAssignedAddr.sin_port) );
}

Отображается тот же номер порта (10400), который НЕ назначен, независимо от того, сколько раз я его запускаю.Однако, если я установлю 0 вместо 41000, то при каждом запуске программы будет отображаться другой номер порта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...