我正在閱讀W. Richard Stevens的Unix Network Programming。 作者說,如果阻塞連接呼叫中斷,我可以使用'選擇'作爲非阻塞連接的選擇。阻止'connect'系統調用中斷
我很困惑。如果我應該調用一個非阻塞連接,然後選擇新的socktfd,或者應該選擇傳遞給前一個阻塞連接調用的舊socketfd?
而且我在帖子中看到,如果信號動作與SA_RESTART標誌一起傳遞,則說'連接'是可重新啓動的。如果這樣我完全可以忽略阻塞連接中斷的情況?
我正在閱讀W. Richard Stevens的Unix Network Programming。 作者說,如果阻塞連接呼叫中斷,我可以使用'選擇'作爲非阻塞連接的選擇。阻止'connect'系統調用中斷
我很困惑。如果我應該調用一個非阻塞連接,然後選擇新的socktfd,或者應該選擇傳遞給前一個阻塞連接調用的舊socketfd?
而且我在帖子中看到,如果信號動作與SA_RESTART標誌一起傳遞,則說'連接'是可重新啓動的。如果這樣我完全可以忽略阻塞連接中斷的情況?
在提示符處輸入'man 7 signal'。搜索EINTR。它解釋了一切。如果您的流程中沒有任何可能觸發信號的代碼,那麼您可能不必擔心這一點。或者你可以把EINTR看作是一個瞬態錯誤(類似於EAGAIN,EWOULDBLOCK),並且可以正常恢復。 – selbie 2013-03-16 05:28:10
什麼是新sockfd?每個插座只有一個。調用connect()不會創建新的Le。 – EJP 2013-03-16 06:46:24