Async WinInet因ERROR_IO_PENDING而失败

时间:2013-07-11 12:22:20

标签: python windows-7 wininet

我们在Windows 7中发现了一个WinInet问题。我们在异步中看到了这个问题。模式,当 InternetReadFile()返回 ERROR_IO_PENDING 时,有时它不会触发 INTERNET_STATUS_RESPONSE_RECEIVED 事件。我确信我们正确地接收了完整的响应,因为我使用Wireshark来捕获流量。但是使用WinInet的应用程序不是。我们怀疑这个问题与我们使用WinInet API的方式有关,但事实证明我们甚至可以用async重现问题。 MSDN上的WinInet示例。 (http://msdn.microsoft.com/en-us/library/windows/desktop/cc185684(v=vs.85).aspx

我更改示例以连接到我的测试服务器。测试服务器只发送20000字节的数据,就是这样。我们只在Win 7(WinInet DLL版本WIN7_IE9_RTM.110308-0330)上看到此行为。这是Python中的实际测试服务器应用程序,只是为了表明服务器没有什么特别之处:

import time
from socket import *

ADDR = ("", 80)
BUFSIZE = 1024

serversock = socket(AF_INET, SOCK_STREAM)
serversock.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
serversock.bind(ADDR)
serversock.listen(5)
t0 = time.time()
while 1: 
    print 'waiting for connection. previous transaction takes %0.3f secs' % (time.time()-t0)
    t0 = time.time()
    clientsock, addr = serversock.accept()
    print '...connected from:', addr
    data = clientsock.recv(BUFSIZE)
    print 'recv data:' + repr(data)    

    send_data = "A" * 20482
    send_data += "supo\r\n\r\n"
    clientsock.send(send_data)

此致

0 个答案:

没有答案