多次关闭同个句柄导致的问题

在程序中两次调用closesocket(s)是错误的,因为有可能导致其它模块的socket被关闭

 

void bug(){

   handleClose(s);               //由于原开发人员这块逻辑处理混乱,导致socket有时候不会关闭

   //cost some time

   closesocket(s);              //由于原开发人员不愿意修改逻辑,我要求他在最外层再close一次已保证释放,不然                                       //句柄数会不停的上升 ,现在看来真是糟糕的建议

}

 

当程序调用handleClose关闭socket时,系统将句柄资源回收,而到再次调用到closesocket的时候,该句柄可能再次

分给进程的其它线程模块使用,结果导致误关,因而引起其它模块出现10038(在一个非套接字上尝试了一个操作)网络出错.

后记,如果一个线程模块出现无法理解的错误,可以考虑下是不是其它模块导致,当然首先是查看下本模块是否内存越界,这很可能会破坏数据,也会导致一些莫名其妙的问题~~

你可能感兴趣的:(多次关闭同个句柄导致的问题)