socket分配 一个服务端进程向操作系统申请一个scoket来监听,但是当进程退出后,还未关闭的连接不会立即消失,而是会留给操作系统处理。操作系统会尝试关闭这个连接。但是如果关闭
socket分配一个服务端进程向操作系统申请一个 scoket 来监听,但是当进程退出后,还未关闭的连接不会立即消失,而是会留给操作系统处理。操作系统会尝试关闭这个连接。但是如果关闭时出现问题,这个连接就会一直处于 TIME_WAIT 或其他非正常状态,而这是相应的端口还处于占用状态,如果这个时候再重新启动这个服务端程序,就会出现地址被占用的情况
例子测试代码:
使用 nc 进行连接:
服务端会打印 client 和 addr ,然后正常退出,但是此时使用 netstat -anop | grep 12345 查看,发现对应连接并没有被立即释放
此时再次启动服务端,发现报错了:
解决方案使用 setsockopt :
此时就不会出现地址被占用的提示了 在 c 中也有一样的方法,只是方法声明不同, c 版的用法为
其他
|
2019-06-18
2019-07-04
2021-05-23
2021-05-27
2021-05-27