http://bugs.winehq.org/show_bug.cgi?id=17195 Summary: NamedPipe datagrams need to be _really_ datagrams Product: Wine Version: unspecified Platform: Other OS/Version: other Status: UNCONFIRMED Severity: normal Priority: P2 Component: ntdll AssignedTo: wine-bugs(a)winehq.org ReportedBy: lkcl(a)lkcl.net ok, after a little bit of investigation, i think i understand the pipes code enough to be able to say what's going on, and i'm seeing something like this: process 1: recvpipe = CreateNamedPipe("\\pipe\fred") ReadFile(recvpipe, buffer, &length); printf(length) ===> 43 ReadPipe(recvpipe, buffer, &length); /* no data */ process 2: sendpipe = CreateNamedPipe("\\pipe\fred") length = 9; WriteFile(sendpipe, buffer, &length); length = 34; WriteFile(sendpipe, buffer, &length); what's happening is that the data being sent down the pipes isn't being done as datagrams. the implementation is using a stream-based fd. the solution is: you _must_ implement a protocol on top of the pipes which sends the length (as a 32-bit int, whatever) which is read off the fd, followed by the data stream of _exactly_ that length. _must_. there's no two ways about this. the protocol of Pipes is unfortunately a combination of both datagrams and streams. datagrams because the lengths of data sent are absolute and inviolate. streams because the data order and reliability are _also_ absolute and inviolate. you can't use datagrams (because they're unreliable). you can't expect all unixen to support datagrams on top of unix sockets (if that's what's being used). so - you have to send the length, as part of the implementation of the pipe-data-send. sending a length will also solve the issue of trying to send zero-length pipe datagrams. as a first implementation, you _might_ be able to get away with assuming that when someone asks for some data, they _will_ provide a buffer big enough. ... actually... i don't see any ERR_MORE_DATA error codes in NtReadFile, so that would explain... this is going to get messy :) -- Configure bugmail: http://bugs.winehq.org/userprefs.cgi?tab=email Do not reply to this email, post in Bugzilla using the above URL to reply. ------- You are receiving this mail because: ------- You are watching all bug changes.