微软完成端口bug?(100分)

G

GGCAT

Unregistered / Unconfirmed
GUEST, unregistred user!
开了两个IOport,把进入服务器的连接分别关联到两个不同的完成端口去。
当存在大量并发连接并持续交互的情况下(大于5000个连接以上),如果瞬间关闭全部client ,那么完成端口将可能会收到错误的数据,情况有
1)关联到端口B的完成事件出现在了端口A的队列中。
2)单个IO请求失败(read dwNumber返回0)会连续收到多次。
3)IO失败会附加错误的pOverlapped数据(非发起请求的Overlapped数据)。
4)返回一个不存在的 CompletionKey
如果只开一个ioport,只是不会出现1的情况,2,3,4一样出
这些都可能导致服务器处理释放资源的错误。大家不妨一试。
 
I

iceapi

Unregistered / Unconfirmed
GUEST, unregistred user!
哦。My god,一个连接关联到两完成端口。这样做有意义吗?
;-/
 
R

rgbigeiq

Unregistered / Unconfirmed
GUEST, unregistred user!
G

GGCAT

Unregistered / Unconfirmed
GUEST, unregistred user!
iceapi 是多个连接关联到不同的完成端口,不是一个连接
 
I

iceapi

Unregistered / Unconfirmed
GUEST, unregistred user!
如果是这样的话,你应该检查一下, 代码是不是都是线程安全的. 这种错误会造成第2,3,4种问题.
 
G

GGCAT

Unregistered / Unconfirmed
GUEST, unregistred user!
iceapi,
是当几千个连接瞬间释放(比如小于1秒)的情况下,GetQueuedCompletionStatus API函数会返回几个错误的结果,即使是一个ioport,一个workthread。
 

Similar threads

S
回复
0
查看
725
SUNSTONE的Delphi笔记
S
S
回复
0
查看
609
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
顶部