随笔 - 733  文章 - 2  评论 - 12  阅读 - 92万

网络编程学习

一 阻塞式服务器并发编程中 socket关闭之close()和shutdown()的差异 fork()模式:

     close()是对于文件操作,关闭读写,shutdown()是对socket来说(对TCP可关闭读,关闭写,或关闭读写),但linux下一切设备皆文件。前者只是将分配的socket_fd减1,并不是立即关闭(还能接收,等其自行接触阻塞执行完后才关闭,下次再操作才失败算关闭彻底发送FIN包(TCP栈的读缓冲里还有未读取(read)数据,则调用close时会直接向对端发送RST包)。只有减到0时才执行关闭);而后者则是立即激活阻塞等待的线程时期关闭。 shutdown与socket描述符没有关系,根据linux中任何皆为文件的特性,所以调用shutdown后还要调用close才能消除操作系统对这个socket的管理。

SO_LINGER 这个参数对应大量短链接的服务器很有必要!是否那个timwait
appl: close(),  --> FIN     FIN_WAIT_1 //主动关闭socket方,调用close关闭socket,发FIN                         
                <-- ACK     FIN_WAIT_2 //对方操作系统的TCP层,给ACK响应。然后给FIN                  
                <-- FIN                  
                --> ACK     "TIME_WAIT"   -- 2MSL timeout -->CLOSED
                                        //TIME_WAIT,防止ACK没有给到对方。2MS时间长,所以服务器减少主动关闭连接。

二 非阻塞nonblocking socket和epoll的非阻塞并发编程。

posted on   杰瑞鼠  阅读(33)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
历史上的今天:
2020-04-16 W5500学习总结
2019-04-16 STM32的固件升级(RTT
2019-04-16 RT-Thread Nano移植
2019-04-16 无线透传之心跳包
2015-04-16 ucos-内存管理:
2015-04-16 UCOS-信号标志组(学习笔记)
2015-04-16 UCOS-消息队列(学习笔记)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示