Я пытаюсь установить исходный порт 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, то при каждом запуске программы будет отображаться другой номер порта.