我们在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)
此致