winsock2完成端口模型下如何解决接收超时问题(200分)

  • 主题发起人 主题发起人 tangrh
  • 开始时间 开始时间
T

tangrh

Unregistered / Unconfirmed
GUEST, unregistred user!
原来在阻塞模型下,通过setsockopt设置sol_socket的so_rcvtimeo可以设置超时,当服务端发起recv调用时,如果过了此时间还未收到数据,那么返回10060超时错误,现在改用完成端口后,使用wsarecv接收数据,发现原来可用的设置现在不管用了,该如何解决它呢
 
GetQueuedCompletionStatus(
CompletionPort,
BytesTransferred,
socket,
Overlapped,
INFINITE //这个参数应该就是你想要的,infinite表示永远不会超时
) ;
 
to ego:
呵呵,这个我试过了,这个参数仅仅用于GetQueuedCompletionStatus到时候返回,并不会导致原来的重叠操作失败,比如我调用了一下wsarecv,GetQueuedCompletionStatus设超时为1分钟,那么1分钟到时,如果仍未收到数据,那么GetQueuedCompletionStatus也会返回,但此时重叠结构内容为空,而且原来的wsarecv还在进行
 
呵呵,不好意思,又犯了同样的错误,你来这里看看吧,正在讨论
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2422504
 
后退
顶部