100分,求解:完成端口为何WSASend时常出错,代码为10107(WSASYSCALLFAILURE)。

时间:2021-11-11 23:51:33
100分,求解:完成端口为何WSASend时常出错,代码为10107(WSASYSCALLFAILURE)。

一个阻塞式ACCEPT 接收客户连接的线程,一个工作者线成接收数据,
一个数据处理线程,还有一个转门发送数据线程
程序经常在发送线程内的调用内存分配函数HeapAlloc时失败,在该用malloc后能,正常分配内存。
在调用发送WSASend函数时,通过GetLastErro返回值经常为10107?偶尔会成功。

6 个解决方案

#1


HeapAlloc内存分配失败,这个问题找到,
创建线程时,我用的是CreateThread函数启动线程,应该_beginThreadEx。

#2


http://topic.csdn.net/t/20050203/15/3773506.html

#3


网上能找到的IOCP的代码太多了。
是否用IOCP还得视具体需求而定,不一定用IOCP就合适。

#4


Error lookup 10107  从来不应失败的系统调用失败了。

#5


我的完成端口,创建都用的CreateThread 也没出什么问题

#6


10107的错误,是由内存分配及访问不当引起的.
问题原由:
  用HeapAlloc()分配一段大小为1024字节的内存区.而在后面代码中对这段内存区操作,将它看成大小为1050个字节,内存访问越界,而程序没有报错,后面就引起了一系列问题,如:HeapAlloc分配内存失败,WSASend失败等等,很罕见的问题.

#1


HeapAlloc内存分配失败,这个问题找到,
创建线程时,我用的是CreateThread函数启动线程,应该_beginThreadEx。

#2


http://topic.csdn.net/t/20050203/15/3773506.html

#3


网上能找到的IOCP的代码太多了。
是否用IOCP还得视具体需求而定,不一定用IOCP就合适。

#4


Error lookup 10107  从来不应失败的系统调用失败了。

#5


我的完成端口,创建都用的CreateThread 也没出什么问题

#6


10107的错误,是由内存分配及访问不当引起的.
问题原由:
  用HeapAlloc()分配一段大小为1024字节的内存区.而在后面代码中对这段内存区操作,将它看成大小为1050个字节,内存访问越界,而程序没有报错,后面就引起了一系列问题,如:HeapAlloc分配内存失败,WSASend失败等等,很罕见的问题.