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