簡述
獲取一個套接口選項。#include
intPASCALFARgetsockopt(SOCKETs,intlevel,intoptname,
charFAR*optval,intFAR*optlen);
s:一個標識套接口的描述字。
level:選項定義的層次。支持的層次僅有SOL_SOCKET和IPPROTO_TCP。
optname:需獲取的套接口選項。
optval:指針,指向存放所獲得選項值的緩衝區。
optlen:指針,指向optval緩衝區的長度值。
注釋
getsockopt()函式用於獲取任意類型、任意狀態套接口的選項當前值,並把結果存入optval。在不同協定層上存在選項,但往往是在最高的“套接口”層次上,設定選項影響套接口的操作,諸如操作的阻塞與否、包的選徑方式、帶外數據的傳送等。
被選中選項的值放在optval緩衝區中。optlen所指向的整形數在初始時包含緩衝區的長度,在調用返回時被置為實際值的長度。對SO_LINGER選項而言,相當於linger結構的大小,對其他選項來說,是一個整形數的大小。
如果未進行setsockopt()調用,則getsockopt()返回系統預設值。
getsockopt()支持下列選項。其中“類型”欄指出了optval所指向的值。僅有TCP_NODELAY選項使用了IPPROTO_TCP層;其餘選項均使用SOL_SOCKET層。
選項類型意義
SO_ACCEPTCONNBOOL套接口正在用listen()監聽。
SO_BROADCASTBOOL套接口設定為傳送廣播信息。
SO_DEBUGBOOL允許調試。
SO_DONTLINERBOOL若為真,則SO_LINGER選項被禁止。
SO_DONTROUTEBOOL禁止選徑。
SO_ERRORint獲取錯誤狀態並清除。
SO_KEEPALIVEBOOL傳送“保持活動”信息。
SO_LINGERstructlingerFAR*返回當前各linger選項。
SO_OOBINLINEBOOL在普通數據流中接收帶外數據。
SO_RCVBUFint接收緩衝區大小。
SO_REUSEADDRBOOL套接口能和一個已在使用中的地址捆綁。
SO_SNDBUFint傳送緩衝區大小。
SO_TYPEint套接口類型(如SOCK_STREAM)。
TCP_NODELAYBOOL禁止傳送合併的Nagle算法。
getsockopt()不支持的BSD選項有:
選項名類型意義
SO_RCVLOWATint接收低級水印。
SO_RCVTIMEOint接收逾時。
SO_SNDLOWATint傳送低級水印。
SO_SNDTIMEOint傳送逾時。
IP_OPTIONS獲取IP頭中選項。
TCP_MAXSEGint獲取TCP最大段的長度。
用一個未被支持的選項去調用getsockopt()將會返回一個WSAENOPROTOOPT錯誤代碼(可用WSAGetLastError()獲取)。
返回值:
若無錯誤發生,getsockopt()返回0。否則的話,返回SOCKET_ERROR錯誤,應用程式可通過WSAGetLastError()獲取相應錯誤代碼。
錯誤代碼:
WSANOTINITIALISED:在使用此API之前應首先成功地調用WSAStartup()。
WSAENETDOWN:WINDOWS套接口實現檢測到網路子系統失效。
WSAEFAULT:optlen參數非法。
WSAEINPROGRESS:一個阻塞的WINDOWS套接口調用正在運行中。
WSAENOPROTOOPT:未知或不支持選項。其中,SOCK_STREAM類型的套接口不支持SO_BROADCAST選項,SOCK_DGRAM類型的套接口不支持SO_ACCEPTCONN、SO_DONTLINGER、SO_KEEPALIVE、SO_LINGER和SO_OOBINLINE選項。
WSAENOTSOCK:描述字不是一個套接口。
參見
setsockopt(),WSAAsyncSelect(),socket().