c - 如何实现无限循环

标签 c sockets infinite-loop irc pooling

实现 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/

相关文章:

c - 如何在 Rust 中将 char** 转换为 Vec<String>

python - 管道破裂后如何重新连接套接字?

java - 为什么在使用 String.valueOf 或 Float.toString 时此循环会变成无限循环?

rust - Rust 中无限循环的可用性

c++ - C++中的连续线程

c - 从函数返回 int 类型数组的问题

C 的代码 koans?

c++ - C++ 无法识别头文件

json - 具有Asynchat的Python JSON解码无法捕获ValueError异常

c# - SocketAsyncEventArgs 示例 : How to make the sample works? 中缺少 AsyncUserToken 类