当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

解决:阻塞模式下(blocking)WSARecv失败,error为WSA_IO_PENDING(997)、WSAEOPNOTSUPP (10045)

发表于: 2013-08-01   作者:aigo   来源:转载   浏览次数:
摘要:   iMode设置为0,为阻塞模式;iMode为非0,为非宿在模式 //------------------------- // Set the socket I/O mode: In this case FIONBIO // enables or disables the blocking mode for the // socket based on the

 

iMode设置为0,为阻塞模式;iMode为非0,为非宿在模式

//-------------------------
  // Set the socket I/O mode: In this case FIONBIO
  // enables or disables the blocking mode for the 
  // socket based on the numerical value of iMode.
  // If iMode = 0, blocking is enabled; 
  // If iMode != 0, non-blocking mode is enabled.
  u_long iMode = 0;
  ioctlsocket(m_socket, FIONBIO, &iMode);

 

1,非阻塞模式下,需要CreateEvent,如果为阻塞模式,则不用Create,要将倒数第二个参数lpOverlapped设为NULL,否则会出现WSA_IO_PENDING(997)错误。

 

2,无论是阻塞模式,还是非阻塞模式,需要将Flags设为0,否则会出现WSAEOPNOTSUPP (10045)错误。由于Flags是in_out类型,所以每次WSARecv前都要设为0。

 

WSAOVERLAPPED RecvOverlapped = {0};
RecvOverlapped.hEvent = WSACreateEvent();
if (RecvOverlapped.hEvent  == NULL) 
{
	fprintf(stderr, "WSACreateEvent failed: %d\n", WSAGetLastError());
	closesocket(ConnSocket);
	return;
}

WSABUF DataBuf;
DWORD RecvBytes, Flags = 0;

char buffer[4096];
DataBuf.len = 4096;
DataBuf.buf = buffer;
	  
int rc = WSARecv(ConnSocket, &DataBuf, 1, &RecvBytes, &Flags, &RecvOverlapped, NULL);

 

解决:阻塞模式下(blocking)WSARecv失败,error为WSA_IO_PENDING(997)、WSAEOPNOTSUPP (10045)

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)I
从:http://blog.sina.com.cn/s/blog_5d0990c7010115ib.html 转载 Socket 阻塞与非阻塞模式 阻塞模
mysql 用过的都知道,非常的轻盈强大,5.5版本以前在安装配置的过程中,基本上都是非常顺利的,从5.5
自从升级到 XCode + iOS 6的环境后, 项目编译满屏飘红(Error), 与ffmpeg相关的静态链接库全部报错误
自从升级到 XCode + iOS 6的环境后, 项目编译满屏飘红(Error), 与ffmpeg相关的静态链接库全部报错误
自从升级到 XCode + iOS 6的环境后, 项目编译满屏飘红(Error), 与ffmpeg相关的静态链接库全部报错误
写在前面: 记得是自己第三次碰到 “error:unknown filesystem”这种问题了,前两次也曾尝试着去解
适合初中级读者阅读 有时,花上几个小时阅读、调试、跟踪优秀的源码程序,能够更快地掌握某些技术关
非阻塞套接字 非阻塞模式是指:套接字在执行操作时,调用的函数不管操作是否完成都会立即返回的工作
Mac下翻_墙的问题 话说GFW屏蔽谷歌已经有一阵子了,最近打算在Mac系统下折腾个Android应用,备好了I
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号