网络编程学习
一 阻塞式服务器并发编程中 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的非阻塞并发编程。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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-消息队列(学习笔记)