Tag: 读写

使用select读取和写入相同的套接字(TCP)

我们正在写一个客户端和服务器(我认为是)非常简单的网络通信。 多个客户端连接到服务器,然后服务器将数据发送回所有其他客户端。 服务器只是位于阻塞select循环中等待流量,当它到来时,将数据发送到其他客户端。 这似乎工作得很好。 问题是客户。 在阅读时,它有时会想要写一次。 但是,我发现如果我使用: rv = select(fdmax + 1, &master_list, NULL, NULL, NULL); 我的代码将阻塞,直到有新数据要读取。 但有时(异步,来自另一个线程)我将在网络通信线程上写入新数据。 所以,我希望我的select定期唤醒,让我检查是否有要写的数据,如: if (select(….) != -1) { if (FD_SET(sockfd, &master_list)) // handle data or disconnect else // look for data to write and write() / send() those. } 我尝试将选择设置为轮询模式(或荒谬的短暂超时): // master list contains the sockfd from the getaddrinfo/socket/connect […]