Socket描述符选项[SOL_SOCKET]

Python基础学习(5)网络编程socket套接字、文件上传、粘包问题、socketserver、IO多路复用、线程进程协程、进程池、线程池、上下文管理 1. socket套接字, 简单的Server与Client案例: import socket # Server server = socket.socket() server.bind(("127.0.0.1", 9999, )) server.listen(5) # 接收客户端的请求 # 连接客户端地址信息 while True: conn, addr = server 阅读详情
AI摘要

本文详细介绍了在SOL_SOCKET层面上可用的Socket选项及其作用,包括调试信息、地址复用、路由查找等功能,帮助读者理解如何使用setsockopt进行配置。

Socket描述符选项[SOL_SOCKET]

 

#include <sys/socket.h>

     int setsockopt( int socket, int level, int option_name,

                         const void *option_value, size_t option_len);

 

    第一个参数socket是套接字描述符。第二个参数level是被设置的选项的级别,如果想要在套接字级别上设置选项,就必须把level设置为 SOL_SOCKET。 option_name指定准备设置的选项,option_name可以有哪些取值,这取决于level,以linux 2.6内核为例(在不同的平台上,这种关系可能会有不同),在套接字级别上(SOL_SOCKET),option_name可以有以下取 值:

 

  1.     SO_DEBUG,打开或关闭调试信息。

     

        当option_value不等于0时,打开调试信息,否则,关闭调试信息。它实际所做的工作是在sock->sk->sk_flag中置 SOCK_DBG(第10)位,或清SOCK_DBG位。

  2.     SO_REUSEADDR,打开或关闭地址复用功能。

     

        当option_value不等于0时,打开,否则,关闭。它实际所做的工作是置sock->sk->sk_reuse为1或0。

  3.     SO_DONTROUTE,打开或关闭路由查找功能。

     

        当option_value不等于0时,打开,否则,关闭。它实际所做的工作是在sock->sk->sk_flag中置或清 SOCK_LOCALROUTE位。

  4.     SO_BROADCAST,允许或禁止发送广播数据。

     

        当option_value不等于0时,允许,否则,禁止。它实际所做的工作是在sock->sk->sk_flag中置或清 SOCK_BROADCAST位。

  5.     SO_SNDBUF,设置发送缓冲区的大小。

     

        发送缓冲区的大小是有上下限的,其上限为256 * (sizeof(struct sk_buff) + 256),下限为2048字节。该操作将sock->sk->sk_sndbuf设置为val * 2,之所以要乘以2,是防

    止大数据量的发送,突然导致缓冲区溢出。最后,该操作完成后,因为对发送缓冲的大小 作了改变,要检查sleep队列,如果有进程正在等待写,将它们唤醒。

  6.     SO_RCVBUF,设置接收缓冲区的大小。

     

        接收缓冲区大小的上下限分别是:256 * (sizeof(struct sk_buff) + 256)和256字节。该操作将sock->sk->sk_rcvbuf设置为val * 2。

  7.     SO_KEEPALIVE,套接字保活。

     

        如果协议是TCP,并且当前的套接字状态不是侦听(listen)或关闭(close),那么,当option_value不是零时,启用TCP保活定时 器,否则关闭保活定时器。对于所有协议,该操

    作都会根据option_value置或清 sock->sk->sk_flag中的 SOCK_KEEPOPEN位。

  8.     SO_OOBINLINE,紧急数据放入普通数据流。

     

        该操作根据option_value的值置或清sock->sk->sk_flag中的SOCK_URGINLINE位。

  9.     SO_NO_CHECK,打开或关闭校验和。

     

        该操作根据option_value的值,设置sock->sk->sk_no_check。

  10.     SO_PRIORITY,设置在套接字发送的所有包的协议定义优先权。Linux通过这一值来排列网络队列。

     

        这个值在0到6之间(包括0和6),由option_value指定。赋给sock->sk->sk_priority。

  11.     SO_LINGER,如果选择此选项, close或 shutdown将等到所有套接字里排队的消息成功发送或到达延迟时间后>才会返回. 否则, 调用将立即返回。

     

        该选项的参数(option_value)是一个linger结构:

            struct linger {

                int   l_onoff;    /* 延时状态(打开/关闭) */

                int   l_linger;   /* 延时多长时间 */

            };

    如果linger.l_onoff值为0(关闭),则清 sock->sk->sk_flag中的SOCK_LINGER位;否则,置该位,并赋sk->sk_lingertime值为 linger.l_linger。

  12.     SO_PASSCRED,允许或禁止SCM_CREDENTIALS 控制消息的接收。

     

        该选项根据option_value的值,清或置sock->sk->sk_flag中的SOCK_PASSCRED位。

  13.     SO_TIMESTAMP,打开或关闭数据报中的时间戳接收。

     

        该选项根据option_value的值,清或置sock->sk->sk_flag中的SOCK_RCVTSTAMP位,如果打开,则还需 设sock->sk->sk_flag中的SOCK_TIMESTAMP位,同时,将全局变量

    netstamp_needed加1。

  14.     SO_RCVLOWAT,设置接收数据前的缓冲区内的最小字节数。

     

        在Linux中,缓冲区内的最小字节数是固定的,为1。即将sock->sk->sk_rcvlowat固定赋值为1。

  15.     SO_RCVTIMEO,设置接收超时时间。

     

        该选项最终将接收超时时间赋给sock->sk->sk_rcvtimeo。

  16.     SO_SNDTIMEO,设置发送超时时间。

     

        该选项最终将发送超时时间赋给sock->sk->sk_sndtimeo。

  17.     SO_BINDTODEVICE,将套接字绑定到一个特定的设备上。

     

        该选项最终将设备赋给sock->sk->sk_bound_dev_if。

  18.     SO_ATTACH_FILTER和SO_DETACH_FILTER。

     

        关于数据包过滤,它们最终会影响sk->sk_filter。

        以上所介绍的都是在SOL_SOCKET层的一些套接字选项,如果超出这个范围, 给出一些不在这一level的选项作为参数,最终会得到- ENOPROTOOPT的返回值。但以上的分析仅限

    于这些选项对sock-sk的值的影响,这些选项真正如何发挥作用,我们的探索道路 将漫漫其修远。

