ok, 我投降。 关于GetAcceptExSockAddrs(300分)

  • 主题发起人 主题发起人 Another_eYes
  • 开始时间 开始时间
我只用一个integer记录已经投递的AcceptEx,嘿嘿,在Work Thread中判断,如果getqueuedcompletionstatus返回错误或读到字节为0(不包括AcceptEx返回的)则关闭相应socket并把这个数加一然后重新投递一个,如果没错并且是AcceptEx返回的则减一并进行后继操作。至于补充投递我则在这个数减到0时调用一个OnUserFull事件,由用户决定是否需要增加。
To 张无忌:给你的代码中还有点小bug(已更正), 所以你千万别直接用啊。 谁叫我写惯rude code呢,莫怪莫怪......
 
我自己也有一些用完成端口写的服务器类,经过较长时间的测试,不过写的不太好,看了老大的代码,我真好可以借鉴。句柄哈希表也很有用。
 
我是用unsigned long纪录,不过投递新请求是在一个单独的线程里,因为一次可能要投递为数不少的请求,要从Pool中拿出(or 生成)相应多个SOCKET,这很耗时,所以我没把它放到工作线程里
另外出错的SOCKET应该关闭,但传输0字节的SOCKET我是将拥有它的Client对象其放到我的Client Pool里的,这样还可以被AcceptEx利用,生成一个SOCKET也是比较耗时的[:)]
 
后退
顶部