select() VS "manual polling" 在非阻塞套接字上
select() VS "manual polling" on non-blocking socket
我有一个用于写操作(发送)的非阻塞套接字。
我想知道 select() 是否是检测以下情况的唯一方法:
- 当连接 returns EINPROGRESS 时套接字连接成功完成
- 发送 return EWOULDBLOCK 或 EGAIN
时套接字对写操作的可用性
轮询是 select() 的替代方法吗?在我的应用程序中,我已经有一个线程每 1 秒唤醒一次,它可以循环检查 connect() returns 是否为 0(连接正常)并发送 returns 是否为 0(发送正常) ) 如果必须发送一些字节。
Is polling an alternative to select()?
这是另一种选择,但不是一个好选择。你不知道要睡多久。 select()
确实如此。平均而言,手动轮询必须休眠每次尝试所需时间的两倍,并且在循环直到成功之前浪费 CPU 个周期。 select()
没有任何这些问题。
我有一个用于写操作(发送)的非阻塞套接字。
我想知道 select() 是否是检测以下情况的唯一方法: - 当连接 returns EINPROGRESS 时套接字连接成功完成 - 发送 return EWOULDBLOCK 或 EGAIN
时套接字对写操作的可用性轮询是 select() 的替代方法吗?在我的应用程序中,我已经有一个线程每 1 秒唤醒一次,它可以循环检查 connect() returns 是否为 0(连接正常)并发送 returns 是否为 0(发送正常) ) 如果必须发送一些字节。
Is polling an alternative to select()?
这是另一种选择,但不是一个好选择。你不知道要睡多久。 select()
确实如此。平均而言,手动轮询必须休眠每次尝试所需时间的两倍,并且在循环直到成功之前浪费 CPU 个周期。 select()
没有任何这些问题。