sockets: High-level network sockets
This library provides a high-level abstraction for network sockets. It uses
Haskell2010 (along with GADTs) without typeclasses to ensure that
consumers of the API can only call appropriate functions on a socket.
.
Exceptions are tracked in the types of functions and returned to the caller
with Either
. The caller is free to handle these gracefully or to throw
them. This library has another class of exceptions described as _unrecoverable_.
This library only throws exceptions in three situations:
.
* The library detects that it has misused the operating system's
sockets API. This includes getting a sockaddr
with an unexpected
socket family. It also includes getting an error code that should not
be possible. For example, the abstractions provided for both datagram
sockets and stream sockets mean that send
system calls in either
context should never return the error code ENOTCONN
. Consequently,
this error is treated as unrecoverable.
.
* The caller asks for a negatively-sized slice of a buffer
(such exceptions indicate a mistake in the code consuming this API).
.
* A system call fails with ENOBUFS
or ENOMEM
. These indicate that
the operating system is out of memory. If this happens, the
Out Of Memory (OOM) manager is likely killing processes to
reclaim memory, so the process that received this message may
be killed soon. Making things even worse is that the GHC runtime
requests pages of memory from the operating system at times that
are effectively unpredictable to Haskell developers. (Most
memory-managed languages have this behavior). Any attempt
to recover from ENOBUFS
or ENOMEM
might cause the runtime to
allocate memory from the operating system. According to the
documentation for the HeapOverflow
exception, an allocation failure at this point in time (likely given
the recent ENOBUFS
/ENOMEM
) would result in immidiate
termination of the program. So, although it is technically possible
to recover from ENOBUFS
/ENOMEM
, the OOM killer and the
GHC runtime make it impossible to do so reliably. Consequently,
these error codes are treated as fatal.
library sockets
Modules
- Socket
- Socket.Address
- Datagram
- IPv4
- Socket.Datagram.IPv4.Connected
- Socket.Datagram.IPv4.Unconnected
- Interruptible
- Socket.Datagram.Interruptible.Addr
- Socket.Datagram.Interruptible.ByteString
- Socket.Datagram.Interruptible.Bytes
- Socket.Datagram.Interruptible.MutableBytes
- Socket.Datagram.Slab
- Uninterruptible
- Socket.Datagram.Uninterruptible.Addr
- Socket.Datagram.Uninterruptible.ByteString
- Socket.Datagram.Uninterruptible.Bytes
- Socket.Datagram.Uninterruptible.MutableBytes
- Unix
- Socket.Datagram.Unix.Connected
- Socket.Datagram.Unix.Unconnected
- IPv4
- SequencedPacket
- Uninterruptible
- Socket.SequencedPacket.Uninterruptible.Bytes
- Socket.SequencedPacket.Unix
- Uninterruptible
- Stream
- Socket.Stream.IPv4
- Interruptible
- Socket.Stream.Interruptible.Addr
- Socket.Stream.Interruptible.ByteString
- Socket.Stream.Interruptible.Bytes
- Socket.Stream.Interruptible.Hybrid
- Socket.Stream.Interruptible.MutableBytes
- Uninterruptible
- Socket.Stream.Uninterruptible.Addr
- Socket.Stream.Uninterruptible.ByteString
- Socket.Stream.Uninterruptible.Bytes
- Socket.Stream.Uninterruptible.Hybrid
- Socket.Stream.Uninterruptible.MutableBytes
- Socket.Stream.Unix
library sockets:sockets-stream-bidirectional
Modules
- SequencedPacket
- Receive
- SequencedPacket.Receive.Indefinite
- Receive
- Stream
- Receive
- Stream.Receive.Indefinite
- Send
- Stream.Send.Indefinite
- Receive
library sockets:sockets-stream-send-two
Signatures
- Stream
- Send
- Stream.Send.B
- Buffer
- Stream.Send.Buffer.A
- Stream.Send.Buffer.B
- Stream.Send.Two
- Send
Modules
- Stream
- Send
- Two
- Stream.Send.Two.Indefinite
- Two
- Send
library sockets:sockets-stream-receive
Signatures
- Stream
- Stream.Receive
Modules
- SequencedPacket
- Receive
- SequencedPacket.Receive.Indefinite
- Receive
- Stream
- Receive
- Stream.Receive.Indefinite
- Receive
library sockets:sockets-stream-send
Signatures
- Stream
- Stream.Send
Modules
- SequencedPacket
- Send
- SequencedPacket.Send.Indefinite
- Send
- Stream
- Send
- Stream.Send.Indefinite
- Send
library sockets:sockets-datagram-receive-many
library sockets:sockets-datagram-receive
Signatures
- Datagram
- Datagram.Receive
Modules
- Datagram
- Receive
- Datagram.Receive.Indefinite
- Receive
library sockets:sockets-datagram-send
library sockets:sockets-buffer
Signatures
- Socket
- Socket.Buffer
library sockets:sockets-interrupt
Signatures
- Socket
- Socket.Interrupt
library sockets:sockets-internal
Modules
- Hybrid
- Send
- MutableBytes
- Hybrid.Send.MutableBytes.AddrLength
- MutableBytes
- Send
- Socket
- Socket.AddrLength
- Socket.Bytes
- Connected
- Socket.Connected.Bytes
- Socket.Connected.MutableBytes
- Socket.Connected.UnmanagedBytes
- Socket.Datagram
- Socket.Debug
- Destined
- IPv4
- Socket.Destined.IPv4.Bytes
- Socket.Destined.IPv4.MutableBytes
- Socket.Destined.IPv4.UnmanagedBytes
- IPv4
- Socket.Discard
- Socket.Error
- Socket.EventManager
- Socket.IPv4
- Socket.Interop
- Socket.Interruptible
- Socket.MutableBytes
- Socket.MutableBytes.Peerless
- Socket.MutableBytes.SocketAddressInternet
- Socket.SequencedPacket
- Socket.Slab
- Socket.Stream
- Socket.Uninterruptible
- UnmanagedBytes
- Socket.UnmanagedBytes.Peerless
- Socket.UnmanagedBytes.SocketAddressInternet
Flags
Manual Flags
Name | Description | Default |
---|---|---|
mmsg | Use sendmmsg and recvmmsg | Disabled |
verbose-errors | More informative messages from internal errors | Disabled |
debug | Print debug output | Disabled |
checked | Add bounds-checking to primitive array operations and to certain operations that expect pinned byte arrays. | Disabled |
example | Build example executables | Disabled |
Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info
Downloads
- sockets-0.7.0.0.tar.gz [browse] (Cabal source package)
- Package description (as included in the package)
Maintainer's Corner
For package maintainers and hackage trustees
Candidates
Versions [RSS] | 0.1.0.0, 0.3.0.0, 0.3.1.0, 0.4.0.0, 0.5.0.0, 0.6.1.0, 0.6.1.1, 0.7.0.0 |
---|---|
Change log | CHANGELOG.md |
Dependencies | base (>=4.11.1.0 && <5), byteslice (>=0.1.1 && <0.3), bytestring (>=0.10 && <0.12), error-codes (>=0.1.0.1 && <0.2), ip (>=1.4.1), posix-api (>=0.7 && <0.8), primitive (>=0.7 && <0.10), primitive-addr (>=0.1 && <0.2), primitive-offset (>=0.2 && <0.3), primitive-unlifted (==0.1.3.1 || >=2.1), sockets, stm (>=2.4), systemd-api (>=0.1), text (>=1.2) [details] |
License | BSD-3-Clause |
Copyright | 2019 Andrew Martin |
Author | Andrew Martin |
Maintainer | andrew.thaddeus@gmail.com |
Category | Network |
Home page | https://github.com/andrewthad/sockets |
Bug tracker | https://github.com/andrewthad/sockets/issues |
Uploaded | by andrewthad at 2023-11-27T19:07:03Z |
Distributions | NixOS:0.7.0.0 |
Executables | sockets-example |
Downloads | 2410 total (25 in the last 30 days) |
Rating | (no votes yet) [estimated by Bayesian average] |
Your Rating | |
Status | Docs not available [build log] All reported builds failed as of 2023-11-27 [all 2 reports] |