解决SOCKET通信 ERROR_INSUFFICIENT_BUFFER错误
错误发生在服务端异步收到一个socket连接,之后使用WSAGetLastError()得到的IO错误码是122
这个错误码在系统中的解释是The data area passed to a system call is too small. 就是说前面的某个buffer设置的太小,看一下上一个调用的winapi是acceptEx这个函数;下面是代码(这是错误的)
tRtn = lpfnAcceptEx(
mListenSocket, tpOverlapEx->mCommSocket,
tAcceptRecvBuf, , // 表示只接收连接,不接收数据
sizeof(sockaddr_in), sizeof(sockaddr_in),
&dwBytes, (LPOVERLAPPED)tpOverlapEx);
检查一下tAcceptRecvBuf和overlapEx中的buf,都设置了一K的大小,应该不是这两个buf出现问题的,再看一下acceptEx这个函数在msdn中的原型:
BOOL AcceptEx(
_In_ SOCKET sListenSocket,
_In_ SOCKET sAcceptSocket,
_In_ PVOID lpOutputBuffer,
_In_ DWORD dwReceiveDataLength,
_In_ DWORD dwLocalAddressLength,
_In_ DWORD dwRemoteAddressLength,
_Out_ LPDWORD lpdwBytesReceived,
_In_ LPOVERLAPPED lpOverlapped
);
再看一下msdn上面提供的demo写法
bRetVal = lpfnAcceptEx(ListenSocket, AcceptSocket, lpOutputBuf,
outBufLen - ((sizeof (sockaddr_in) + ) * ),
sizeof (sockaddr_in) + , sizeof (sockaddr_in) + ,
&dwBytes, &olOverlap);
和我写的代码对比一下,发现问题了,我的代码是
sizeof(sockaddr_in), sizeof(sockaddr_in),
而demo的代码是
sizeof (sockaddr_in) + 16, sizeof (sockaddr_in) + 16,
再看一下msdn对这两个参数的解释
dwLocalAddressLength [in]
The number of bytes reserved for the local address information. This value must be at least 16 bytes more than the maximum address length for the transport protocol in use.
dwRemoteAddressLength [in]
The number of bytes reserved for the remote address information. This value must be at least 16 bytes more than the maximum address length for the transport protocol in use. Cannot be zero.
“要比系统给的最大地址长度至少要多16个字节”,而我的代码没有多这16个字节,问题就出在这里,修改一下,再运行,就没问题了;
话说回来,为什么要多16个字节,这是系统指定的,它没说为什么,蛋疼!
关于这个函数的一些其它知识,可以参考这个连接
http://bbs.csdn.net/topics/60370188
解决SOCKET通信 ERROR_INSUFFICIENT_BUFFER错误的更多相关文章
- java centos7 gcc编码 解决socket通信 汉字乱码
1.把 Java eclipes 设置编码成utf-8 windows->preference->workspace 2.centos7 gcc 默认为utf-8
- Delphi 通信报Asynchronous socket error 10053错误的一个解决方法
在使用Delphi中的TClientSocket和TServerSocket进行通信编程时,当使用TClientSocket这方的客户端使用TClientSocket.close断开连接并退出程序时, ...
- Unity3d socket通信 切换到web版本时报错SecurityException解决办法
原文地址:传送门 今天苦战了一天,就跟一个Unity切换到web平台的socket通信出错苦苦纠缠了一天,问了好多大牛,但他们的回复都是我没搞过web平台下的通信或者我只专研于pc或者移动平台.看来没 ...
- java的Socket通信例子及关于java.net.SocketException: Socket is closed错误
今天写socket数据相互通信的时候,碰到一个及其蛋疼的错误.单向传输数据的时候server与client是没有问题的,但是两个都有输入输出操作的时候就出现了这个问题 java.net.SocketE ...
- libevent 实现的socket 通信 server以及解决找不到动态库的方法
注: client 个人觉得没必要用 libvent来实现就没写 注:由于 涉及到回调函数的使用 如有疑惑的可以先去了解回调函数的实现机理 先来说一下 libevent主要是干啥的 : 内部封装了 s ...
- day31——recv工作原理、高大上版解决粘包方式、基于UDP协议的socket通信
day31 recv工作原理 源码解释: Receive up to buffersize bytes from the socket. 接收来自socket缓冲区的字节数据, For the opt ...
- Nodejs发送Post请求时出现socket hang up错误的解决办法
参考nodejs官网发送http post请求的方法,实现了一个模拟post提交的功能.实际使用时报socket hang up错误. 后来发现是请求头设置的问题,发送选项中需要加上headers字段 ...
- java 和 C++ Socket通信(java作为服务端server,C++作为客户端client,解决中文乱码问题GBK和UTF8)
原文链接: http://www.cnblogs.com/kenkofox/archive/2010/04/25/1719649.html 代码: http://files.cnblogs.com/k ...
- C# Socket系列三 socket通信的封包和拆包
通过系列二 我们已经实现了socket的简单通信 接下来我们测试一下,在时间应用的场景下,我们会快速且大量的传输数据的情况! class Program { static void Main(stri ...
随机推荐
- .NetCore程序发布到IIS上面
一.概述 在传统的.NET Framework中,ASP.NET程序发布到IIS上面,是由IIS的工作进程(w3wp.exe)托管的,在任务管理器中可以找到该进程.在ASP.NET Core程序中不再 ...
- APICloud 真机连接失败
今天在公司将APICloud 的项目进行趁机测试的时候,发现连接失败,报如下错: 排查步骤: 1.看手机wifi与电脑是否在同一网段: 就是看ip前面的三段是不是一样.比如ip地址是 192.168. ...
- Java设计模式(6)桥模式(Bridge模式)
Bridge定义:将抽象和行为划分开来,各自独立,但能动态的结合. 为什么使用桥模式 通常,当一个抽象类或接口有多个具体实现(concrete subclass),这些concrete之间关系可能有以 ...
- CSS非ASCII字符最佳实践
问题场景 在写样式时经常需要用到非ASCII字符的属性值,如下: ? 1 2 3 4 5 6 7 8 9 10 11 .hot_list .sign_discount:before { cont ...
- SEMI-PARAMETRIC TOPOLOGICAL MEMORY FOR NAVIGATION
github: https://github.com/nsavinov/SPTM
- 【WPF】WPF DataGrid List数据源 双向绑定通知机制之ObservableCollection使用以及MultiBinding 的应用
以下代码实现了DataGrid的简单绑定List数据源 重点要提一下的是,绑定List数据源,但是不能直接用List.比如下面的代码,使用List<GridItem>只能实现数据修改的绑定 ...
- SpagoBI 教程 Lesson 3: Highchart Dashboards
SpagoBI Lesson 3: Highchart Dashboards Business Intelligence dashboards Every car comes with a dash ...
- 信噪比——信号加噪相关的知识
信噪比:即Signal noise ratio , 即SNR: 它的单位为 dB, 公式为: SNR = 10lg(PS / PN), 其中 ps 表示信号的有效功率, pn 表示噪声的有效功率: 如 ...
- 精选10款超酷的HTML5/CSS3菜单
今天向大家精选了10款超酷的HTML5/CSS3菜单,给你的网页添加不一样的精彩,一起来围观一下吧. 1.CSS3手风琴菜单 下拉展开带弹性动画 利用CSS3技术可以实现各种各样的网页菜单,我们之前也 ...
- OpenGL中各种坐标系的理解
转载:https://blog.csdn.net/meegomeego/article/details/8686816 OPENGL坐标系可分为:世界坐标系和当前绘图坐标系. 世界坐标系以屏幕中心为原 ...