你认为使用阻塞套接字 select()是一个好主意还是更好的使用超时 SO_SNDTIMEO / SO_RCVTIMEO
(我在Linux下,socket是在SOCK_STREAM上设置的)
第一种解决方案的优势在于它可以适用于任何类型的套接字(阻塞和/或非阻塞状态)
答案 0 :(得分:1)
假设您想要select()
/ read()
/ write()
/等跟进send()
。当它返回准备条件时,如果你的确需要非常小心文件描述符处于阻塞模式。对于读取,您必须确保在获得读取就绪指示后才读取一次,因为第二个可能会阻塞。对于写入,它可能更糟糕:我想可能有一些模糊的条件,即select()
报告套接字已准备就绪,但发生了某些事情,并且在write()
到它时它已经不再准备好了。即使这最后一个假设过于悲观,我也会认为这个解决方案是不可维护的,也是不好的做法。
考虑到使用fcntl()
将文件描述符动态地从阻塞切换到非阻塞并返回并不困难,您是否因此关注与阻塞套接字兼容?只需将它们更改为非阻塞。