gpt4 book ai didi

c - 在c代码的非阻塞设计中选择

转载 作者:行者123 更新时间:2023-11-30 17:49:53 25 4
gpt4 key购买 nike

Stevens 等人在《Unix 网络编程》中使用 select 调用的代码说明了非阻塞套接字。通常在阻塞文件描述符之间进行选择的调用完全相同。

我的理解是,非阻塞设计正是 select 的替代方案:我的代码可以循环检查非阻塞描述符并在此基础上执行其他操作,而不是在 select 调用中被阻塞。我的理解是错误的还是 select 调用有什么神秘之处使得它在非阻塞设计中不可避免?

考虑到实际情况,我需要使用大量的 TCP 套接字,并在每个套接字上设置“个人”超时。我想到使用非阻塞设计并循环遍历相应的数组。不选择的话合适吗?

谢谢。

最佳答案

可自定义的不活动计时器实际上不应该与 select() 调用有任何关系。单独维护计时器数组,在事件循环中的每个刻度或每次 迭代时更新它们,每次关联套接字有事件时重置任何计时器,在不活动达到阈值时关闭计时器。这与您实际处理输入/输出的方式没有任何关系。

是否使用select()与是否使用非阻塞套接字正交。毕竟,select() 并不能阻止您阻止读取。 select() 的作用是防止您在不希望的情况下阻塞。 (不仅仅是读取:您始终可以以零超时调用 select() ,并且 select() 也不会阻塞)。此外,它还提供了一种了解何时有输入的机制,该机制比“迭代我的整组套接字,依次在每个套接字上尝试非阻塞 read()”更有效。

关于c - 在c代码的非阻塞设计中选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17599440/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com