在非阻塞套接字上选择()VS“手动轮询”

时间:2015-05-23 08:05:41

标签: sockets network-programming

我有一个用于写操作(发送)的非阻塞套接字。

我想知道select()是否是唯一可以检测的方法: - 当connect返回EINPROGRESS时,套接字连接成功完成 - 发送返回EWOULDBLOCK或EGAIN

时写入操作的套接字的可用性

轮询select()的替代方法吗?在我的应用程序中,我已经有一个线程,每1秒唤醒一次,如果connect()返回0(连接正常),则返回循环检查,如果必须发送一些字节,则发送返回0(发送正常)。 / p>

1 个答案:

答案 0 :(得分:0)

  

轮询select()的替代方法吗?

这是另一种选择,但不是一种好选择。你不知道要睡多久。 select()。平均而言,手动轮询必须睡眠每次尝试所需的时间加倍,并且在循环直到成功时浪费CPU周期。 select()没有任何这些问题。