我想将一个套接字绑定到IP地址和它将监听连接的端口。这里是我的相关代码(W注释和调试打印语句)为什么bind函数返回-1(绑定失败)?
#define PORTNUM 2345
int main(int argc, char *argv[])
{
// socket info about client connecting to server
struct sockaddr_in dest;
//socket info about server
struct sockaddr_in serv;
//socket used to listen for incoming connections
int mysocket;
//zero the struct before filling the fields
memset(&serv, 0, sizeof(serv));
//set connection type to tcp/ip
serv.sin_family = AF_INET;
//set should be be bound to ip of the machine on which process currently executing
serv.sin_addr.s_addr = htonl(INADDR_ANY);
//set server port number
serv.sin_port = htons(PORTNUM);
//create the socket to liste for connection
mysocket = socket(AF_INET, SOCK_STREAM, 0);
printf("value of socket:%d\n", mysocket);
// bind serv information to mysocket
int v= bind(mysocket, (struct sockaddr *)&serv, sizeof(struct sockaddr));
printf("value of bind: %d\n", v);
return 1;
}
这里是我的调试打印语句当我运行我的代码
Value of socket: 3
Value of bind: -1
当我阅读文档http://linux.die.net/man/2/bind,只见那绑定函数将返回-1错误(绑定失败)。根据我的代码,有没有人知道为什么这个操作失败?我查看了我的代码,我想我已经设置了一切(所有评论)。我甚至确保我使用的端口号在分配给应用程序的范围内(1024 - 49151)。基于http://man7.org/linux/man-pages/man2/socket.2.html,我知道套接字创建成功(3返回值,而不是-1)
+1
调用'perror(“bind”);'打印实际的错误。请参阅您链接所有错误绑定可以返回的文档?这些保存在一个名为'errno'的全局变量中,您可以通过包含'errno.h'直接访问它。 'perror()'是'stdio.h'中声明的一个辅助函数。 –
2014-11-20 23:45:18
+0
我在哪里打电话perror?调用绑定之后? –
2014-11-20 23:47:19
+0
是的,在你做任何事之前。你希望你的代码像'int v = bind(...);如果(v <0){perror(“bind”); }' –
2014-11-20 23:48:15