我正在尝试为新套接字设置源UDP端口。我使用绑定来做到这一点。这是我的代码:
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,则每次执行程序时都会显示一个不同的端口号。