2

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

问候,

4

0 回答 0