-3

考虑以下代码:

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。如何使它起作用?

4

1 回答 1

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打印功能)

于 2013-03-06T21:38:41.180 回答