
Felix Martini wrote:
Hi all,
winio is an I/O library for Windows using Windows API functions and has I/O completion port support. The main goal of this library is to support Simon Marlow's new Handle API once he has added that to GHC. The library also has a compatibility module for socket functions from the network-bytestring package. Because the library uses IOCP instead of select it is not limited to 1024 open sockets. Try for example the thread-ring program where each Haskell thread passes a UDP message around (Change the MaxUserPort field in HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters to 65534 to enable all ports).
The winio package is available on Hackage. Notice that it uses a development version of the network package which is available at http://darcs.haskell.org/packages/network/. The library has not been tested much and should be considered experimental so please try it if you use Windows and notify me of any issue or corner case.
As I understand it, programs compiled with GHC currently use MSYS for all I/O operations, resulting in all kinds of strange behaviour in corner cases. (E.g., if you use System.Directory and ask whether "C:\\" is a directory, it says no, yet you can read the contents of that directory.) I would have thought that calling the Win32 API directly would probably fix most of these minor glitches. Is that what this package is intending to do?