accept失败,报错10038
_小罗 2012-02-21 08:59:54 开发服务器程序,需要模拟几千个客户端,监听线程运行了一段时间之后,accept会失败,用wsagetlasterror获取的错误信息是10038,对非socket进行操作。
首先,网上说的可能是我什么地方调用了closesocket()函数,所以我在closesocket下面加了TRACE信息,打印了调用closesocket函数的所有的socket值,同时也TRACE了每次用于accept的监听socket值。但是我并没有对监听的socket进行closesocket()。
其次,我有的时候accept失败的时候我直接continue,下一次accept的时候的时候又可以了,然后过几次又会失败。
再次,我每次accept我都打印了监听socket值,不管正常异常,用于accept的值都是一样的。
还有,网上还有的说法是listen队列满了,但是如果是这个原因的话,是不是不应该是报10038的错误呢。
还有最后一个就是,有的时候我对于接收到的连接进行setsockopt的时候也会出现同样的报错,10038。所以想请问一下有没
有高手知道出现这种10038可能的原因。
我在网上看到有人说需要客户端在调用closesocket之前调用shutdown函数,我也加了,但是还是不能解决问题。
另外一个还有一种说法是监听线程的内存被污染了,但是如果是这样的话是不是那个socket值就应该会变了啊,我的监听线程是不会被工作线程干扰的,有人能提供一种证明我工作线程被污染或者保护监听线程的资源的方法也可以。
求高手救命啊