2013-03-06 140 views
-4

返回失败考虑下面的代码:绑定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)); 

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

+3

您检查实际的错误? – Corbin 2013-03-06 21:24:22

+1

*是什么*实际的错误?当你忽略所有最重要的信息时,你不能指望人们回答这样的问题。 – EJP 2013-03-06 21:26:17

+0

可能有一些其他应用程序正在侦听该端口。你可以运行'netstat -a |来找到它grep“49184”' – niculare 2013-03-06 21:27:13

回答

4

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

上的错误,则返回-1,并且errno设置为合适。

我觉得这是每一个POSIX调用的标准程序,有一个名为整数错误号包含实际误差值。您可以手动检查它的值,或使用原语为PERROR或字符串错误(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"); 
} 

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

+0

谢谢。发现问题。 – code8230 2013-03-06 21:46:32