考虑以下代码:
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。如何使它起作用?
最佳答案
如绑定手册页(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
)