C:使用 select() 写入新客户端

C: Using select() to write to new client

我正在使用 C 创建聊天 server/client,并且我正在使用 select() 来监视我的套接字。

程序分为3个部分,服务器,查看客户端。和提交客户端。提交客户端将一个套接字连接到服务器,当有文本要从客户端读取时,select 触发需要读取它。如果是新的客户端连接,select也会触发,这样我就可以接受连接并为客户端分配套接字。

我的问题与查看客户端有关,它应该在可写时触发 select。但是,当有新连接时,select 不会执行任何操作。This 消息来源声称 select 只有在它们已经连接时才会在 write-fd 上触发。但是,如何连接新的写作客户端?

服务器:

if (select(128, &read_fds, &write_fds, NULL, NULL) == -1){
    ...
}

if (FD_ISSET(viewing_socket, &write_fds)){
    printf("%d is a new observer connection\n", viewing_socket);
    new_observer_connection();
}
if (FD_ISSET(submitting_socket, &read_fds)){
    printf("%d is a new participant connection\n", submitting_socket);
    new_participant_connection();
}

因此,当新的提交客户端连接时,它会接受连接并将新套接字添加到 &read_fds 以监视读取。但是,新的查看客户端连接似乎不会触发任何事情。

发布后几秒钟,我找到了解决方案。当有新客户端时,都需要读取监听套接字。只有在接受连接后,新套接字才会被监视以进行写入。侦听新连接的套接字显然需要读取而不是写入。会为其他人保留这个...