udp使用重叠IO WSARecvFrom总返回错误WSAENOBUFS

mm_lvw 2010-08-07 02:57:16
搞了很久,实在解决不了,请大侠帮忙!!
以下是大概步骤:

//创建套接字
m_sktSer = WSASocket(AF_INET, SOCK_DGRAM, IPPROTO_UDP, NULL, 0, WSA_FLAG_OVERLAPPED);
//绑定
sockaddr_in LocalAddr;
LocalAddr.sin_family = AF_INET;
LocalAddr.sin_addr.s_addr = INADDR_ANY;
LocalAddr.sin_port = htons(SERVER_PORT);
int iRet = bind(m_sktSer,(LPSOCKADDR)&LocalAddr,sizeof(LocalAddr));
if (SOCKET_ERROR == iRet)
{
closesocket(m_sktSer);
WSACleanup();
return FALSE;
}
//于是,就在以个线程里接收数据
ZeroMemory(buffer, iBufferLen);
int iRet = WSARecvFrom(pThis->m_sktSer,
&wsabuf,
0,
&dwRecv,
&dwFlag,
(sockaddr*)&senderAddr,
&SenderAddrSize,
&(pThis->m_overlapped),
NULL);
if(SOCKET_ERROR == iRet)
{
if (WSA_IO_PENDING == WSAGetLastError())
continue;
else
{
iRet = WSAGetLastError(); //问题就在这,客户端向它发送数据时,iRet就返回10055 就是错误WSAENOBUFS;
return 0;
}
}

!!!!!!!!!!!!!1求助!!!!!!!!!!
...全文
380 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Erueka 2012-02-20
  • 打赏
  • 举报
回复
这个问题就这样没果吗?我也遇到了,
liyinlei 2010-08-09
  • 打赏
  • 举报
回复
WSABUF wsabuf;
wsabuf.buf 需要分配内存

char buffer[1024]={0};
wsabuf.buf = buffer;
wsabuf.len = 1024;
Eleven 2010-08-09
  • 打赏
  • 举报
回复
你的wsabuf分配空间了没有?
mm_lvw 2010-08-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 chexlong 的回复:]
完成端口投递接收消息WSARecv总会收到WSAENOBUFS
http://topic.csdn.net/t/20050516/22/4011884.html
[/Quote]

chexlong,你好,看了你给我的网址,贴上面所说的比较难理解,不知我是否理解正确!

意思是说如果遇WSAENOBUFS的返回值,可以调用一个带空缓冲区的recevie操作,也就是用没有分配空间的WSABUF作为参数传递给WSARecvFrom调用一次,以便存在内存被解锁,然后再调用WSARecvFrom获取数据。是这样吗?

我试过了,问题还是不能解决!
mm_lvw 2010-08-09
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 visualeleven 的回复:]
int iRet = WSARecvFrom(pThis->m_sktSer,
&wsabuf,
0,
-->
int iRet = WSARecvFrom(pThis->m_sktSer,
&wsabuf,
1,
[/Quote]

试了,没用,我之前是1的,后来设成0,还是不行!还是返回那个错误!
Eleven 2010-08-09
  • 打赏
  • 举报
回复
int iRet = WSARecvFrom(pThis->m_sktSer,
&wsabuf,
0,
-->
int iRet = WSARecvFrom(pThis->m_sktSer,
&wsabuf,
1,
mm_lvw 2010-08-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 liyinlei 的回复:]
WSABUF wsabuf;
wsabuf.buf 需要分配内存

char buffer[1024]={0};
wsabuf.buf = buffer;
wsabuf.len = 1024;
[/Quote]

恩,我的代码跟你的一样,也是这样分配了空间的,但还是一样会返回那个错误!
mm_lvw 2010-08-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 visualeleven 的回复:]
你的wsabuf分配空间了没有?
[/Quote]

分配了,就像4楼那样,已经已经分配了,但还是那样!
来灵 2010-08-07
  • 打赏
  • 举报
回复
完成端口投递接收消息WSARecv总会收到WSAENOBUFS
http://topic.csdn.net/t/20050516/22/4011884.html

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