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() 没有任何这些问题。