父进程结束后,socket资源不释放的问题

最近在写一个远程调试器,其中服务端负责启动被调试程序,同时将被调试程序的数据通过socket连接和客户端通信,客户端是一个界面展示程序。简单描述如下:

1客户端 -> 2服务端->3被调试程序

理想的情况是,当2服务端进程被关掉时,1和2之间的socket连接应该要断开,并且socket资源归还给操作系统。但是在测试中发现服务端进程关掉后,1和2之间的socket连接仍然存,用netstate查看

netstat -ano|findstr 9527

TCP    0.0.0.0:9527           0.0.0.0:0              LISTENING       22460
  TCP    127.0.0.1:9527         127.0.0.1:51416        ESTABLISHED     22460
  TCP    127.0.0.1:51416        127.0.0.1:9527         ESTABLISHED     12920

pid 22460的进程明明已经被杀掉了,为什么它分配的socket还在呢?它和客户端的连接仍然没有断开?

查了资料后,发现,原来 服务端进程在调用CreateProcess 创建被调试的子进程的时候,它的bInheritHandle参数用了true,将会导致子进程继承了它的socket资源,这样,即使服务端进程结束后,socket资源仍然会被调试进程所持有,这样就无法释放socket资源了。


WINBASEAPI
BOOL
WINAPI
CreateProcessA(
    _In_opt_ LPCSTR lpApplicationName,
    _Inout_opt_ LPSTR lpCom
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值