WSASend 老是返回WSAEFAULT问题解决

最近改进IOCP引擎的时候遇到的一个郁闷的问题,WSASend总是返回WSAEFAULT,而且检查调用方式都很正常,我一次发送多个数据包,所以LPWSABUF数目>=1,

我们先来看看微软官方的说明:

The lpBuffers, lpNumberOfBytesSent, lpOverlapped, lpCompletionRoutine parameter is not totally contained in a valid part of the user address space.

意思是参数涉及的内存空间在用户层并不完全有效,

尝试了好几次最后才突然想到Win32 API大多函数需要双字节对齐,当然64位估计是双字对齐,用内存池的就要特别注意了,

所以LPWSABUF指向的内存地址一定要对齐已经发送数据地址开始也需要对齐.

由此想到很多其他API需要对器,包括我们常用的MessageBox某些情况下也要对齐堆栈,至少Vista 64是这样

转载于:https://www.cnblogs.com/lifeengines/archive/2008/08/12/1266324.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值