getsockopt() - Unix,Linux系統呼叫
廣告
名稱getsockopt, setsockopt - 獲取和設定套接字選項摘要
#include <sys/types.h>
#include <sys/socket.h>
int getsockopt(int s, int level, int optname, void *optval, socklen_t *optlen);
int setsockopt(int s, int level, int optname, const void *optval, socklen_t optlen); 描述
getsockopt() 和 setsockopt() 操作與套接字關聯的選項。選項可能存在於多個協議層;它們始終存在於最頂層的socket層。操作套接字選項時,必須指定選項所在的層級和選項的名稱。要操作套接字層級的選項,level 指定為SOL_SOCKET。要操作任何其他層級的選項,則提供控制該選項的相應協議的協議號。例如,要指示選項應由TCP協議解釋,level應設定為TCP的協議號;參見getprotoent(3)。 引數optval和optlen用於訪問setsockopt()的選項值。對於getsockopt(),它們標識一個緩衝區,其中將返回請求的選項值。對於getsockopt(),optlen是一個值-結果引數,最初包含optval指向的緩衝區的大小,並在返回時修改為指示返回的值的實際大小。如果不需要提供或返回選項值,則optval可以為NULL。
Optname和任何指定的選項都將未經解釋地傳遞給相應的協議模組以進行解釋。包含檔案<sys/socket.h>包含套接字級別選項的定義,如下所述。其他協議級別的選項的格式和名稱各不相同;請參閱手冊第4節中的相應條目。 大多數套接字級別選項使用int引數作為optval。對於setsockopt(),如果要啟用布林選項,則引數應為非零值;如果要停用該選項,則應為零。
有關可用套接字選項的說明,請參見socket(7)和相應的協議手冊頁。
返回值成功時,返回零。出錯時,返回-1,並相應地設定errno。錯誤
| 標籤 | 描述 |
|
EBADF | 引數s不是有效的描述符。 |
|
EFAULT | optval指向的地址不在程序地址空間的有效部分。對於getsockopt(),如果optlen不在程序地址空間的有效部分,也可能返回此錯誤。 |
|
EINVAL |
setsockopt() 中的optlen無效。 |
|
ENOPROTOOPT | | | 在指示的級別上未知該選項。 |
|
ENOTSOCK | 引數s是檔案,而不是套接字。 |
符合標準SVr4, 4.4BSD(這些系統呼叫首次出現在4.2BSD中), POSIX.1-2001。注意getsockopt和setsockopt的optlen引數實際上是int [*](這就是4.x BSD和libc4以及libc5所具有的)。一些POSIX混淆導致了目前的socklen_t,glibc也使用它。另見accept(2)。缺陷一些套接字選項應在較低的系統級別進行處理。參見
廣告
|