我用socket() + POLLIN poll() + recv() + send()编写了一个小型TCP服务器,但是我不知道何时使用 POLLOUT 民意调查或选择writefds对可写事件进行民意调查。

谁能给我一个 POLLOUT 实际用法的示例吗?

最佳答案

通常的模式是将无阻塞文件描述符与poll()一起使用,如下所示:

  • 准备使用poll()时,
  • 始终设置POLLIN,因为您始终对读取套接字另一端发送给您的内容感兴趣。
  • 除非您有大量积压的传入数据,并且有意让另一端在发送更多数据之前等待。
  • 仅当您有要发送到另一端的出色数据时,才设置POLLOUT
  • poll()返回后,如果它指示可以读取数据,
  • 阅读并使用它来做些什么
  • poll()返回时,如果指示套接字是可写的,
  • 尝试发送您的未完成数据。
  • 如果您设法全部编写,则下次无需通过
  • 循环来设置POLLOUT
  • 如果您仅设法发送了其中的一部分(或全都不发送),请保留其余部分以备后用。您将在下一次循环中设置POLLOUT
  • 当您要发送新数据时(响应读取的数据或响应某些外部事件),您有两种选择:
  • 急切尝试立即发送其中的一些。您可能没有成功发送任何,全部或全部。就像前面的情况一样,保留下一次未写入的数据部分,并计划仅在剩余一些数据的情况下才通过循环设置POLLOUT
  • 只需保留数据,并计划下一次在循环中设置POLLOUT。 (此选择通常更容易编程,因为您只需要在循环中的一个位置处处理数据写入,但另一方面,它会将数据写入延迟到下一次循环中。)
  • 关于c - 什么时候使用poll C函数的POLLOUT事件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12170037/

    10-09 08:46