Hi,
I will now start to submit a new series of patches for Winsock2-related issues. Most of it is for overlapped IO, but there are some other issues, too.
I have done a fair bit of testing with 16 and 32 bit network-oriented Windows apps, and found no regressions (well some apps wouldn't install or run with either the CVS version or my patched version of wine).
Among the tested apps are - Opera (v5.12, 32bit, and 3.62, 16bit) - FreeAgent (news reader, 16bit) - Solstice Internet Mail (16bit) - Hamster local news server (32bit, interesting because it's using ReadFile()/WriteFile() for overlapped socket IO) - My evil overlapped testing server/client app
I spotted a number of bugs with the "big" patch I sent to wine-devel last Friday. These are fixed in the version I'll submit now.
The patch is now split into parts again (one bug fix for an earlier patch of mine that is already in CVS, and 7 "real" parts).
Most of the testing has of course been done with the full patch set applied. I have tried to separate logically independent units, but I cannot swear that all is fine if only part of them is applied, and the later patches do fix some important problems. The main reason for splitting the stuff up is to make it easier for people to review.
I honestly think that these patches are now ready for being applied to CVS and tested in the field.
Here is the overall patch summary (for detailed explanantions see the patches thenmselves):
- Correct handling of deferred WSAAccept() operations, - Change register_async() and the queue_async() method to allow more flexibility, needed for sockets, - Server support for overlapped IO on sockets, - Fix problem with FD_CLOSE never being delivered in some situations, - Wait for POLLIN if FD_CLOSE event notification is requested to catch grateful close or shutdown by the peer (empty recv(), no POLLHUP), - Implement overlapped WSARecvFrom()/WSASendTo() and WSAGetOverlappedResult(), - Change shutdown() to account for pending overlapped requests, - Change ReadFile() semantics for overlapped reads on sockets (return even if buffer is not yet full), - Improve error reporting for asynchronous requests (files and sockets) - Account for the SO_OPENTYPE socket option on a per-thread basis.
I plan to look into the regression-testing code and also supply a few tests for the new socket functionality.
Cheers (and please test this stuff with your apps!), Martin