gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 17:25:33 25 4
gpt4 key购买 nike

我正在尝试将套接字绑定(bind)到 IP 地址和监听连接的端口。这是我的相关代码(带注释和调试打印语句)

#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 ,我看到绑定(bind)函数将返回-1表示错误(绑定(bind)失败)。根据我的代码,有谁知道为什么此操作失败?我查看了我的代码,我想我已经设置好了一切(所有评论)。我什至确保我使用的端口号在分配给应用程序的范围内(1024 - 49151)。基于http://man7.org/linux/man-pages/man2/socket.2.html ,我知道套接字创建成功(返回值是3,而不是-1)

最佳答案

./err 
value of socket:3
value of bind: 0

所以,它有效。代码没有任何问题。最有可能的是,该端口应该已被另一个程序使用,或者您的程序的早期版本处于清理状态,导致该端口繁忙。要进行确认,请在调用绑定(bind)后立即使用 perror()。还要查找 SO_REUSEADDR 套接字选项以允许绑定(bind)到处于清理状态的端口。

关于c - 为什么bind函数返回-1(绑定(bind)失败)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27051670/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com