为什么我总是使用accept()获得相同的套接字文件描述符

时间:2017-02-18 21:52:29

标签: c linux sockets

我正在使用C语言中的socket进行编码。根据Beej的书中的基本代码socket.cour code正在尝试接受多个连接。我们在一台机器上运行服务器,在另一台机器的不同终端运行两台客户机但是,服务器无法知道消息发送给谁,有时收到的消息可以在一个终端显示,而另一个终端没有消息。

似乎服务器现在无法指定要向其发送消息的客户端。我们在while循环中放入accept(),发现在每个循环中,accept()返回相同的套接字文件描述符。这很奇怪,因为两个客户端有不同的端口,所以我们认为我们应该有两个不同的套接字文件描述符。

我们的部分代码:

while(1) {  // main accept() loop
    sin_size = sizeof their_addr;
    new_fd = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size);
    if (new_fd == -1) {
        perror("accept");
        continue;
    }

    inet_ntop(their_addr.ss_family,
        get_in_addr((struct sockaddr *)&their_addr),
        s, sizeof s);
    printf("server: got connection from %s\n", s);

    if (!fork()) { // this is the child process
        close(sockfd); // child doesn't need the listener
        /*if (send(new_fd, "Hello, world!", 13, 0) == -1)
            perror("send");
        */
        struct receive_para para;
        pthread_t tid;
        pthread_t tid1;
        para.new_fd = new_fd;

为什么每个连接中返回的new_fd具有相同的值?

0 个答案:

没有答案