`
aigo
  • 浏览: 2568910 次
  • 性别: Icon_minigender_1
  • 来自: 宜昌
社区版块
存档分类
最新评论

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

 
阅读更多

 

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 mode socket(阻塞模式socket-windows)

    在Windows操作系统下,Socket有两种工作模式:阻塞模式(Blocking Mode)和非阻塞模式(Non-blocking Mode)。本篇文章将主要探讨阻塞模式Socket在Windows环境下的工作原理、特点以及使用方法。 ### 1. 阻塞模式...

    Java_IO完全总结

    1. **堵塞型IO (Blocking IO)**:位于`java.io`包中,这是最传统的IO模型,其特点是在读写操作完成之前会阻塞当前线程。 2. **非堵塞型IO (Non-blocking IO)**:位于`java.nio`包中,也被称为New IO或NIO。这种模型...

    网络IO模型:同步IO和异步IO,阻塞IO和非阻塞IO

    - **阻塞IO**:在阻塞模式下,当请求数据未准备好时,系统调用会暂停进程,直到数据可用。Java传统的`Socket`和`ServerSocket`类使用的就是阻塞IO。这种模型效率较低,因为CPU可能会浪费时间在等待数据上。 - **非...

    Blocking_Socket_File.zip_blocking socket

    标题中的"Blocking_Socket_File.zip_blocking socket"表明这个压缩包主要关注的是阻塞式套接字(Blocking Socket)的相关知识。在计算机网络编程中,套接字是进程间通信的一种方式,而阻塞式套接字是默认的工作模式...

    非阻塞IO完成版.rar_阻塞IO_非阻塞_非阻塞io

    非阻塞I/O(Non-blocking I/O)是一种在等待数据准备就绪时不会挂起进程或线程的I/O操作模式。与之相反的是阻塞I/O,它会在数据未准备好时导致调用者被挂起,直到数据可用。在Java和其他编程语言中,非阻塞I/O通常...

    网络IO模型:同步IO和异步IO,阻塞IO和非阻塞IO.pdf

    同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出的答案都可能不同,比如wiki,就认为asynchronous IO和non...

    JAVA_IO/NIO(demo,压缩jar文件)

    在Java编程语言中,`IO`(Input/Output)和`NIO`(Non-blocking Input/Output)是处理数据输入和输出的关键技术。本压缩包包含`JAVA_IO/NIO(demo,压缩jar文件)`,意味着它提供了一些示例代码,用于演示如何使用这两...

    Removal_of_blocking_and_ringing_artifacts_using_transform_domaindenoising

    在IT领域,尤其是在图像处理与压缩技术中,去除压缩图像中的阻塞效应(blocking artifacts)和振铃效应(ringing artifacts)是至关重要的研究方向。本文档标题与描述明确指出,将采用基于变换域的去噪方法来解决这...

    JAVA IO同步,异步

    在这种模式下,应用程序会被阻塞,直到IO 操作完成。在Linux 环境下,默认情况下所有的Socket 都是阻塞的,一个典型的读操作流程大概是这样:当用户进程调用了recvfrom 这个系统调用,kernel 就开始了IO 的第一个...

    ocx.rar_ATL_BLOCKINGSOCKET.CPP_atl ocx_atl tcp_ocx

    1. **阻塞模式套接字**:在阻塞模式下,调用套接字函数时,如果数据未准备好或操作未完成,函数将暂停执行,直到操作完成。这对于简单的同步通信来说是直观且易于管理的。 2. **套接字API的使用**:如`socket()`、`...

    Nonblocking and blocking Assignments

    博主的博客Verilog之blocking & nonblocking assignments有些内容是参考了这篇英文文献的,其中对verilog中有关阻塞与非阻塞赋值语句的8种准则进行了详细的举例说明,读者可以下载文章进行详细阅读,以便更好地理解...

    linux设备驱动中的阻塞与非阻塞IO.pdf

    2. **非阻塞IO**:相比之下,非阻塞IO模式下,当资源不可用时,进程不会被挂起,而是选择放弃当前操作或持续轮询资源状态,直到资源变为可用。这种方法可能导致CPU资源的浪费,特别是在资源长时间不可用的情况下,...

    send_isend_C语言_MPI阻塞非阻塞_MPI通信模式_非阻塞_nan_

    本主题将深入探讨C语言中MPI的两种主要通信模式:阻塞(Blocking)和非阻塞(Non-blocking)通信。 1. **阻塞通信(MPI_Send)** MPI中的`MPI_Send`函数是典型的阻塞通信方式。当一个进程调用`MPI_Send`发送数据时...

    已待解决user 的IO问题

    - NIO(Non-blocking IO)在Java中引入,允许在等待IO时进行其他操作,提高了性能。 - AIO(Asynchronous IO)进一步改进,提供了完全异步的IO模型,例如Java的CompletableFuture和NIO.2 API。 6. **错误处理**:...

    thrift阻塞与非阻塞模式下的测试

    - **单线程阻塞**: 在这种模式下,服务器处理每个请求时会阻塞,直到该请求完成才会处理下一个请求。这意味着如果一个请求耗时较长,其他请求将被阻塞,无法并发处理。这种方式简单易用,但处理高并发时性能较低。 ...

    blocking.rar_blocking _blocking probability

    i upload the matlab code related to blocking probability in cellular systems

    blocking_pool:在异步Rust应用程序中运行同步IO的线程池

    解决方案是拥有一个线程池,可以将阻塞代码卸载到该线程池中,以免阻塞主要的异步线程。 与提供的另一个提供类似功能的板条箱相比,此板条箱使用本地线程池而不是全局线程池。 这允许创建多个线程池,并且可以配置...

    Java NIO:浅析IO模型_动力节点Java学院整理

    本文将从同步和异步的概念开始,然后介绍阻塞和非阻塞的区别,接着介绍阻塞IO和非阻塞IO的区别,最后介绍五种IO模型和两种高性能IO设计相关的设计模式(Reactor和Proactor)。 一、同步和异步 同步和异步是IO模型...

    blocking-simulation.zip_matlab 阻塞率_阻塞率_阻塞率 Matlab_阻塞率matlab

    实现数字移动通信中的阻塞率仿真,并将设置的不同参数的仿真图在同一窗口显示

Global site tag (gtag.js) - Google Analytics