name: socket version: 0.5.0.0 x-revision: 2 synopsis: A portable and extensible sockets library. description: /Motivation/ . This library aims to expose a minimal and platform-independant interface for POSIX compliant networking code. . /Implementation Philosophy/ . - Every operation and every flag exposed should be supported with same semantics on every platform. If this cannot be guaranteed it should be supplied by another (extension) package. Examples for things that have been ripped out of this library are: Unix sockets, SCTP, vectored IO (for now). . - Absolutely no conditional exports. . - No `#ifdef` madness in the Haskell sources. The Haskell binding code uses the FFI to reference the platform's native networking functions. If they are not Posix compliant (i.e. on Windows) an level of indirection is introduced to create an Posix compliant equivalent in C using whatever the plaform specific building blocks are. . /Platform Support/ . /Linux/: Working. . /BSD/: Unknown. Should work. Please report if not. . /OS X/: Unknown. Please report if you have a Mac. . /Windows/: Fully supported on Windows7 (maybe Vista) or higher :-) . GHCs runtime system on Windows does not offer an event notification mechanism for sockets. The original [network](https://hackage.haskell.org/package/network) library suffers from this, too. For example, connection attempts are uninterruptible etc. The approach taken to circumvent this in this library is to poll the non-blocking sockets with increasing delay. This guarantees interruptability and fairness between different threads. It allows for decent throughput while also keeping CPU consumption on a moderate level if a socket has not seen events for a longer period of time (maximum of 1 second delay after 20 polling iterations). The only drawback is potentially reduced response time of your application. The good part: Heavy load (e.g. connection requests or incoming traffic) will reduce this problem. Eventually your accepting thread won't wait at all if there are several connection requests queued. . This workaround may be removed if someone is willing to sacrifice to improve the IO manager on Windows. license: MIT license-file: LICENSE author: Lars Petersen maintainer: info@lars-petersen.net category: System, Network build-type: Simple cabal-version: >=1.10 homepage: https://github.com/lpeterse/haskell-socket bug-reports: https://github.com/lpeterse/haskell-socket/issues tested-with: GHC==7.10.1, GHC==7.8.3 extra-source-files: README.md CHANGELOG.md CONTRIBUTORS.txt platform/linux/src/System/Socket/Internal/Platform.hsc platform/linux/include/hs_socket.h platform/linux/cbits/hs_socket.c platform/win32/src/System/Socket/Internal/Platform.hsc platform/win32/include/hs_socket.h platform/win32/cbits/hs_socket.c library exposed-modules: System.Socket , System.Socket.Family , System.Socket.Family.Inet , System.Socket.Family.Inet6 , System.Socket.Type , System.Socket.Type.Raw , System.Socket.Type.Datagram , System.Socket.Type.Stream , System.Socket.Type.SequentialPacket , System.Socket.Protocol , System.Socket.Protocol.UDP , System.Socket.Protocol.TCP , System.Socket.Unsafe other-modules: System.Socket.Internal.Socket , System.Socket.Internal.Exception , System.Socket.Internal.Message , System.Socket.Internal.AddressInfo , System.Socket.Internal.Platform build-depends: base >= 4.7 && < 4.9 , bytestring < 0.11 hs-source-dirs: src build-tools: hsc2hs default-language: Haskell2010 install-includes: hs_socket.h ghc-options: -Wall if os(windows) include-dirs: platform/win32/include hs-source-dirs: platform/win32/src c-sources: platform/win32/cbits/hs_socket.c extra-libraries: ws2_32 else include-dirs: platform/linux/include hs-source-dirs: platform/linux/src c-sources: platform/linux/cbits/hs_socket.c test-suite UDP hs-source-dirs: tests main-is: UDP.hs type: exitcode-stdio-1.0 default-language: Haskell2010 build-depends: base >= 4.7 && < 5 , bytestring < 0.11 , socket , async test-suite TCP hs-source-dirs: tests main-is: TCP.hs type: exitcode-stdio-1.0 default-language: Haskell2010 build-depends: base >= 4.7 && < 5 , bytestring < 0.11 , socket , async test-suite TCP-sendAndRecvAll hs-source-dirs: tests main-is: TCP-sendAndRecvAll.hs type: exitcode-stdio-1.0 default-language: Haskell2010 build-depends: base >= 4.7 && < 4.9 , bytestring < 0.11 , socket , async test-suite PingPong hs-source-dirs: tests main-is: PingPong.hs type: exitcode-stdio-1.0 default-language: Haskell2010 build-depends: base >= 4.7 && < 5 , bytestring < 0.11 , socket , async test-suite AddrInfo hs-source-dirs: tests main-is: AddrInfo.hs type: exitcode-stdio-1.0 default-language: Haskell2010 build-depends: base >= 4.7 && < 5 , bytestring < 0.11 , socket test-suite NonBlockingIO hs-source-dirs: tests main-is: NonBlockingIO.hs type: exitcode-stdio-1.0 default-language: Haskell2010 build-depends: base >= 4.7 && < 5 , bytestring < 0.11 , socket , async test-suite NonBlockingIO-threaded hs-source-dirs: tests main-is: NonBlockingIO.hs type: exitcode-stdio-1.0 default-language: Haskell2010 ghc-options: -threaded build-depends: base >= 4.7 && < 5 , bytestring < 0.11 , socket , async test-suite IPV6_V6ONLY hs-source-dirs: tests main-is: IPV6_V6ONLY.hs type: exitcode-stdio-1.0 default-language: Haskell2010 build-depends: base >= 4.7 && < 5 , bytestring < 0.11 , socket , async source-repository head type: git location: git://github.com/lpeterse/haskell-socket.git