2012-01-21 45 views
-1

你认为使用(上SOCK_STREAM我在Linux下,插座套)选择()与阻塞套接字是一个好主意,或者更好地利用超时SO_SNDTIMEO/SO_RCVTIMEO插座阻塞模式

与第一溶液的优点是,它可以与任何类型的插座的工作(阻塞和/或非阻塞状态)

+1

Stef - 你能详细阐述一下细节吗? Linux还是Windows? SOCK_STREAM或SOCK_DGRAM? – selbie

回答

1

假设要随动select()read()/write()/send()/etc ..当它返回就绪状态时,如果你的文件描述符处于阻塞模式,你必须非常小心。对于阅读,你必须确保你只有在阅读就绪指示后才能阅读一次,因为第二个可能会阻止阅读。对于写入它可能更糟糕:我想可能有一个模糊的情况下套接字报告准备好了select()但发生了一些事情,它不再准备好时,你write()它。即使这个最后的假设过于悲观,我也会认为这个解决方案是不可维护的,也是不好的做法。

考虑到使用fcntl()将文件描述符动态地从阻塞切换到非阻塞并返回并不困难,您是否非常担心与阻塞套接字兼容?只要将它们改为非阻塞即可。