複製鏈接
請複製以下鏈接發送給好友

getsockopt()

鎖定
getsockopt()是獲取一個套接口選項。
中文名
getsockopt()
  sockfd
一個標識套接口的描述字。
optname
需獲取的套接口選項。

目錄

getsockopt()簡述

獲取一個套接口選項。

getsockopt()頭文件

sys/socket.h

getsockopt()原型

int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen);

getsockopt()參數

sockfd:一個標識套接口的描述字。
level:選項定義的層次。支持的層次僅有SOL_SOCKET和IPPROTO_TCP。
optname:需獲取的套接口選項。
optval:指針,指向存放所獲得選項值的緩衝區。
optlen:指針,指向optval緩衝區的長度值。

getsockopt()返回值

若無錯誤發生,getsockopt()返回0。否則的話,返回-1錯誤,應用程序可通過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:描述字不是一個套接口

getsockopt()註釋

getsockopt()函數用於獲取任意類型、任意狀態套接口的選項當前值,並把結果存入optval。在不同協議層上存在選項,但往往是在最高的“套接口”層次上,設置選項影響套接口的操作,諸如操作的阻塞與否、包的選徑方式、帶外數據的傳送等。
被選中選項的值放在optval緩衝區中。optlen所指向的整形數在初始時包含緩衝區的長度,在調用返回時被置為實際值的長度。對SO_LINGER選項而言,相當於linger結構的大小,對其他選項來説,是一個整形數的大小。
如果未進行setsockopt()調用,則getsockopt()返回系統缺省值。
getsockopt()支持下列選項。其中“類型”欄指出了optval所指向的值。僅有TCP_NODELAY選項使用了IPPROTO_TCP層;其餘選項均使用SOL_SOCKET層。
選項 類型 意義
SO_ACCEPTCONN BOOL 套接口正在用listen()監聽。
SO_BROADCAST BOOL 套接口設置為傳送廣播信息。
SO_DEBUG BOOL 允許調試。
SO_DONTLINER BOOL 若為真,則SO_LINGER選項被禁止。
SO_DONTROUTE BOOL 禁止選徑。
SO_ERROR int 獲取錯誤狀態並清除。
SO_KEEPALIVE BOOL 發送“保持活動”信息。
SO_LINGER struct linger FAR* 返回當前各linger選項。
SO_OOBINLINE BOOL 在普通數據流中接收帶外數據
SO_RCVBUF int 接收緩衝區大小。
SO_REUSEADDR BOOL 套接口能和一個已在使用中的地址捆綁。
SO_SNDBUF int 發送緩衝區大小。
SO_TYPE int 套接口類型(如SOCK_STREAM)。
TCP_NODELAY BOOL 禁止發送合併的Nagle算法
getsockopt()不支持的BSD選項有:
選項名 類型 意義
SO_RCVLOWAT int 接收低級水印。
SO_RCVTIMEO int 接收超時。
SO_SNDLOWAT int 發送低級水印。
SO_SNDTIMEO int 發送超時。
IP_OPTIONS 獲取IP頭中選項。
TCP_MAXSEG int 獲取TCP最大段的長度。
用一個未被支持的選項去調用getsockopt()將會返回一個WSAENOPROTOOPT錯誤代碼(可用WSAGetLastError()獲取)。