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