setsockopt()和getsockopt()

目录

1、setsockopt()函数

2、getsockopt()函数

3、简单实例


1、setsockopt()函数

头文件:

#include <sys/types.h>
#include <sys/socket.h>

函数声明:

int setsockopt(int s,int level,int optname,const void* optval,socklen_t optlen);

setsockopt()用来设置参数s 所指定的socket 状态。

s:待设置的socket。

level:代表欲设置的网络层,一般设为SOL_SOCKET以存取SOCKET层。

optname:一般有下列几种数值

  • SO_DEBUG       打开或关闭排错模式
  • SO_REUSEADDR    允许在bind()过程中本地地址可重复使用
  • SO_TYPE    返回socket形态
  • SO_ERROR    返回socket已发生的错误原因
  • SO_DONTROUTE  送出的数据包不要利用路由设备来传输
  • SO_BROADCAST   使用广播方式传送
  • SO_SNDBUF    设置送出的暂存区大小
  • SO_RCVBUF    设置接收的暂存区大小
  • SO_KEEPALIVE   定期确定连线是否已终止
  • SO_OOBINLINE   当接收到OOB数据时会马上送至标准输入设备
  • SO_LINGER    去报数据安全且可靠的传送出去

optval:欲设置的值

opelen:optval的长度

返回值:成功返回0,,若有错误则返回-1,错误原因存于error,错误原因有以下情况:

  • EBADF    参数s 并非合法的socket 处理代码
  • ENOTSOCK    参数s 为一文件描述词, 非socket
  • ENOPROTOOPT    参数optname 指定的选项不正确.
  • EFAULT    参数optval 指针指向无法存取的内存空间.

2、getsockopt()函数

头文件:

#include <sys/types.h>
#include <sys/socket.h>

函数声明:

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

getsockopt()会将参数s所指定的socket状态返回。

s:待读取的socket。

level:代表欲读取的网络层,一般设为SOL_SOCKET以存取SOCKET层。

optname:一般有下列几种数值

  • SO_DEBUG       打开或关闭排错模式
  • SO_REUSEADDR    允许在bind()过程中本地地址可重复使用
  • SO_TYPE    返回socket形态
  • SO_ERROR    返回socket已发生的错误原因
  • SO_DONTROUTE  送出的数据包不要利用路由设备来传输
  • SO_BROADCAST   使用广播方式传送
  • SO_SNDBUF    读取送出的暂存区大小
  • SO_RCVBUF    读取接收的暂存区大小
  • SO_KEEPALIVE   定期确定连线是否已终止
  • SO_OOBINLINE   当接收到OOB数据时会马上送至标准输入设备
  • SO_LINGER    去报数据安全且可靠的传送出去

optval:值地址

opelen:optval的长度

返回值:成功返回0,,若有错误则返回-1,错误原因存于error,错误原因有以下情况:

  • EBADF    参数s 并非合法的socket 处理代码
  • ENOTSOCK    参数s 为一文件描述词, 非socket
  • ENOPROTOOPT    参数optname 指定的选项不正确.
  • EFAULT    参数optval 指针指向无法存取的内存空间.

3、简单实例

/*================================================================
 *   Copyright (C) 2021 baichao All rights reserved.
 *
 *   文件名称:setsockopt_getsockopt.cpp
 *   创 建 者:baichao
 *   创建日期:2021年01月25日
 *   描    述:
 *
 ================================================================*/
#include <iostream>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <sys/types.h>
int main()
{
    int tcp_socket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
    int optval;
    socklen_t optvallen;
    int sockopt = getsockopt(tcp_socket,SO_SNDBUF,SOL_SOCKET,&optval,&optvallen);
    std::cout<<"1  optval:"<<optval<<",optvallen:"<<optvallen<<std::endl;
    optval = 24*1024;
    optvallen = 4;
    sockopt = setsockopt(tcp_socket,SOL_SOCKET,SO_SNDBUF,&optval,optvallen);
    sockopt = getsockopt(tcp_socket,SOL_SOCKET,SO_SNDBUF,&optval,&optvallen);
    std::cout<<"2  optval:"<<optval<<",optvallen:"<<optvallen<<std::endl;

    return 0;
}

运行结果:

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值