Patch for ReadFile with NULL hEvent

Scott W Gifford gifford at umich.edu
Mon May 17 15:12:19 CDT 2004


Eric Pouech <pouech-eric at wanadoo.fr> writes:

[...]

> > This turns out not to be the case.  As long as lpOverlapped is
> > supplied, a NULL hEvent will work fine and allows overlapped reads.
> Could you also test it with opening a file (files and sockets
> semantics are somehow different)

I did, and it just returned the entire block in the ReadFile.  I don't
know how to open a file in a way that the ReadFile will not return
immediately.  The source code for this is a straightforward change to
my earlier version; let me know if you'd like a copy.

[...]

> > The attached test program uses overlapped reads with a NULL hEvent in
> > the OVERLAPPED structure to connect to an IP address and port given on
> > the command line.  Here's an example from Windows:
> >     C:>overlapped-test 216.12.213.139 25
> >     Calling ReadFile
> >     ReadFile returned ERROR_IO_PENDING, as expected
> >     ov      .hEvent=00000000
> >     Calling Sleep(2000)
> >     Calling GetOverlappedResult
> >     GetOverlappedresult read 85 bytes:
> >     220 2search2.com ESMTP Sendmail 8.10.2-SOL3/8.10.2; Mon, 17 May 2004  11:58:26 -0400
> just for fun, what gives without the Sleep ?

Same results.

Eric Pouech <pouech-eric at wanadoo.fr> writes:

> Eric Pouech a écrit :
> >> ...Windows doesn't do it this way, although according to the docs
> >> other members of the overlapped structure are modified by Windows.
> > Ok, we need to rewrite GetOverlappedResult to use the internal
> > structures (and get the hEvent we might have created in ReadFile),
> > instead of relying on the one from the overlapped struct itself
> 
> Does the attached patch help ?

Yes, it solves the problem completely for me.  I have to admit I don't
understand why it works, but thanks!!  :)

---ScottG.




More information about the wine-devel mailing list