Hi 

In M.Hammonds "python programming on win32" chapter 18 there is a pipe
service and a client [1] which use CallNamedPipe. I changed the service to
accept messages bigger than its buffer [2]. Does anybody know how to rewrite
the client with CreateFile method so it can accept bigger that buffer
messages too? 
My attempt [3] which mimics
http://msdn.microsoft.com/en-us/library/aa365592(VS.85).aspx fails with
following message:
pywintypes.error: (121, 'WaitNamedPipe', 'The semaphore timeout period has
expired.')

Best regards,
Mani 



[1] --------------------------------------------------------------
# PipeServiceClient.py
#
# A client for testing the PipeService.
#
# Usage:
#
#   PipeServiceClient.py message

import win32pipe
import sys
import string

if __name__=='__main__':
    message = string.join(sys.argv[1:])
    pipeName = "\\\\.\\pipe\\PyPipeService"
    data = win32pipe.CallNamedPipe(pipeName, message, 512, 0)
    print "The service sent back:"
    print data


[2]--------------------------------------------------------------
hr, data = win32file.ReadFile(pipeHandle, 256)
        if (win32api.GetLastError() == winerror.ERROR_MORE_DATA):
                t,t,remains = win32pipe.PeekNamedPipe(pipeHandle,0)
                hr,d2 = win32file.ReadFile(pipeHandle, remains)
                data = data + d2


[3]--------------------------------------------------------------
import win32pipe
import winerror
import pywintypes
import win32file
import win32security
import cPickle as pickle
from cPickle import HIGHEST_PROTOCOL

if __name__=='__main__':
        message = pickle.dumps(range(1000),HIGHEST_PROTOCOL)    
        pipeName = "\\\\.\\pipe\\pyPipe"        
        
        saAttr = win32security.SECURITY_ATTRIBUTES()
        saAttr.SetSecurityDescriptorDacl ( 1, None, 0 )
        
        pipeHandle = win32file.CreateFile(pipeName,
                win32file.GENERIC_READ | win32file.GENERIC_WRITE,
                0,
                None,
                win32file.OPEN_EXISTING,
        
win32file.FILE_FLAG_OVERLAPPED|win32file.FILE_ATTRIBUTE_NORMAL,
                None)
        
        win32pipe.WaitNamedPipe(pipeName,2000)          
        
        win32pipe.SetNamedPipeHandleState(pipeHandle,
win32pipe.PIPE_READMODE_MESSAGE,
                                None,
                                None)
        
        win32file.WriteFile(pipeHandle, message)
        hr, data = win32file.ReadFile(pipeHandle, 256)
        
        #TODO: read the remains of the message
        
        print 'len(data):',len(data)
        print "The service sent back:"
        print pickle.loads(data)
        
        

_______________________________________________
python-win32 mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-win32

Reply via email to