c++ - 绑定(bind)失败 : Bad file descriptor

标签 c++ c sockets

我是套接字编程的新手,在这里我尝试设置一个简单的服务器套接字并监听它。这是我的代码。

 int server_socket, client_socket, sent;
    size_t len;
    struct sockaddr_in server, client;
    char msg[] = "Hello to the world of socket programming";
    server_socket == socket(AF_INET, SOCK_STREAM, 0);

    if(server_socket == -1){
        perror("Socket creation failed: ");
        exit(-1);
    }

    //define server
    server.sin_family = AF_INET;
    server.sin_port = htons(10000);
    server.sin_addr.s_addr = INADDR_ANY;
    memset(&server.sin_zero, '\0', 8);


    len = sizeof(struct sockaddr_in);

    if((bind(server_socket, (struct sockaddr*)&server, len)) == -1){
        perror("Bind failed: ");
        exit(-1);
    }

    if(listen(server_socket, 5) == -1){
        perror("Listen failed: ");
        exit(-1);
    }

    while(true){

        if((client_socket = accept(server_socket, (struct sockaddr *)&client, (socklen_t *)&len)) == -1){

            perror("Accept failed: ");
            exit(-1);
        }

        sent = send(client_socket, msg, strlen(msg), 0);

        printf("Sent %d byte to client: %s\n", sent, inet_ntoa(client.sin_addr));

        close(client_socket);

    }

我不断得到

Bind Failed : Bad file descriptor

但是我的文件描述符完全符合 beej 指南。有帮助吗?

最佳答案

这是你的问题:

server_socket == socket(AF_INET, SOCK_STREAM, 0);

您没有为 server_socket 分配任何内容。您正在将它与 socket 的返回值进行比较。你需要这样做:

server_socket = socket(AF_INET, SOCK_STREAM, 0);

由于您正在监听 TCP 套接字,因此您还需要这样做:

int option=1;
setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,(char *)&option,sizeof(option));

这将防止应用程序在短时间内被终止并重新启动时出现“地址已在使用”错误。

关于c++ - 绑定(bind)失败 : Bad file descriptor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32461862/

相关文章:

Linux 端口转发到 Socks 代理

linux - 怎么做像 "netstat -p",但更快?

c - 为什么 epoll_ctl 说我有一个坏的 fd?

c++ - 使用 clang 共享库中的额外模块名称符号

c++ - 通过给出一个词从c++文件中删除一行

c++ - 'isprint' 在 solaris 上为不可打印的字符返回 true

c - 使用字符串键实现Hashtable插入问题

c++ - 如何在不使用蛮力的情况下找到多少没有前导零的数字(字符串 S)的排列可以被 11 整除?

c++ - 免费的非 gpl 数据压缩库

c - 斑马拼图 - C 中的约束满足