共享套接口

共享套接口是一個專業術語,用於通信技術。

簡介

為了在進程間共享套接口,Windows Sockets 2引入了WSADuplicateSocket()函式。共享套接口是通過對底層的套接口創建附加的套接口描述字實現的。該函式的輸入是本地的套接口描述字和目標進程的句柄。它返回一個僅在目標進程中有效的新的套接口描述字(目標進程有可能就是原始進程)。這一機制既可以在單執行緒Windows版本(例如Windows 3.1)中使用,也可以在占先的多執行緒Windows版本(例如Windows 95和Windows NT)中使用。要注意的是,套接口可以在一個進程的不同執行緒中共享而不需要使用WSADuplicateSocket()函式,因為一個套接口描述字在進程的所有執行緒中都有效。

技術要求

基於一個共享套接口的兩個或者單個套接口描述字應該獨立地使用套接口I/O。然而Windows Sockets沒有實現任何共享控制。因此,在一個共享套接口上協調它們的操作是應用程式的責任。一個典型的使用共享套接口的例子是,有一個進程專門負責創建套接口和建立連線,並把套接口交給其他負責信息交換的進程。由於重新創建的是套接口描述字而不是底層的套接口,所以一切與套接口相關的狀態對於所有套接口描述字都是相同的。例如對一個套接口描述字套用setsockopt()操作後,對所有的套接口描述字套用GETSOCKOPT()操作都可以看到這一變化。一個進程有可能調用closesocket()函式關閉一個複製的套接口描述字,於是該描述字就被清除了,然而,底層的套接口並不會被關閉,底層的套接口將一直保持打開,直到最後的一個套接口描述字被關閉。
選擇對共享套接口的通知可以使用WSAAsyncSelect()函式和WSAEventSelect()函式。對任何共享的套接口描述字發出這些調用將會取消在這一套接口上的所有註冊事件,無論先前的註冊使用了那個套接口描述字。因此,如果應用程式想使進程A接收FD_READ事件,進程B接收FD_WRITE事件,這是做不到的。如果應用程式確實需要使用這種緊密的協調方式,我們建議應用程式開發者使用執行緒而不要使用進程。

相關詞條

相關搜尋

熱門詞條

聯絡我們