您的位置:首页 > 其它

eMule中的 CAsyncSocketEx 类

2007-12-05 17:17 453 查看
说说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 安全连接支持。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: