部分重要的SOCKET选项

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

  首先介绍两个专门用来读取和设置socket文件描述符属性的系统调用

getsockopt() && setsockopt()

函数原形

//读取socket文件描述符的属性
int getsockopt(int sockfd , int level , int option_name , void* option_value , socklen_t* restrict option_len);
//设置socket文件描述符的属性
int setsockopt(int sockfd , int level , int option_name , const void* option_value , socklen_t option_len)

参数
①、sockfd:
  指定被操作的目标socket
②、level:
  指定要操作哪个协议的选项,比如IPV4,IPV6、TCP等。
③、option_name:
  指定选项的名字
④、option_value: 
  对于getsockopt()来说,指向返回选项值的缓冲。
  对于setsockopt(),指向包含新选项值的缓冲。
④、option_len: 
  对于getsockopt()来说,作为入口参数时,选项值的最大长度。作为出口参数时,选值的实际长度。
  对于setsockopt(),现选项的长度。

返回值
成功时返回0,失败时返回-1,并设置errno。

socket选项表

这里写图片描述
注意
  对于服务器而言,部分socket选项只能在调用listen之前针对监听socket设置才有效。这是因为连接socket只能由accept调用返回,而accept从listen监听队列中获取的连接是已经完成三次握手的,这说明服务器已经想被接受的链接上发送出了TCP同步报文段。但有的socket选项却应该在TCP同步报文段中设置(比如:TCP的最大报文段)。
  对于这种情况,应该对监听socket设置这些选项,那么accept返回的连接socket将自动继承这些选项。这些选项包括:SO_DEB

socket指定网卡_嵌入式Linux下双网口Socket编程 硬件连接:首先这里有两个网卡,一个是有线网卡eth0,另外一个是无线网卡ra0,然后确保有线和无线都已经连接到两个路由器上[root@YuGe-AM1808/test/rt5370]#ifconfigeth0  Link encap:Ethernet HWaddr 00:18:31:E6:3C:15     inet addr:192.168.2.57 Bcast:192.168.2.255... 阅读详情

相关推荐

网络编程(part11)--socket模块方法及socket套接字属性

socket模块方法及socket套接字属性 部分socket模块方法 gethostname() #获取计算机名 gethostbyname() #通过名称,获取主机ip地址 getservbyname() #获取服务端口号 getservbyport() #获取端口对应服务 inet_aton() #将IP转换为bytes子串 inet_ntoa() # 将bytes子串转换为...

小山羊的学习日志 531

TCP选项之SO_RCVBUF和SO_SNDBUF

SO_RCVBUF SO_SNDBUF 先明确一个概念:每个TCP socket在内核中都有一个发送缓冲区和一个接收缓冲区,TCP的全双工的工作模式以及TCP的滑动窗口便是依赖于这两个独立的buffer以及此buffer的填充状态。接收缓冲区把数据缓存入内核,应用进程一直没有调用read进行读取的话,此数据会一直缓存在相应socket的接收缓冲区内。再啰嗦一点,不管进程是否读取socket

d323641onlydk的博客 946

Argoverse轨迹预测实战:从数据加载到地图API应用全解析

本文详细解析了Argoverse数据集在轨迹预测中的应用,从数据加载到地图API的实战技巧全涵盖。通过具体代码示例展示如何高效处理轨迹数据、实现可视化及基础预测模型,帮助开发者快速掌握自动驾驶轨迹预测的核心技术。特别介绍了Argoverse地图API的深度应用和性能优化经验。

weixin_29182481的博客 220

linux和windows下用setsockopt设置SO_SNDTIMEO,SO_RCVTIMEO的参数的一点区别

UDP的socket在某些情况:如对方关闭时,本地可能sendto不出去数据,然后recvfrom就会被阻塞,这时就需要设置 这两个参数的值提高程序质量。 linux:     struct timeval timeout={3,0};//3s     int ret=setsockopt(sock_fd,SOL_SOCKET,SO_SNDTIMEO,&timeout,sizeof(

alzy2011的专栏 7147

Linux C套接字选项SO_RCVTIMEO, SO_SNDTIMEO

套接字选项SO_RCVTIMEO: 用来设置socket接收数据的超时时间; 套接字选项SO_SNDTIMEO: 用来设置socket发送数据的超时时间;比如,一般情况下,调用accept/connect/send/recv, 进程会阻塞,但是如果对端异常,进行可能无法正常退出等待。如何让这些调用自动定时退出? 可以使用诸如alarm定时器、I/O复用设置定时器,还可以使用socket编程里函数级别的socket套接字选项SO_RCVTIMEO和SO_SNDTIMEO,仅针对与数据接收和发送相关,而无需设置

木牛的博客 3669

tcp socket发送缓冲区、接受缓冲区、滑动窗口协议之间的关系

原文:http://webseo8.net/newsinfo.aspx?type=0&id=220&page=0    点击打开链接 对于每一个TCP的SOCKET来说,都有一个发送缓冲区和接受缓冲区与之对应,下面举个例子说说发送缓冲区、接受缓冲区、滑动窗口协议之间的关系。 一、recv端     在监听套接字上准备accept,在accept结束以后不做什么操作,直接sle

qq2007xia的专栏 3519

68-套接字超时(SO_RCVTIMEO 与 SO_SNDTIMEO)

设置套接字超时的第三个技术是使用套接字选项 SO_RCVTIMEO 与 SO_SNDTIMEO,它的优势在于一次设置,所有应用于该套接字的操作都自动带有超时时间。它就好像是一个全局开关。比如对于 SO_RCVTIMEO 来说,如果设置了它,所有对该套接字的读操作在规定的时间里没完成,就直接返回并设置 errno = EWOULDBLOCK,对于 SO_SNDTIMEO 选项来说也是一样。1. 程序路

进击的小学生 1万+

socket选项部分

  首先介绍两个专门用来读取和设置socket文件描述符属性的系统调用 getsockopt () & & sockopt () 函数原形: //读取socket文件描述符的属性 int getsockopt(int sockfd , int level , int option_name , void* opt...

weixin_43743711的博客 295

Socket选项介绍

最近在用Socket做一个文件传输系统,遇到一个奇怪的现象,接收端到了最后总是接收不到发送端的数据。经过一番努力,还是找到了原因。Socke的SO_SNDBUF默认为8K,尽管关闭了TCP_NODELAY,但还是要达到8K才发送出去。   转载一篇Socket选项的说明文章: http://java.chinaitlab.com/net/786337.html   二、用于获得和设置Socket...

开发笔记 142

网络编程基础(Socket & ServerSocket)

Socket用法 构造Socket Socket() 创建Socket对象,但该构造方法不会建立与服务器的连接 Socket(InetAddress address, intport) 创建Socket对象,并试图连接到指定的服务器上。第一个参数用于封装服务器的IP地址。 Socket(String host, intport) 创建Socket对象,并试图连接到指定的服务器上。第一个参数用于封装服务器的名字。 上面是三个常用的...

风继续吹 567

Linux 2.6 内核网络部分选项介绍

Networking(网络) Networking options #Packet socket一种通讯协议可以用来直接与网络设备沟通,而不需要经过内核,选Y ##Packet socket: mmapped IO 此选项可以加快通讯的速度,选Y #Unix domain

heanyu的专栏 1193

stream_socket_client一共包含哪些部分?使用场景是什么?底层原理是什么?

词法分析是指将代码拆解为一个个“单词”或“符号”,并解析它们的含义。

长风破浪会有时的博客 1339

MTK平台Socket联网过程

zz

aaaaatiger--寻路 2210

python使用socket_python socket 基本使用

socket通常也叫做“套接字”,用于连接server client,是一个通信链的句柄,应用程序通常通过套接字向网络发出请求或应答网络请求。就像python 处理file一样:file是针对某个文件 打开-->读写-->关闭socket是针对服务器 客户端进行 打开-->读写-->关闭server部分:importsocket,sysserver_address=('12...

weixin_39942397的博客 220

套接字选项

函数原型: 选项可能存在于多层协议中,它们总会出现在最上面的套接字层。当对套接字选项进行操作时,必须给出选项所处的层和选项的名称。为了操作套接字层的选项,应该将层的值指定为。为了操作其他层的选项,必须给出控制选项的协议类型号。例如,为了表示一个选项由TCP 协议解析,层应该设定为协议号 TCP。getsockopt()函数和 setsockopt()函数的返回值在函数执行成功时,返回值为 0; 函数执行出错时,返回值为-1, 错误代码可以从 errno 中获得,其含义如下所述。EBADF:参数 s 不是有效

weixin_50866517的博客 2169

linux内核网络 通信,linux内核学习之网络篇——通过socket通信

通过网卡,让我们能达到通信,对unix是相当的复杂,组要是socket每一层都是用了不同的通信协议,需要好多设置好多的选项。因此在/dev目录下,并没有网卡对应的文件。 socket不仅可以用于各种传输协议的IP的连接。也可以用于内核支持的所有其他地址和协议类型通过网卡,让我们能达到通信,对unix是相当的复杂,组要是socket每一层都是用了不同的通信协议,需要好多设置好多的选项。因此在/dev...

weixin_36440198的博客 424

mysql登陆 加.socket_Mysql登陆时不走my.cnf配置里的socket问题

之前有采用源码进行mysql的安装,似乎并无此问题在后来的某次二进制安装后,发现my.cnf设置的socket路径为/usr/local/mysql/mysql.sock登陆mysql时会提示报错[root@MainEnv ~]# mysqlERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/my...

weixin_32307987的博客 878

iOS上的socket通信

转自:http://www.cnblogs.com/jqyp/archive/2012/01/02/2310012.html IOS上的socket通信 客户端: 导入头文件: #import #import #import #import 1. 创建连接 CFSocketContext sockContext = {0, // 结构体的版本,必须为0 self,

nokiaxjw的专栏 1994

笔记 socket

2021-11-21 socket建立链接过程 参考socket socket主要函数: 创建 sockfd(套接字描述符类型) = socket(AF_INET,SOCK_STREAM,0); 设置setsockopt(); sockaddr_in 结构体参数设置 struct sockaddr_in s; s.sin_family = AF_INET; s.sin_addr.s_addr = inet_addr(“127.0.0.1”); s.sin_port = htons(PORT); … len

weixin_51000834的博客 1778

在linux上写关于socket客户端程序时为什么会出现段错误呢,UDP方式广播通讯,socket编程,出现段错误...

#include int main(int argc, char **argv){struct sockaddr_in s_addr;int sock;int addr_len;int len;char buff[128];int yes;/* 创建socket */if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {perror("socket...

weixin_42561040的博客 345
上一篇: malloc的底层实现(ptmalloc)
下一篇: frok 与 vfork
z_ryan
博客等级 码龄9年 255粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值