舉例:s=socket();設置s為non-blocking;connect(s,..);FD_SET...;rc=select(...,10s);if(rc==0)表示10s超時了。這個超時的意思是:10s之內,select中所有socket的事件均未產生(如果至少有一個產生,則rc大于0)注意:這個10s跟connect本身的超時機制完全無關,前者的設置不影響后者。
10s后select的返回,表明10s內connect還沒成功,connect可能還在按自己的超時機制(例如慢啟動)嘗試重連(當然它最終也有個超時)。
至于connect本身的超時是否可以設置,可能各系統不一樣。順便提醒:connect的socket必須是non-blocking類型,否則,connect會阻塞,也就沒必要用select來檢測是否連接成功。
另外,那個s要注冊到write類型的fd中,即select的第3個參數中。
其他listen,recv什么的,完全類似(但listen,recv本身沒有什么超時概念)。
只不過listen的和recv的socket,要注冊到read的fd中。