
#12010: Incorrect return types for recv() and send() on Windows --------------------------------------+---------------------------------- Reporter: enolan | Owner: enolan Type: bug | Status: new Priority: normal | Milestone: Component: Core Libraries | Version: Keywords: | Operating System: Windows Architecture: x86_64 (amd64) | Type of failure: Runtime crash Test Case: | Blocked By: Blocking: | Related Tickets: Differential Rev(s): | Wiki Page: --------------------------------------+---------------------------------- They return signed 32 bit ints on Windows, even on a 64 bit OS, rather than Linux's 64 bit ssize_t. This means when recv() returned -1 to signal an error we thought it was 4294967295. It was converted to an int, -1 and the buffer was memcpy'd which caused a segfault. Other bad stuff happened with send()s. The problem is in `blockingReadRawBufferPtr` and `blockingWriteRawBufferPtr` in `GHC.IO.FD` which are only called in the threaded RTS. See also note CSsize in System.Posix.Internals. I have a patch and a test incoming. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/12010 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler