在程序中两次调用closesocket(s)是错误的,因为有可能导致其它模块的socket被关闭
void bug(){
handleClose(s); //由于原开发人员这块逻辑处理混乱,导致socket有时候不会关闭
//cost some time
closesocket(s); //由于原开发人员不愿意修改逻辑,我要求他在最外层再close一次已保证释放,不然 //句柄数会不停的上升 ,现在看来真是糟糕的建议
}
当程序调用handleClose关闭socket时,系统将句柄资源回收,而到再次调用到closesocket的时候,该句柄可能再次
分给进程的其它线程模块使用,结果导致误关,因而引起其它模块出现10038(在一个非套接字上尝试了一个操作)网络出错.
后记,如果一个线程模块出现无法理解的错误,可以考虑下是不是其它模块导致,当然首先是查看下本模块是否内存越界,这很可能会破坏数据,也会导致一些莫名其妙的问题~~