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

时间:2015-02-19 04:50:05

标签: c sockets unix select tcp

我正在使用C创建聊天服务器/客户端,我正在使用select()来监控我的套接字。

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

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

服务器:

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以监视读取。但是,新的查看客户端连接似乎没有引发任何事情。

1 个答案:

答案 0 :(得分:2)

发布此消息后,我找到了解决方案。当有新客户端时,需要读取侦听套接字。只有在接受连接后才会看到新套接字被写入。监听新连接的套接字显然需要从不写入读取。会为其他人保留这个......