绑定在UDP端口上返回失败

时间:2013-03-06 21:21:00

标签: c udp

请考虑以下代码:

iSocket = socket(PF_INET, SOCK_DGRAM, 0);
memset(&sSocketAddr, 0, sizeof(sSocketAddr));

sSocketAddr.sin_family = AF_INET;
sSocketAddr.sin_addr.s_addr = htonl(INADDR_ANY); 
sSocketAddr.sin_port = htons(10003);
Res = bind(iSocket, (struct sockaddr *)&sSocketAddr, sizeof(struct sockaddr_in));

在上面的代码中,bind返回-1。但对于任何其他端口号,它返回0(无错误)。我需要根据UDP客户端要求使用10003。怎么能这样做?

1 个答案:

答案 0 :(得分:4)

如绑定手册页(http://linux.die.net/man/2/bind)中所述:

  

出错时,返回-1,并正确设置errno。

我认为这是每个POSIX调用中的标准过程,有一个名为errno的整数,它包含实际错误的值。您可以手动检查其值,也可以将原语用作perror或strerror(http://www.beej.us/guide/bgnet/output/html/multipage/perrorman.html

if (Res  == -1) { // some error has occurred
    // prints "socket error: " + the error message:
    perror("socket error");
}

你可能想要#include<errno.h>(和stdio.h打印功能)