《TCP/IP网络编程》第22章

      最后更新:2022-01-18 04:49:40 手机定位技术交流文章

      《TCP/IP网络编程》第22章

      • 理解重叠I/O模型
        • 重叠I/O
        • 重叠I/O的重点不在于I/O
        • 创建重叠I/O套接字
        • 执行重叠I/O的WSASend函数
        • WSASend补充
        • 执行重叠I/O的WSARecv函数
      • 重叠I/O的I/O完成确认
        • 使用事件对象
        • 使用Completion Routine函数

      理解重叠I/O模型

      异步方式处理I/O的方法。

      重叠I/O

      同一线程内部向多个目标传输(或从多个目标接收)数据引起的I/O重叠现象。

      需要调用的I/O函数立即返回,非阻塞异步。

      重叠I/O的重点不在于I/O

      Windows中重叠I/O的重点并非I/O本身,而是如何确认I/O完成时的状态。非阻塞模式的输入输出需要另外确认执行结果。

      Windows平台下重叠I/O模型由非阻塞异步I/O函数和确认I/O完成状态的方法组成。

      创建重叠I/O套接字

      //重叠I/O的非阻塞模式的套接字
      WSASocket(PF_INET, SOCK_STREAM, 0, NULL, 0, WSA_FLAG_OVERLAPPED);

      执行重叠I/O的WSASend函数

      lpOverlapped传递NULL,WSASend函数中套接字将以阻塞方式工作。
      WSASend函数同时向多个目标传输数据时,需要分别构建WSAOVERLAPPED结构体变量(操作系统会使用)。

      WSASend补充

      若输出缓冲为空,且传输数据不大,WSASend函数调用后可以立即完成数据传输。此时WSASend函数返回0,lpNumberOfBytesSent将保存实际传输数据大小。否则返回SOCKET_ERROR,并将WSA_IO_PENDING注册为错误代码(通过WSAGetLastError函数得到),通过如下函数获取实际传输的数据大小。

      执行重叠I/O的WSARecv函数

      重叠I/O的I/O完成确认

      使用事件对象

      • 完成I/O时,WSAOVERLAPPED引用的事件对象将变为signaled状态
      • WSAGetOverlappedResult函数用于验证I/O的完成和完成结果。

      OverlappedSend_win.c

      OverlappedRecv_win.c

      使用Completion Routine函数

      注册CR(Completion Routine):Pending的I/O完成时调用此函数。

      Completion Routine函数的运作方式,I/O完成时调用注册过的函数进行事后处理。
      为了避免CR函数调用破坏程序的正常执行流,操作系统预先定义规则:只有请求I/O的线程处于alertable wait状态时才能调用CR函数。

      alertable wait状态是等待接收操作系统消息的线程状态。
      调用下列函数进入alertable wait状态。

      • WaitForSingleObjectEx
      • WaitForMultipleObjectsEx
      • WSAWaitForMultipleEvents
      • SleepEx

      WaitForSingleObjectEx、WaitForMultipleObjectsEx、SleepEx在WaitForSingleObject、WaitForMultipleObjects、Sleep上增加一个参数,若为TRUE,则相应线程进入alertable wait状态。

      WSA为前缀的函数,最后一个参数设置为TRUE,则线程进入alertable wait状态。

      启动I/O任务后,执行完紧急任务时可以调用上述任一函数验证I/O完成与否。此时操作系统知道线程进入alertable wait状态,若有已完成的I/O,调用相应CR函数。调用后,上述函数全部返回WAIT_IO_COMPLETION,并开始执行接下来的程序。

      CmplRoutinesRecv_win.c

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/16719.html

          热门文章

          文章分类