理解socket库与开发流程(tcp)(1) socket (简称:套接字),它是一个进程之间的一个工具,进程之间想要进行网络通讯就需要socket 阅读详情

相关推荐

s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 0)

因为要等待 2 个 MSL 才能最终释放连接,所以如果这个时候程序马上启动,就会出现Address already in use错误。要过 1 分钟以后才可以启动成功。如果你写了一个 web 服务器,崩溃以后被脚本自动拉起失败,需要等一分钟才正常,运维可能要骂娘了。 node1:/root/test#python p2.py Buffer size [Before]: 16384 Buffer...

zhaoyangjian724的专栏 3892

socket描述符选项[SOL_SOCKET]

<br />socket描述符选项[SOL_SOCKET]<br /><br />#include <sys/socket.h><br />int setsockopt( int socket, int level, int option_name,const void *option_value, size_t option_len);<br />第一个参数socket是套接字描述符。第二个参数level是被设置的选项的级别,如果想要在套接字级别上设置选项,就必须把level设置为 SOL_SOCKET。

mounter625的专栏 1382

逆变器技术解析:DDSRF双解耦在正负序分离中的关键作用

本文深入解析了DDSRF双解耦技术在逆变器正负序分离中的关键作用。通过建立正反旋转坐标系并利用交叉反馈解耦网络,DDSRF能快速、精准地分离电网电压中的正负序分量,从而显著提升锁相环在电网不平衡条件下的精度与系统稳定性,是现代高性能并网逆变器的核心算法之一。

m3n5b7v8c9x的博客 411

避开集成插件!手把手教你用URL登录实现Finereport与致远OA的无缝跳转

本文详细介绍了如何通过URL登录机制实现Finereport与致远OA的无缝跳转,无需复杂插件配置。文章涵盖用户体系同步、环境配置、URL登录核心设置及安全加固方案,特别适合企业数字化转型中BI工具与OA系统的轻量化集成需求。

weixin_29215815的博客 75

从零到英雄:如何用FPGA和AD9288打造你的第一台便携式示波器

本文详细介绍了如何利用FPGA和AD9288 ADC芯片从零开始打造一台高性能便携式示波器。通过硬件架构设计、高速数据采集系统实现及信号处理与显示系统的开发,读者可以掌握400Msps采样率的实现方法,并了解关键器件选型与系统优化技巧。

jjj34的博客 278

socket描述符选项[SOL_SOCKET] 详解

#include int setsockopt( int socket, int level, int option_name, const void *option_value, size_t option_len); 第一个参数socket是套接字描述符。第二个参数level是被设置的选项的级别,如果想要在套接字级别上设置选项,就必须把level设置为 SOL_SOCKET。opt

Mac os X to live 6927

Chapter2、HDR流水线

HDR内容的获取(不同曝光时间的图片合成) 相机响应函数 HDR视频

qq_55621259的博客 2597

【读书笔记】socket描述符选项[SOL_SOCKET]

#include <sys/socket.h>int setsockopt( int socket, int level, int option_name,const void *option_value, size_t option_len); 第一个参数socket是套接字描述符。第二...

andy76123的博客 117

[系统安全] 十六.PE文件逆向基础知识(PE解析和PE编辑工具)

您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列。因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全、逆向分析和恶意代码检测,“系统安全”系列文章会更加聚焦,更加系统,更加深入,也是作者的慢慢成长史。换专业确实挺难的,逆向分析也是块硬骨头,但我也试试,看看自己未来四年究竟能将它学到什么程度,漫漫长征路,偏向虎山行。享受过程,一起加油~ 作者前面介绍了三个漏洞,包括Chrome浏览器保留密码渗透解析、通过Chrome浏

杨秀璋的专栏 1万+

嵌入式模拟电路面试题大全及参考答案(持续更新)

高输入阻抗:由于晶体管的基极-发射极(BJT)或栅极-源极(MOSFET)电压很低,跨导放大器具有很高的输入阻抗。低输出阻抗:晶体管的集电极-发射极或漏极-源极电阻较低,提供较低的输出阻抗。电压控制:输入信号控制晶体管的跨导,从而控制输出电流。晶体管:作为放大器的核心,可以是BJT或MOSFET。偏置电路:为晶体管提供稳定的工作点,确保其在放大区域内工作。负载电阻:与晶体管的集电极或漏极连接,将电流转换为电压。晶体管的选择:根据所需的增益、速度和功率消耗选择合适的晶体管。偏置稳定性。

大模型大数据攻城狮的专栏 989
上一篇: epoll_create, epoll_ctl和epoll_wait
下一篇: ioctl函数
linuxerhqt
博客等级 码龄16年 8粉丝 0原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值