socket alternatives and similar packages
Based on the "socket" category.
Alternatively, view socket alternatives based on common mentions on social networks and blogs.
Do you think we are missing an alternative of socket or a related project?
This library aims to expose a minimal and cross-platform interface for BSD style networking code.
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.
Absolutely no conditional exports.
#ifdefmadness in the Haskell sources. The Haskell binding code uses the FFI to reference platform dependant C functions for each operation. If a platform is not POSIX compliant (i.e. Windows) equivalent functionality is implemented by using whatever the platform specific building blocks are.
Platform is fully supported. Each commit and release is automatically tested with Travis CI and several versions of GHC.
Fully supported on Windows7 (maybe Vista) or higher :-)
GHC's runtime system on Windows does not offer an event notification mechanism for sockets. The original network library suffers from this, too. For example, connection attempts are non-interruptible etc. The approach taken to circumvent this in this library is to poll the non-blocking sockets with increasing delay. This guarantees interruptibility 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.
Each commit and release is automatically tested with AppVeyor continuous integration.
Working, but not regularly tested.
Please report when it is no longer working on MacOS.
The project uses tasty for testing.
There are two test suites:
threaded which share the same
code. The only difference is that one is compiled against GHC's single threaded
RTS and the other against the multi-threaded one. Run
cabal test or
to execute both in sequence.
*Note that all licence references and agreements mentioned in the socket README section above are relevant to that project's source code only.