CAsyncSocket::SetSockOpt
呼叫此成員函式將通訊端選項。
BOOL SetSockOpt(
int nOptionName,
const void* lpOptionValue,
int nOptionLen,
int nLevel = SOL_SOCKET
);
參數
nOptionName
值會設定通訊端選項。lpOptionValue
此需求選擇的值所提供之緩衝區的指標。nOptionLen
lpOptionValue 緩衝區的大小 (以位元組為單位)。nLevel
選項定義的層級,唯一支援的層級是 SOL_SOCKET 和 IPPROTO_TCP。
傳回值
如果不是零,則函式成功,否則 0 和特定錯誤碼來呼叫 GetLastError擷取。下列錯誤套用至這個成員函式:
WSANOTINITIALISED A 成功 AfxSocketInit 必須在使用此 API 之前發生。
WSAENETDOWN 視窗通訊端實作偵測網路子系統失敗。
WSAEFAULT lpOptionValue 不在處理序位址空間中的有效區段。
封鎖視窗通訊端作業的WSAEINPROGRESS A 正在進行中。
WSAEINVAL nLevel 無效,或在 lpOptionValue 的資訊無效。
WSAENETRESET 連接已逾時。 SO_KEEPALIVE 設定時。
WSAENOPROTOOPT 選項為未知或不支援。特別是,反之, SO_DONTLINGER、 SO_KEEPALIVE、 SO_LINGER和 SO_OOBINLINE 在型別 SOCK_DGRAM通訊端,不支援 SO_BROADCAST 在型別 SOCK_STREAM通訊端不支援。
SO_KEEPALIVE ,當設定為時,WSAENOTCONN 連接重設。
WSAENOTSOCK 描述元不是通訊端。
備註
SetSockOpt 設定通訊端選項的目前值與任何類型的通訊端,在所有狀態。雖然選項可以存在於多個通訊協定層,這個規格只會定義存在的最高的「的通訊端」的選項。選項會影響通訊端作業,例如加速資料是否為一般資料流,接收廣播資訊是否在通訊端可傳送,依此類推。
取得通訊端選項有兩種:啟用或停用功能或行為的布林值需要整數值或結構的和選項的選擇。啟用 Boolean 選項, lpOptionValue 指向非零整數。停用選項 lpOptionValue 指向整數為零。nOptionLen 應該等於布林選項的 sizeof(BOOL) 。若為其他選項、 lpOptionValue 指向包含所需值的選項的整數或結構和 nOptionLen 是整數或結構的長度。
SO_LINGER 控制項採取的動作,在未傳送的資料在通訊端時佇列,而 關閉 函式呼叫關閉通訊端。
根據預設,通訊端無法繫結 (請參閱 繫結) 加入至已使用的本機位址。不過,在某些情況下,這樣「重複」位址可能是適當的。因為每個連接由本機和遠端位址的組合唯一識別,則不會有兩個通訊端的問題會繫結至相同的本機位址,只要遠端位址是不同的。
若要通知 Windows Sockets 實作不應該允許在通訊端的一個 繫結 呼叫,因為所需的位址由另一個通訊端已經在使用中,則應用程式應該在發行 繫結 呼叫之前設定通訊端的 SO_REUSEADDR 通訊端選項。請注意 繫結 呼叫時才會說明:因此) 不需要 (,但無害的設定不會繫結至現有的位址的通訊端選項,而且在某些情況下,設定或重設 繫結 呼叫之後的選項對這個或其他通訊端的效果。
應用程式可以要求 Windows Sockets 實作藉由啟動 SO_KEEPALIVE 通訊端選項啟用「在傳輸控制通訊協定 (TCP) (TCP) 連線的 Keep-Alive 封包」。Windows Sockets 實作不需要支援使用 Keep-Alive:如果是,精確語意依實作而定,但應該一致區分 RFC 1122 第 4.2.3.6:「Requirements —通訊層的要求」。如果連接已置放因為「Keep-alive」錯誤碼 WSAENETRESET 傳回至所有呼叫正在進行中,而且在通訊端,任何後續的要求會失敗並 WSAENOTCONN。
TCP_NODELAY 選項停用 Nagle 演算法。Nagle 演算法來減少一個主機傳送的小封包數目超出緩衝區未通知傳送資料,直到全螢幕封包傳送。不過,為了,某些應用程式中使用此演算法可能有損效能和 TCP_NODELAY 可以使用關閉它。應用程式撰寫者不應該設定為 TCP_NODELAY ,除非這麼做的影響理解,而且需要,因為設定 TCP_NODELAY 可能會對網路效能明顯的負面影響。TCP_NODELAY 是使用層級 IPPROTO_TCP唯一支援的通訊端選項,其他選項使用層級 SOL_SOCKET。
如果 SO_DEBUG 選項是由應用程式,設定 Windows Sockets 提供輸出的某些實作偵錯資訊。
下列選項對 SetSockOpt支援。型別識別 lpOptionValue處理之資料的型別。
值 |
型別 |
意義 |
---|---|---|
SO_BROADCAST |
BOOL |
允許廣播訊息傳輸通訊端上的。 |
SO_DEBUG |
BOOL |
記錄偵錯資訊。 |
SO_DONTLINGER |
BOOL |
不要封鎖等待未傳送資料的 關閉 傳送。設定這個選項與設定 SO_LINGER 相等和 l_onoff 設為零。 |
SO_DONTROUTE |
BOOL |
不要將:會直接傳送至介面。 |
SO_KEEPALIVE |
BOOL |
傳送 Keep-Alive。 |
SO_LINGER |
結構的延遲 |
如果未傳送的資料,則持續 關閉 。 |
SO_OOBINLINE |
BOOL |
接收一般資料流的 Out-of-Band 資料。 |
SO_RCVBUF |
int |
指定緩衝區大小會接收。 |
SO_REUSEADDR |
BOOL |
可讓通訊端已繫結至已在使用中的位址。(請參閱 繫結)。 |
SO_SNDBUF |
int |
指定緩衝區大小來傳送。 |
TCP_NODELAY |
BOOL |
停用用於傳送聯合的 Nagle 演算法。 |
柏標記來源軟體執行應用程式。 SetSockOpt 不支援 (BSD) 的選項為:
值 |
型別 |
意義 |
---|---|---|
SO_ACCEPTCONN |
BOOL |
接聽通訊端 |
SO_ERROR |
int |
取得錯誤狀態並清除。 |
SO_RCVLOWAT |
int |
接收的下限標準。 |
SO_RCVTIMEO |
int |
接收逾時 |
SO_SNDLOWAT |
int |
傳送的下限標準。 |
SO_SNDTIMEO |
int |
傳送逾時。 |
SO_TYPE |
int |
通訊端的型別。 |
IP_OPTIONS |
|
設定 IP 標頭的選擇性欄位。 |
需求
Header: afxsock.h