ss 显示unix 域 的socket 缓冲区不正确
一个unix 域socket,平时我们用ss -auxp 来查看是否有数据在内核没有到用户态,
[root@localhost unix]# ss -auxp |grep -i server.o
u_str LISTEN 0 20 server.socket 59714016 * 0 users:(("server.o",pid=45578,fd=7))
u_str ESTAB 0 0 * 59169156 * 59169157 users:(("server.o",pid=45578,fd=3),("gdb",pid=45482,fd=3))
u_str ESTAB 0 0 * 59169157 * 59169156 users:(("server.o",pid=45578,fd=4),("gdb",pid=45482,fd=4))
u_str ESTAB **9** 0 server.socket 59714017 * 59682769 users:(("server.o",pid=45578,fd=8))
比如最后一行的9,就说明有9个字节的数据还在内核中,没有recv。
那么,当看到为0的时候,是不是说明一定不在内核中呢?答案是否定的。
同样的环境,我们将unix_diag模块卸载掉,然后重新读取,发现还是能看到 :
[root@localhost /]# lsmod |grep unix
unix_diag 12601 0
[root@localhost unix]# rmmod unix_diag
[root@localhost unix]#
[root@localhost unix]#
[root@localhost unix]# lsmod |grep unix_diag
然后卸载之后,再用ss去查看一下,发现输出没有变化:
[root@localhost unix]# ss -auxp |grep -i server.o
u_str LISTEN 0 20 server.socket 59714016 * 0 users:(("server.o",pid=45578,fd=7))
u_str ESTAB 0 0 * 59169156 * 59169157 users:(("server.o",pid=45578,fd=3),("gdb",pid=45482,fd=3))
u_str ESTAB 0 0 * 59169157 * 59169156 users:(("server.o",pid=45578,fd=4),("gdb",pid=45482,fd=4))
u_str ESTAB **9** 0 server.socket 59714017 * 59682769 users:(("server.o",pid=45578,fd=8))
这个时候查看一下模块,发现又被加载进去了,
[root@localhost /]# lsmod |grep unix
unix_diag 12601 0
原来ss会去加载对应的 unix_diag模块。
我们将 mv unix_diag.ko.xz unix_diag.ko.xz_bak ,改名,然后再次获取:
[root@localhost unix]# ss -auxp |grep -i server.o
u_str ESTAB 0 0 * 59169156 * 0 users:(("server.o",pid=45578,fd=3),("gdb",pid=45482,fd=3))
u_str ESTAB 0 0 * 59169157 * 0 users:(("server.o",pid=45578,fd=4),("gdb",pid=45482,fd=4))
u_str LISTEN 0 0 server.socket 59714016 * 0 users:(("server.o",pid=45578,fd=7))
u_str ESTAB **0** 0 server.socket 59714017 * 0 users:(("server.o",pid=45578,fd=8))
发现读不到数据了,最后一行从9 变成了0.
因为unix域的数据在ss中展示,需要读取:
sk_diag_show_rqlen 这个函数,而如果没有加载 unix_diag,则会默认显示为0.
对于大量使用unix域通信的os,建议默认开启: CONFIG_UNIX_DIAG
ss 显示unix 域 的socket 缓冲区不正确的更多相关文章
- Linux IPC udp/tcp/UNIX域 socket编程
UNIX域套接字本地通信即在socket第一个参数中选择AF_LOCAL,socket是BSD提出的一种适用于所有的情况的进程间通信的方式,虽然现在多用于网络通信,但是本机内的进程间通信也是没有问题的 ...
- Socket编程实践(13) --UNIX域协议
UNIX域协议 UNIX域套接字与TCP相比, 在同一台主机上, UNIX域套接字更有效率, 几乎是TCP的两倍(由于UNIX域套接字不需要经过网络协议栈,不需要打包/拆包,计算校验和,维护序号和应答 ...
- unix域源码解析
首先我们先要创建一个用于通信的结构unix_proto_data ,并初始化某些字段 static int unix_proto_create(struct socket *sock, int pro ...
- ss命令结合zabbix对socket做监控
本文为博客园作者所写: 一寸HUI,个人博客地址:https://www.cnblogs.com/zsql/ 最近天冷了,socket也出问题了,一直没有做监控,现在就把监控加起来,目前我们使用的有z ...
- 《Unix 网络编程》15:Unix 域协议
Unix 域协议 ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ 本 ...
- Socket缓冲区探讨,是否有拆包的方式?
Socket缓冲区探讨 本文主要探讨java网络套接字传输模型,并对如何将NIO应用于服务端,提高服务端的运行能力和降低服务负载. 1.1 socket套接字缓冲区 Java提供了便捷的网络编程模式, ...
- UNIX域协议(命名套接字)
这里主要介绍命名UNIX域套接字 1.什么是UNIX域套接字Unix域协议并不是一个实际的协议族,而是在单个主机上执行客户/服务通信的一种方式.是进程间通信(IPC)的一种方式.它提供了两类套接字:字 ...
- UNIX域协议(无名套接字)
关于什么是UNIX域套接字可以参考:http://www.cnblogs.com/xcywt/p/8185597.html这里主要介绍非命名的UNIX域套接字的用法.1.socketpair函数先看m ...
- UNIX网络编程——Socket通信原理和实践
我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠so ...
随机推荐
- Java开发学习(三)----Bean基础配置及其作用范围
一.bean基础配置 对于bean的基础配置如下 <bean id="" class=""/> 其中,bean标签的功能.使用方式以及id和clas ...
- 解决maven依赖冲突,这篇就够了!
一.前言 什么是依赖冲突 依赖冲突是指项目依赖的某一个jar包,有多个不同的版本,因而造成了包版本冲突. 依赖冲突的原因 我们在maven项目的pom中 一般会引用许许多多的dependency.例如 ...
- MAUI模板项目闪退问题
MAUI模板项目闪退问题 在MAUI最初发布的时候就曾创建过几个模板项目进行体验过,没遇到什么坑.由于最近需要开发针对餐饮行业的收银机(安卓系统)开发一款应用,这种收银机一般配置不咋滴,系统版本和性能 ...
- 前端学习 linux —— shell 编程
前端学习 linux - shell 编程 shell 原意是"外壳",与 kernel(内核)相对应,比喻内核外的一层,是用户和内核沟通的桥梁.shell 有很多种,国内通常使用 ...
- BUUCTF-秘密文件
秘密文件 根据提示得知是属于文件被下载了,查看了下流量包直接过滤ftp包 这里看到有个RAR包存在,应该是隐写了 使用foremost分离即可 得到压缩包存在密码 默认四位纯数字爆破即可 flag{d ...
- SAP SD-Invoice 销售发票
针对销售订单的发票流程: 1. 事务码:VF01(个别生成系统发票) 创建开票凭证(发票)/ VF04 开具系统发票(可把多个item 合并成一张系统发票) 2. 事务码:VF02 修改发票, 释放 ...
- cve-2021-42287和cve-2021-42278漏洞复现
一.漏洞概述 cve-2021-42287 : 由于Active Directory没有对域中计算机与服务器账号进行验证,经过身份验证的攻击 者利用该漏洞绕过完全限制,可将域中普通用户权限提升为域管理 ...
- EasyExcel导出添加批注
直接看代码.根据个人需要做改动 注:POI也可以做批注,文章链接https://www.cnblogs.com/qq1445496485/p/15622664.html /** * 导出(批注) * ...
- VScode运行总是显示running状态
一.每次点击运行都显示code is already running,而且键盘也没有办法输入 二.解决办法 注意:记得重新启动VScode
- 模电Multisim仿真Rb变化对Q点和电压放大倍数的影响
一.目的 研究Rb变化对Q点和Au的影响. 二.方法描述 仿真电路如下所示.晶体管采用FMMT5179其参数BF=133,RB=5Ω. (1)分別测量Rb=3MΩ和3.2MΩ时得UCEQ和Au.由于信 ...