2012-01-21 43 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()將文件描述符動態地從阻塞切換到非阻塞並返回並不困難,您是否非常擔心與阻塞套接字兼容?只要將它們改爲非阻塞即可。