WSAEventSelect模型

WSAEventSelect模型,允许应用程序在一个或者多个套接字上接受基于时间的网络通知,也接受FD_XXX类型的网络事件,依靠windows的消息驱动机制和事件对象关联起来。

基本思路:为感兴趣的一组网络事件创建个事件对象,调用WSAEventSelect函数将网络事件和事件对象关联起来.

winsock创建事件对象的函数WSACreateEvent,定义:

WSAEVENT WSACreateEvent(void);//返回一个手工设置的事件对象句柄

创建以后,调用WSAEventSelect函数指定网络事件与它关联到一起

int WSAEventSelect(
                   SOCKET s,
                   WSAEVENT hEventObject,//事件对象句柄
                   long lNetWorkEvents//感兴趣的组合
                   );

WSAWaitForMultipleEvents函数在一个或者多个事件上等待,当等待事件对象受信,或者指定事件过去时,函数返回

DWORD WSAWaitForMultipleEvents(
    DWORD cEvents,//指定下面所指数组中的事件对象句柄的个数
    const WSAEVENT* lphEvents,//指向事件对象句柄数组
    BOOL fWaitAll,//指定是否等待所有事件对象编程受信状态
    DWORD dwTimeout,//指定等待时间
    BOOL fAlertable//使用WSAEventSelect可以忽略
);

最多支持WSA_MAXIMUM_WAIT_EVENTS个对象,定义为64.

WSAWaitForMultipleEvents等待网络事件的发生

过了指定事件:返回WSA_WAIT_TIMEOUT

指定事件内有网络事件发生:返回值指明发生事件对象

函数调用失败:返回WSA_WAIT_FAILED

dwTimeout值为0,指定事件对象状态,立即返回,测试是否受信

fWaitAll设置为false后,如果有几个,也只能指明一个,句柄最前面的那个...

对象受信,找到相应的套接字,调用WSAEnumNetWorkEvents函数,即可查看发生了什么网络事件

int WSAEnumNetWorkEvents(
    SOCKET s,
    WSAEVENTS hEventObject,
    LPWSANETWORKEVENTS lpNetworkEvents
);

最后一个参数用于取得套接字发生的网络事件和相关的错误代码

typedef struct _WSANETWORKEVENTS{
    long lNetworkEvents;//指定发生的网络事件
    int iErrorCode[FD_MAX_EVENTS];//取得错误代码
}WSANETWORKEVENTS,*LPWSANETWORKEVENTS;

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 20120918-双向链表类定义《数据结构与算法分析》

    将新的节点插入双向链表的时候: iterator insert(iterator itr,const Object & x)//向双向链表中插入一个x节点 { ...

    用户1154259
  • 【Spring实战】—— 15 Spring JDBC模板使用

      前一篇通过对传统的JDBC的使用操作,可以体会到使用的繁琐与复杂,套句话说,是用了20%作了真正的工作,80%作了重复的工作。 那么通过本篇,可以了解如...

    用户1154259
  • Linux下oracle开机自启动服务

    如果每次重启操作系统都要进行以上操作好麻烦,那么如何让Oracle作为系统服务在开机的时候自动启动呢? Oracle在$ORACLE_HOME/bin下提供许多...

    用户1154259
  • 干货 | Kotlin超棒的语言特性

    携程技术
  • 用 Kotlin Native 写 Jni,以后写 Android 基本上要没有别的语言什么事儿了的节奏

    我在之前写过一篇文章,讲如何用 Kotlin Native 编写 Native 代码通过 JNI 让 Java 调用。当时因为完全没有注意到 CName 这个神...

    bennyhuo
  • Google 再见 Java

    去年 5 月份的 Google I/O 上,谷歌宣布 Kotlin-first,Kotlin 开始成为 Android 开发者的首选语言,接着谷歌针对 Kotl...

    帅地
  • 让 Kotlin 为数据科学做好准备

    今年在 2019 年 KotlinConf 上,Roman Belov 概述了 Kotlin 的数据科学方法。既然该演讲现在已公开,我们决定重述一下,并分享一些...

    bennyhuo
  • 为什么我要改用Kotlin

    写在前面的话,作为一个不熬夜的人,一觉醒来发现Kotlin成为了Android的官方语言,可谓是大喜过望。为了趁热打铁,我决定提前三天放出原定本周日Releas...

    技术小黑屋
  • 解毒 Kotlin Koans: 01 Introduction/HelloWorld

    Kotlin 火了吗?也许吧。反正以前不知道它的,现在陆陆续续知道了;以前不敢用它的,现在也开始慢慢接受了;以前就热衷于它的,比如我这样的(说着摸了摸自己的脸,...

    bennyhuo
  • Kotlin 官网大变样?这是要干啥?

    最有意思的是居然把 Android 放到了最后,hmmm,Kotlin 开发者里面搞 Android 的应该是最多的吧?这么不受待见?

    bennyhuo

扫码关注云+社区

领取腾讯云代金券