[win32all] GetQueuedCompletionStatus Problem

Y

yamadora1999

'''#########################################################################
GetQueuedCompletionStatus is return new OVERLAPPED instaed requested
OVERLAPPED. And OVERLAPPED.object member is lost.
and WSARecv Function increase Memory
Any clues anyone?

show test code
#########################################################################'''

import win32file, win32event
import pywintypes
import socket

iocp = win32file.CreateIoCompletionPort(win32file.INVALID_HANDLE_VALUE,
None, 0, 0)

listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
listen_socket.setblocking(0)
listen_socket.bind(('localhost', 9999))
listen_socket.listen(5)

accept_ol = pywintypes.OVERLAPPED()
accept_ol.object = "ACCEPT"
print 'accept_ol', accept_ol, accept_ol.object

accept_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
accept_socket.setblocking(0)
accept_buf = win32file.AllocateReadBuffer(64)
win32file.AcceptEx( listen_socket, accept_socket, accept_buf,
accept_ol)

win32file.CreateIoCompletionPort(listen_socket.fileno(), iocp, 0, 0)
rc = 0
print 'listen loop'
while rc != 1:
(rc, nbytes, key, ol) = win32file.GetQueuedCompletionStatus(iocp,
win32event.INFINITE)
print 'GQCS --> ', rc, nbytes, key, ol, 'object:', getattr(ol,
'object', None)

recv_ol = pywintypes.OVERLAPPED()
recv_ol.object = "RECV"
print 'recv_ol', recv_ol, recv_ol.object

recv_buf = win32file.AllocateReadBuffer(1024)

win32file.CreateIoCompletionPort(accept_socket.fileno(), iocp, 0, 0)
#win32file.WSARecv( accept_socket, recv_buf, recv_ol)
win32file.ReadFile( accept_socket.fileno(), recv_buf, recv_ol)

while 1:
(rc, nbytes, key, ol) = win32file.GetQueuedCompletionStatus(iocp,
win32event.INFINITE)
print 'GQCS --> ', rc, nbytes, key, ol, 'object:', getattr(ol,
'object', None)

# print recv_buf[:nbytes]
if (rc == 1):
# win32file.WSARecv( accept_socket, recv_buf, recv_ol)
win32file.ReadFile( accept_socket.fileno(), recv_buf, recv_ol)

'''#########################################################################
result

accept_ol <PyOVERLAPPED object at 0x00886F60> ACCEPT
listen loop
GQCS --> 1 0 0 <PyOVERLAPPED object at 0x009022B8> object: None
recv_ol <PyOVERLAPPED object at 0x009A1520> RECV
GQCS --> 1 1024 0 <PyOVERLAPPED object at 0x009A1550> object: None
GQCS --> 1 1024 0 <PyOVERLAPPED object at 0x009022B8> object: None
GQCS --> 1 1024 0 <PyOVERLAPPED object at 0x009A1550> object: None
GQCS --> 1 1024 0 <PyOVERLAPPED object at 0x009022B8> object: None
GQCS --> 1 1024 0 <PyOVERLAPPED object at 0x009A1550> object: None
GQCS --> 1 1024 0 <PyOVERLAPPED object at 0x009022B8> object: None
GQCS --> 1 1024 0 <PyOVERLAPPED object at 0x009A1550> object: None
GQCS --> 1 1024 0 <PyOVERLAPPED object at 0x009022B8> object: None
GQCS --> 1 1024 0 <PyOVERLAPPED object at 0x009A1550> object: None
GQCS --> 1 1024 0 <PyOVERLAPPED object at 0x009022B8> object: None
GQCS --> 64 0 0 <PyOVERLAPPED object at 0x009022B8> object: None

#########################################################################'''
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,484
Members
44,906
Latest member
SkinfixSkintag

Latest Threads

Top