我写了一个小型 TCP 服务器socket()
+ POLLIN poll()
+ recv()
+ send()
,但我不知道什么时候使用POLLOUT轮询或选择writefds
轮询可写事件。
谁能给我一个实际用法的例子POLLOUT?
通常的模式是使用非阻塞文件描述符poll()
像这样:
- When getting ready to
poll()
,
- Always set
POLLIN
because you are always interested in reading what the other end of the socket has send you.
- 除非您有大量积压的传入数据,并且您故意想让另一端等待后再发送更多数据。
- Set
POLLOUT
仅当您有未完成的数据要发送到另一端时。
- Upon return from
poll()
, if it indicates that data is available to read,
- Upon return from
poll()
, if it indicates that the socket is writable,
- Try sending your outstanding data.
- 如果你设法写了所有内容,你就不会设置
POLLOUT
下次通过循环
- 如果您只发送了其中一部分(或全部发送),则保留其余部分以供稍后使用。你将设置
POLLOUT
下一次通过循环。
- When you have new data to send (either in response to data you read or in response to some external event), you have two choices:
- 急切地尝试立即发送其中一些。您可能不会成功发送任何内容、也可能会成功发送部分内容或全部内容。就像之前的情况一样,保留未写入的部分数据以供下次使用并计划设置
POLLOUT
仅当还剩下一些数据时才进行下一次循环。
- 只需保留数据并计划设置即可
POLLOUT
下一次通过循环。 (这种选择通常更容易编程,因为您只需要在循环中的一个位置处理写入数据,但另一方面它会延迟写入数据,直到下一次循环为止。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)