共用傳輸位址
在大部分情況下,Winsock 核心 (WSK) 應用程式無法將通訊端系結至另一個通訊端已在使用的本機傳輸位址。 WSK 應用程式可以使用 SO_EXCLUSIVEADDRUSE 和 SO_REUSEADDR 通訊端選項來控制通訊端所系結之本機傳輸位址的共用。 根據預設,這些通訊端選項都不會設定為通訊端。 如需設定通訊端選項的詳細資訊,請參閱 在通訊端上執行控制作業。
下表顯示將第二個通訊端系結至另一個通訊端已在使用的本機傳輸位址的結果。 萬用字元和特定案例會指定通訊端是否系結至萬用字元本機傳輸位址或特定本機傳輸位址。
第二個系結 | 第一個系結 | ||||||
---|---|---|---|---|---|---|---|
預設) 沒有通訊端選項 ( |
SO_REUSEADDR |
SO_EXCLUSIVEADDRUSE |
|||||
萬用字元 |
特定 |
萬用字元 |
特定 |
萬用字元 |
特定 |
||
預設) 沒有通訊端選項 ( |
萬用字元 |
INUSE |
SUCCESS |
INUSE |
SUCCESS |
INUSE |
SUCCESS |
特定 |
CHECK |
INUSE |
CHECK |
否認 |
否認 |
INUSE |
|
SO_REUSEADDR |
萬用字元 |
否認 |
SUCCESS |
SUCCESS |
SUCCESS |
否認 |
SUCCESS |
特定 |
CHECK |
否認 |
SUCCESS |
SUCCESS |
否認 |
否認 |
|
SO_EXCLUSIVEADDRUSE |
萬用字元 |
INUSE |
INUSE |
INUSE |
INUSE |
INUSE |
INUSE |
特定 |
CHECK |
INUSE |
CHECK |
INUSE |
否認 |
INUSE |
結果的定義如下:
成功
第二個通訊端的系結作業成功。 WSK 子系統會傳回STATUS_SUCCESS的狀態。
INUSE
第二個通訊端上的系結作業失敗。 WSK 子系統會傳回STATUS_ADDRESS_ALREADY_EXISTS的狀態。
否認
第二個通訊端上的系結作業失敗。 WSK 子系統會傳回STATUS_ACCESS_DENIED的狀態。
檢查
系統會執行存取檢查,以判斷第二個通訊端上的系結作業是否成功或失敗。 如果授與存取權,系結會成功,而 WSK 子系統會傳回STATUS_SUCCESS的狀態。 如果存取遭到拒絕,系結會失敗,而 WSK 子系統會傳回STATUS_ACCESS_DENIED的狀態。
在上表中定義的案例中,執行存取檢查時,會針對第一個通訊端的安全性描述元檢查第二個通訊端的安全性內容進行檢查。
通訊端的安全性內容是由建立通訊端時傳遞至WskSocket函式或WskSocketConnect函式的OwningProcess 和 OwningThread參數所決定。 如果未在建立通訊端時指定特定進程或執行緒,則會使用建立通訊端的進程安全性內容。
通訊端的安全性描述元是由 SecurityDescriptor 參數指定,該參數會在建立通訊端時傳遞至 WskSocket 函式或 WskSocketConnect 函式。 如果未指定特定安全性描述元,WSK 子系統會使用不允許共用傳輸位址的預設安全性描述元。 使用 SO_WSK_SECURITY 通訊端選項建立通訊端之後,也可以將安全性描述元套用至通訊端。
如果兩個通訊端系結至兩個不同的特定本機傳輸位址,則沒有任何傳輸位址共用。 在此情況下,第二個系結作業一律會順利完成。