首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

linux源码看socket的close

linux源码看socket的close 笔者一直觉得如果能知道从应用到框架再到操作系统的每一处代码,是一件Exciting的事情。...上篇博客讲了socket的阻塞和非阻塞,这篇就开始谈一谈socket的close(以tcp为例且基于linux-2.6.24内核版本) TCP关闭状态转移图: 众所周知,TCP的close过程是四次挥手...出现大量close_wait的情况 linux中出现大量close_wait的情况一般是应用在检测到对端fin时没有及时close当前连接。有一种可能如下图所示: ?...总结 linux内核源代码博大精深,阅读其代码很费周折。之前读>的时候由于有先辈引导和梳理,所以看书中所使用的BSD源码并不觉得十分费劲。...直到现在自己带着问题独立看linux源码的时候,尽管有之前的基础,仍旧被其中的各种细节所迷惑。希望笔者这篇文章能帮助到阅读linux网络协议栈代码的人。

5.4K80
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    关于linux进程间的close-on-exec机制

    如果exec()因某种原因失败,可能还需要使这些描述符保持打开状态。如果这些描述符依然关闭,将他们重新打开并执行相同的文件的难度是可想而知,是相当大的,基本不可能。...在exec()调用后,close-on-exec标志为0的情况,此文件不被关闭;非零则在exec()后自动关闭。默认close-on-exec状态为0,需要通过FD_CLOEXEC设置。.../** porting code from libdaemon-0.14/libdaemon/dfork.c:daemon_close_allv */static int daemon_close_allv...Linux系统的open函数,其中flags参数可以传入O_CLOEXEC标记,即可自动设置上FD_CLOEXEC标记,但Linux内核版本2.6.23才开始支持此标记。...参考:《Linux/Unix系统编程手册》 扩展问题: 就是父子进程中的端口占用情况。

    2.8K30

    Linux系统调用API】一、open与close函数

    并且,printf()函数会调用Linux的系统函数write()函数(它是一个系统接口,也可以人工调用),write()函数再继续调用sys_write()函数(这个函数只能是操作系统去调用),sys_write...实际上,在Linux下启动一个进程,就会默认打开三个文件描述符:0标准输入、1标准输出、2标准错误。它们分别对应C语言中的stdin、stdout、stderr。...O_NONBLOCK :非阻塞的方式打开文件 mode:权限位 (实际的权限是mode & ~umask的结果) 函数返回值 返回最小的空闲的文件描述符,如果失败则返回-1并设置errno,fopen(...函数参数 fd :一个文件的文件描述符 函数返回值 成功返回0,失败返回-1且设置errno,close() returns zero on success....(fd); } return 0; } 实际上main函数也是有参数和返回值的,只不过我们在平时的学习中可能很少用到,main的返回值是int类型的,main函数的参数在Linux下编程用的还是比较多的

    12110

    Linux引导grub失败问题

    Windows 大更新导致 Linux 引导 grub 失败 1.1 问题 我的电脑装有 Windows 10 和 Manjaro 双系统,最近我把 Windows 10 升级了,没想到原来漂亮的 Manjaro...grub 菜单界面就再也出不来了,只见终端弹出一下信息: error:unknow filesystem grub rescue> 此时进入的是 grub 修复模式,此模式下可以使用的终端命令很少,大部分 Linux...grub rescue> ls (hd1,gpt4)/ 结果正确显示出 Linux 文件系统结构出来了: / ../ lost+found/ boot/ etc/ medita/ ......grub rescue> set prefix=(hd1,gpt4)/boot/grub grub rescue> set root=hd1,gpt4 然后使用 insmod 命令加载正常模块并进入 Linux...rescue> insmod normal # 加载正常模块(如果修改正确则输出的 grub rescue> 颜色会改变) grub rescue> normal # 载入 Linux

    8.9K20

    浅谈CLOSE_WAIT

    所谓 CLOSE_WAIT,借用某位大牛的话来说应该倒过来叫做 WAIT_CLOSE,也就是说「等待关闭」,如果你还不理解其含义,可以看看 TCP 关闭连接时的图例: TCP Close 不要被图中的...通常,CLOSE_WAIT 状态在服务器停留时间很短,如果你发现大量的 CLOSE_WAIT 状态,那么就意味着被动关闭的一方没有及时发出 FIN 包,一般有如下几种可能: 程序问题:如果代码层面忘记了...close 相应的 socket 连接,那么自然不会发出 FIN 包,从而导致 CLOSE_WAIT 累积;或者代码不严谨,出现死循环之类的问题,导致即便后面写了 close 也永远执行不到。...这是因为 Linux 有一个「tcp_fin_timeout」设置,控制了 FIN_WAIT2 的最大生命周期。...坏消息是 CLOSE_WAIT 没有类似的设置,如果不重启进程,那么 CLOSE_WAIT 状态很可能会永远持续下去;好消息是如果 socket 开启了 keepalive 机制,那么可以通过相应的设置来清理无效连接

    4.6K21
    领券