绑定失败:错误的文件描述符

时间:2015-09-08 15:37:29

标签: c++ c sockets

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

J.lst <- list(data.frame(t = 0.5:9.5, J = rnorm(10, 5, 1)), data.frame(t = 0.5:9.5, J = rnorm(10, 6, 3)))
J.int <- lapply(J.lst, function(df) approxfun(df[, 1] + t.0, df[, 2], yleft = 0, yright = 0))
t.vec <- 1:10
t.0 <- 0

我一直在

 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);

    }

然而,我的文件描述符完全符合beej指南。有什么帮助吗?

2 个答案:

答案 0 :(得分:4)

这是你的问题:

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));

这会阻止应用体验&#34;地址已在使用&#34;如果在短时间内被杀死并重新启动,则会出错。

答案 1 :(得分:1)

看起来像是由错字引起的:

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

应该是:

server_socket = socket(AF_INET, SOCK_STREAM, 0);
相关问题