热情软件屋

 

线程完成后,为何还有很多端口不能释放


编号:QA002154
建立日期: 1999年12月3日 最后修改日期:1999年12月3日
所属类别:

Sowin.Li:
    操作系统:Windows98
    编程工具:VC++/C++ Builder
    问题:用CreateThread生成多个Socket连接。线程完成后,相应的Socket已经用closesocket()关闭,为何用netstat命令检查,还有很多端口不能释放,状态是FIN_WAIT2或CLOSE_WAIT。而我的数据已经确保传送完成。当我将服务端程序关闭后,再用netstat命令检查就不会看到那些端口。为什么端口不能释放?

回答:

    我已经搞定这个问题了:
    由于第一次在WINDOWS里用CreateThread(),我只是让系统隐含调用ExitThread()来释放资源,但还没有在线程退出时调用CloseHandle()释放由CreateThread()生成的句柄,同时在我的程序里有一个BUG--相应的出错处理没有增加closesocket()。
    结构如下:
    
    void foo()
    {
     do{
     th = CreateThread(.., WINAPI MyThreadProc, ..);
     if(th){
     closeHandle(th);
     }
     .....
     }
     .....
    }
    
    WINPAI MyThreadProc(...)
    {
     if(send(...) == SOCKET_ERROR){
     closesocket(mysock);
     OnErrorOccur(...);
     }
     ......
    }

此问题由Sowin.Li回答。

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio