实现 IRC 客户端(仍然)。
我几乎拥有一切,但今天我注意到,有一个主要问题。
我获取了服务器发送给我的所有数据,但是如果我在显示发送给我的数据后什么也不做,只是等待,我的 while(1)
循环仅检查一次是否还有更多数据要发送接收然后停止。仅当我键入并发送某些内容时才重新启动,而不是在发送我键入的内容后,它会检查套接字上是否有任何数据正在等待并最终显示它。
这显然是错误的,因为在这种情况下,只有当我发送某些内容时,我才会看到之前收到的消息。
这是我的代码:
while(1){
if((readReady = readReadiness(sockfd))==0){ //nothing to recv
if(((writeReady = writeReadiness(sockfd))>0) && (readReady = readReadiness(sockfd))==0){ //sending is possible
(data sending part...)
}
else
continue; //if there s no data to read and cant send
}
else{ //if there s some data to recv() on the socket buffer
(parsing and receiving data part...)
}
continue;
}
readReadiness()
和 writeReadiness()
使用 select()
检查是否有任何数据要接收或可能发送一些数据。
问题是:如何制作无限循环,即使我什么都不做,也会重复检查是否有任何数据要接收。 ? (while(1)
停止检查,直到我再次发送内容)
我尝试使用 fork(),但我不知道如何使其工作并池化数据,同时仍然让我可以发送/接收和显示它。
最佳答案
在 while(1) 循环中,您可以定期“戳”服务器以获取新内容。响应将更新您的套接字的内容。这将触发套接字缓冲区上有数据需要接收()...
关于c - 如何实现无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10655726/