eMule中的 CAsyncSocketEx 类

 说说eMule中的大多数通信类的基类CAsyncSocketEx

1、先看看静态链表m_spAsyncSocketExThreadDataList

其数据成员定义如下:

 struct t_AsyncSocketExThreadData
 {
  CAsyncSocketExHelperWindow *m_pHelperWindow; //线程中的socket事件接收窗口
  int nInstanceCount; //线程中CAsyncSocketEx  实例的个数
  DWORD nThreadId; //线程id
 }

在每个线程中,只有一个m_pHelperWindow,所有的CAsyncSocketEx  实例的socket事件都会发送到这个窗口。

m_pHelperWindow可以依据收到的通知消息message,获取相应的CAsyncSocketEx 实例 指针。

1、CAsyncSocketEx  在socket 事件通知消息派发上,速度要快于CAsyncSocket。

m_pHelperWindow里面有一个数组指针m_pAsyncSocketExWindowData,其成员对应线程中的每一个socket信息。

CAsyncSocketEx  的实例调用WSAAsyncSelect(SOCKET hSocket, HWND hWnd, int wMsg, long lEvent)  函数将hSocket上发生的事件通知发送消息wMsg给hWnd,其中wMsg-WM_SOCKETEX_NOTIFY 即为m_pAsyncSocketExWindowData中的数组下标,因此,在m_pHelperWindow接收到消息通知时,可以直接通过

m_pAsyncSocketExWindowData[wMsg-WM_SOCKETEX_NOTIFY]得到对应CAsyncSocketEx  指针,而在CAsyncSocket中,是通过socket线程状态中的m_plistSocketNotifications遍历获取socket指针的,因此,在线程的socket数量很多的情况下,CAsyncSocketEx  在事件通知消息派发上,速度要明显快于CAsyncSocket。

2、CAsyncSocketEx  提供一个灵活的分层系统,可以方便地在它的实例中添加代理支持,支持socks 4、socks 4a、socks 5 和http 1.0 、http1.1代理,以后还会增加SSL 安全连接支持。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值