C 绑定在UDP端口上返回失败
考虑以下代码:C 绑定在UDP端口上返回失败,c,udp,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
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。如何才能使其发挥作用 如bind手册页()所述: 在出现错误时,返回-1,并正确设置errno 我认为这是每个POSIX调用中的标准过程,有一个名为errno的整数包含实际错误的值。您可以手动检查其值,也可以将原语用作perror或strerror()
您可能想
#包括
(和打印功能的stdio.h
)您检查过实际错误吗?实际错误是什么?当你忽略了最重要的信息时,你不能期望人们回答这样的问题。可能其他应用程序正在该端口上侦听。您可以通过运行netstat-a | grep“49184”
@Corbin和@EJP来找到这一点:如何检查实际错误?如果我知道这一切,我自己就会找到答案:——)
if (Res == -1) { // some error has occurred
// prints "socket error: " + the error message:
perror("socket error");
}