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

标签 c client server

我正在尝试将套接字绑定(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/

相关文章:

c - ‘{’ token 之前的预期表达式

javascript - 几个小时后,Nodejs 服务器停止接受连接

java - 如何从Web服务返回自定义对象的数组列表?

Java套接字服务器仅显示连接关闭后收到的消息

c - 单字符用户输入和 fgets

c - 未引用类型为 'INVALIDATION_ADDR' 的全局宏 'void' [MISRA 2012 规则 2.5,咨询]

c - 在 C 中创建一个 char[] 数组

c++ - 处理 POSIX 套接字 read() 错误

javascript - app.get() 和 app.route().get() 的区别

java - Java 中的多线程 Web 服务器