http://bugs.winehq.org/show_bug.cgi?id=7929
--- Comment #88 from Damjan Jovanovic damjan.jov@gmail.com 2009-10-14 22:00:37 --- (In reply to comment #87)
(In reply to comment #86)
... I am eagerly awaiting progress on this new effort to bring network support. ...
For the curious, I'm researching the concern that Alexandre expressed (loss of packets in a multithreaded environment with simultaneous reads or selects on the same socket). In ws2_32 (normal operations) this is solved easily with a couple well-placed socket-specific spinlocks, within the Wine server (IOCP operation) it APPEARS that it is not necessary to do any locking since the IOCP polling and reading all seems to occur in the same thread (note that a socket can not be used "normally" once it has been flagged for IOCP). If anyone has any additional insight on this issue then I'd love to hear it, I'm a tad busy right now so tracking these things down in the server code is not on the top of my priority list.
While wineserver cannot AFAIK have a race condition with itself, maybe the wineserver and a Windows app can race each other on the same socket even if ws2_32 has its own internal spinlock?
APIs like DuplicateHandle() could also transfer the socket to another process, which then uses its own ws2_32 critical section, so it seems like there could be inter-process races too.