bind函数失败linux,为什么bind函数返回-1(绑定失败)?

我想将一个套接字绑定到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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值