无法在绑定中设置UDP源地址

时间:2018-10-24 18:00:48

标签: c linux sockets udp

我正在尝试为新套接字设置源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,则每次执行程序时都会显示一个不同的端口号。

0 个答案:

没有答案