我正在FreeBSD c中编写基本服务器和客户端聊天应用程序 . 基本上多个客户端连接到多个端口上的服务器(例如端口4,5,6,7),这些端口存储在一个阵列中,该阵列通过查找相应客户端发送的数据不断迭代 . 我使用recv(端口号,缓冲区,sizeof(缓冲区),MSG_DONTWAIT),以支持非阻塞端口 . 当我使用带阻塞的read()方法时,此方法有效,但当我使用带有非阻塞的recv方法时,它不起作用,更具体地说,它将从数组中的第一个端口接收数据,但不接收其他数据 . 从逻辑上讲,我认为我的代码有效,我只是在寻找有关recv可能出现的问题的任何见解,或者是否有人知道如何解决这个问题 .

void* chat_room(int chatid){
    printf("Entered Chatroom %d\n", chatid);
    int i = 0;
    int n;
    char buffer[150];
    while(1){

    int *array = create_chat_array(chatid);

           while(new_chatter != chatid){
            i = 0;
            while(array[i] != -1){

                n = recv(array[i], buffer, sizeof(buffer), MSG_DONTWAIT);

                    if(n > 0){
                            printf("Recieved %s, from %d\n", buffer, array[i]);
                    }


                i++;
            }
    }

}

}

这是聊天室的代码,基本上它遍历数组并尝试读取 . 它总是从数组[0]读取,但不从任何其他数据读取 . 任何见解都会有所帮助