這篇內(nèi)容來自c++網(wǎng)絡編程卷1 第七章 ACE同步事件分離封裝.
????????????????????????????????????????????????????????????? Sidebar 14: Motivation for Nonblocking Acceptors
???????? 當把一個Acceptor socket傳遞給select(),如果收到一個鏈接,那么該socket被標識為激活狀態(tài).很多服務器利用這個事件去表明可以調(diào)用accept(),不會引起阻塞.不幸的是,有來自TCP/IP異步行為的資源競爭.在實際中,select()之后就表明一個acceptor socket是激活的(但是在accept()調(diào)用之前),client可以關閉它的連接,一旦accept()阻塞潛在的掛起整個進程.為了避免這個問題,acceptor socket當和select()一起使用的時候,應該一直被設置為非阻塞的模式.在ACE中,這步工作很方便,只要傳遞ACE_NONBLOCK標識給enable()方法就可以了.enable()方法是ACE_IPC_SAP提供的,所以ACE_SOCK_Acceptor也擁有.