setsockopt与getsockopt的参数解析与使用
生活随笔
收集整理的這篇文章主要介紹了
setsockopt与getsockopt的参数解析与使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章鏈接:https://codemouse.online/archives/2020-03-02-111858
對socket設置和獲取
-
代碼聲明
#include <sys/types.h> #include <sys/socket.h> int getsockopt(int sock, int level, int optname, void *optval, socklen_t *optlen); int setsockopt(int sock, int level, int optname, const void *optval, socklen_t optlen); -
參數說明
sock:將要被設置或者獲取選項的套接字。
level:選項所在的協議層。
optname:需要訪問的選項名。
optval:對于getsockopt(),指向返回選項值的緩沖。對于setsockopt(),指向包含新選項值的緩沖。
optlen:對于getsockopt(),作為入口參數時,選項值的最大長度。作為出口參數時,選項值的實際長度。對于setsockopt(),現選項的長度。 -
level取值:
SOL_SOCKET:通用套接字選項 .
IPPROTO_IP:IP選項.
IPPROTO_TCP:TCP選項. -
返回說明
成功執行時,返回0。失敗返回-1,errno被設為以下值
EBADF:sock不是有效的文件描述詞
EFAULT:optval指向的內存并非有效的進程空間
EINVAL:在調用setsockopt()時,optlen無效
ENOPROTOOPT:指定的協議層不能識別選項
ENOTSOCK:sock描述的不是套接字
SOL_SOCKET
| SO_BROADCAST | 允許發送廣播數據 | int |
| SO_DEBUG | 允許調試 | int |
| SO_DONTROUTE | 不查找路由 | int |
| SO_ERROR | 獲得套接字錯誤 | int |
| SO_KEEPALIVE | 保持連接 | int |
| SO_LINGER | 延遲關閉連接 | struct linger |
| SO_OOBINLINE | 帶外數據放入正常數據流 | int |
| SO_RCVBUF | 接收緩沖區大小 | int |
| SO_SNDBUF | 發送緩沖區大小 | int |
| SO_RCVLOWAT | 接收緩沖區下限 | int |
| SO_SNDLOWAT | 發送緩沖區下限 | int |
| SO_RCVTIMEO | 接收超時 | struct timeval |
| SO_SNDTIMEO | 發送超時 | struct timeval |
| SO_REUSERADDR | 允許重用本地地址和端 | int |
| SO_TYPE | 獲得套接字類型 | int |
| SO_BSDCOMPAT | 與BSD系統兼容 | int |
IPPROTO_IP
| IP_HDRINCL | 在數據包中包含IP首部 | int |
| IP_OPTINOS | IP首部選項 | int |
| IP_TOS | 服務類型 | |
| IP_TTL | 生存時間 | int |
IPPRO_TCP
| TCP_MAXSEG | TCP最大數據段的大小 | int |
| TCP_NODELAY | 不使用Nagle算法 | int |
使用例子
// 設置廣播包 int yes = 1; setsockopt(sock, SOL_SOCKET, SO_BROADCAST, &yes, sizeof(yes));總結
以上是生活随笔為你收集整理的setsockopt与getsockopt的参数解析与使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue监测数据的原理
- 下一篇: 硕士复试自我介绍中英模板