!vR      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~   (c) Lars Petersen 2015MITinfo@lars-petersen.net experimentalNone1K)%socket4Contains the error code that can be matched against.Hint: Use guards or  MultiWayIf& to match against specific exceptions: Zif | e == eAddressInUse -> ... | e == eAddressNotAvailable -> ... | otherwise -> ...socket No error.socketInterrupted system call.oNOTE: This exception shall not be thrown by any public operation in this library, but is handled internally.socketBad file descriptor.socketPermission denied.socketInvalid argument.socket Broken pipe.socket!Resource temporarily unavailable.oNOTE: This exception shall not be thrown by any public operation in this library, but is handled internally. socket!Resource temporarily unavailable. socketSocket operation on non-socket.2NOTE: This should be ruled out by the type system. socketDestination address required. socketMessage too long. socketProtocol wrong type for socket.socketProtocol not available.socketProtocol not supported.socketSocket type not supported.socketOperation not supported.socketProtocol family not supported.socket)Address family not supported by protocol.socketAddress already in use.socket Cannot assign requested address.socketNetwork is down.socketNetwork is unreachable.socket$Network dropped connection on reset.socket!Software caused connection abort.socketConnection reset by peer.socketNo buffer space available.socket(Transport endpoint is already connected.socket$Transport endpoint is not connected.socket.Cannot send after transport endpoint shutdown.socket#Too many references: cannot splice. socketConnection timed out.!socketConnection refused."socket Host is down.#socketNo route to host.$socketOperation already in progress.oNOTE: This exception shall not be thrown by any public operation in this library, but is handled internally.%socketOperation now in progress&  !"#$% (c) Lars Petersen 2015MITinfo@lars-petersen.net experimentalNoneKFm&socketUse the # instance to combine several flags: !mconcat [msgNoSignal, msgWaitAll]Use the ) instance to check whether a flag is set: .if flags .&. msgEndOfRecord /= mempty then ...(socket  MSG_NOSIGNALSuppresses the generation of PIPEA signals when writing to a socket that is no longer connected.FAlthough this flag is POSIX, it is not available on all platforms. Try msgNoSignal /= memptyin order to check whether this flag is defined on a certain platform. It is safe to just use this constant even if it might not have effect on a certain target platform. The platform independence of this flag is therefore fulfilled to some extent.9Some more explanation on the platform specific behaviour:Linux defines and supports  MSG_NOSIGNALL and properly suppresses the generation of broken pipe-related signals.AWindows does not define it, but does not generate signals either.&OSX does not define it, but generates PIPEs signals. The GHC runtime ignores them if you don't hook them explicitly. The non-portable socket option  SO_NOSIGPIPE8 may be used disable signals on a per-socket basis.BIt is safe and advised to always use this flag unless one wants to explictly hook and handle the PIPE* signal which is not very useful in todays Bmulti-threaded environments anyway. Although GHC's RTS ignores the 8signal by default it causes an unnecessary interruption.)socket MSG_EORUsed by  F to mark record boundaries. Consult the POSIX standard for details.*socket MSG_OOBYUsed to send and receive out-of-band data. Consult the relevant standards for details.+socket  MSG_WAITALLA Q call shall not return unless the requested number of bytes becomes available.&'()*+(c) Lars Petersen 2015MITinfo@lars-petersen.net experimentalSafe<FTx,socketThe ,* determines the transport protocol to use.Use Y to let the operating system choose a transport protocol compatible with the socket's ..-socketThis number designates this ,` on the specific platform. This method is only exported for implementing extension libraries.6The function shall yield the values of constants like  IPPROTO_TCP,  IPPROTO_UDP etc..socketThe .^ determines properties of the transport layer and the semantics of basic socket operations.+The instances supplied by this library are  (no transport layer), ' (for unframed binary streams, e.g. ), + (for datagrams of limited length, e.g.  ) and 3 (for framed messages of arbitrary length, e.g. )./socketThis number designates this .` on the specific platform. This method is only exported for implementing extension libraries.6The function shall yield the values of constants like  SOCK_STREAM,  SOCK_DGRAM etc.0socket The address 0( determines the network protocol to use.%The most common address families are  (IPv4) and  (IPv6).1socketThe 1 type is a  Ohttps://wiki.haskell.org/GHC/Type_families#Detailed_definition_of_data_families data family. This allows to provide different data constructors depending on the socket family without knowing all of them in advance or the need to extend this core library. SocketAddressInet inetLoopback 8080 :: SocketAddress Inet SocketAddressInet6 inet6Loopback 8080 0 0 :: SocketAddress Inet62socketThe number designating this 0` on the specific platform. This method is only exported for implementing extension libraries.7This function shall yield the values of constants like AF_INET, AF_INET6 etc.3socketA generic socket type. Use  to create a new socket.The socket is just an !-wrapped file descriptor. The  constructor is exported trough the unsafe module in order to make this library easily extensible, but it is usually not necessary nor advised to work directly on the file descriptor. If you do, the following rules must be obeyed:Make sure not to deadlock. Use  or similar. The lock must not~ be held during a blocking call. This would make it impossible to send and receive simultaneously or to close the socket. The lock must be held when calling operations that use the file descriptor. Otherwise the socket might get closed or even reused by another thread/capability which might result in reading from or writing on a totally different socket. This is a security nightmare!The socket is non-blocking and all the code relies on that assumption. You need to use GHC's eventing mechanism primitives to block until something happens. The former rules forbid to use _ as it does not separate between registering the file descriptor (for which the lock must: be held) and the actual waiting (for which you must not hold the lock). Also see  Jhttps://mail.haskell.org/pipermail/haskell-cafe/2014-September/115823.htmlthisX thread and read the library code to see how the problem is currently circumvented. ,-./01234 (c) Lars Petersen 2015MITinfo@lars-petersen.net experimentalNonez567(c) Lars Petersen 2015MITinfo@lars-petersen.net experimentalNone;=FKT 9socketITo avoid errors with endianess it was decided to keep this type abstract.Use > and ?9 for constructing and deconstructing custom addresses.Hint: Use the ~ instance. It exposes it exactly as found within an IP packet (big endian if you insist on interpreting it as a number).Another hint: Use !0 for parsing and suppress nameserver lookups:  > getAddressInfo (Just "127.0.0.1") Nothing aiNumericHost :: IO [AddressInfo Inet Stream TCP] [AddressInfo {addressInfoFlags = AddressInfoFlags 4, socketAddress = SocketAddressInet {inetAddress = InetAddress 127.0.0.1, inetPort = InetPort 0}, canonicalName = Nothing}]:socketThe  "https://en.wikipedia.org/wiki/IPv4Internet Protocol version 4.>socketConstructs a custom 9. 0inetAddressFromTuple (127,0,0,1) == inetLoopback?socketDeconstructs an 9.@socket 0.0.0.0Asocket 255.255.255.255Bsocket 255.255.255.255Csocket  127.0.0.1Dsocket  224.0.0.0Esocket  224.0.0.1Fsocket  224.0.0.2551;<=89:>?@ABCDEF:981;<=>?E@ACFBD"(c) Lars Petersen 2016MITinfo@lars-petersen.net experimentalNonehVsocketbWhen enabled the protocol checks in a protocol-specific manner if the other end is still alive.Also known as  SO_KEEPALIVE.Xsocket6Allows or disallows the reuse of a local address in a # call.Also known as  SO_REUSEADDR..This is particularly useful when experiencing  exceptions.Zsocket2Reports the last error that occured on the socket.Also known as SO_ERROR.The operation ^ always throws  for this option.-Use with care in the presence of concurrency!\socket\9s allow to read and write certain properties of a socket.mEach option shall have a corresponding data type that models the data associated with the socket option.Use $ and %2 in order to implement custom socket options.]socketGet a specific \.This operation throws  s. Consult man getsockopt& for details and specific errors.^socketSet a specific \.This operation throws  s. Consult man setsockopt& for details and specific errors. VWXYZ[\]^_`(c) Lars Petersen 2015MITinfo@lars-petersen.net experimentalNone;=FKTasocket  IPV6_V6ONLYfsocketITo avoid errors with endianess it was decided to keep this type abstract.Use n and m9 for constructing and deconstructing custom addresses.Hint: Use the ~ instance. It exposes it exactly as found within an IP packet (big endian if you insist on interpreting it as a number).Another hint: Use !0 for parsing and suppress nameserver lookups: > getAddressInfo (Just "::1") Nothing aiNumericHost :: IO [AddressInfo SocketAddressInet6 Stream TCP] [AddressInfo { addressInfoFlags = AddressInfoFlags 4, socketAddress = SocketAddressInet6 {inet6Address = Inet6Address 0000:0000:0000:0000:0000:0000:0000:0001, inet6Port = Inet6Port 0, inet6FlowInfo = Inet6FlowInfo 0, inet6ScopeId = Inet6ScopeId 0}, canonicalName = Nothing }]gsocketThe  "https://en.wikipedia.org/wiki/IPv6Internet Protocol version 6.msocketDeconstructs an f.nsocketConstructs a custom f. 8inet6AddressFromTuple (0,0,0,0,0,0,0,1) == inet6Loopbackosocket ::psocket ::11hijklabcdefgmnopgfedc1hijklnmopab&(c) Lars Petersen 2015MITinfo@lars-petersen.net experimentalNone 01<FKTVVsocketHThis class is for address families that support reverse name resolution.socketI(Reverse-)map an address back to a human-readable host- and service name.The operation throws s. |> getNameInfo (SocketAddressInet inetLoopback 80) mempty NameInfo {hostName = "localhost.localdomain", serviceName = "http"}socketA # consists of host and service name.socket@This class is for address families that support name resolution.socket-Maps names to addresses (i.e. by DNS lookup).The operation throws s.Contrary to the underlying  getaddrinfo operation this wrapper is typesafe and thus only returns records that match the address, type and protocol encoded in the type. This is the price we have to pay for typesafe sockets and extensibility.If you need different types of records, you need to start several queries. If you want to connect to both IPv4 and IPV6 addresses use  and use IPv6-sockets. getAddressInfo (Just "www.haskell.org") (Just "https") mempty :: IO [AddressInfo Inet Stream TCP] > [AddressInfo {addressInfoFlags = AddressInfoFlags 0, socketAddress = SocketAddressInet {inetAddress = InetAddress 162.242.239.16, inetPort = InetPort 443}, canonicalName = Nothing}] > getAddressInfo (Just "www.haskell.org") (Just "80") aiV4Mapped :: IO [AddressInfo Inet6 Stream TCP] [AddressInfo { addressInfoFlags = AddressInfoFlags 8, socketAddress = SocketAddressInet6 {inet6Address = Inet6Address 2400:cb00:2048:0001:0000:0000:6ca2:cc3c, inet6Port = Inet6Port 80, inet6FlowInfo = Inet6FlowInfo 0, inet6ScopeId = Inet6ScopeId 0}, canonicalName = Nothing }] &> getAddressInfo (Just "darcs.haskell.org") Nothing aiV4Mapped :: IO [AddressInfo Inet6 Stream TCP] [AddressInfo { addressInfoFlags = AddressInfoFlags 8, socketAddress = SocketAddressInet6 {inet6Address = Inet6Address 0000:0000:0000:0000:0000:ffff:17fd:e1ad, inet6Port = Inet6Port 0, inet6FlowInfo = Inet6FlowInfo 0, inet6ScopeId = Inet6ScopeId 0}, canonicalName = Nothing }] > getAddressInfo (Just "darcs.haskell.org") Nothing mempty :: IO [AddressInfo Inet6 Stream TCP] *** Exception: AddressInfoException "Name or service not known"socketUse the # instance to combine several flags: 6mconcat [niNameRequired, niNoFullyQualifiedDomainName]socketUse the # instance to combine several flags: %mconcat [aiAddressConfig, aiV4Mapped]socket4Contains the error code that can be matched against.Hint: Use guards or  MultiWayIf& to match against specific exceptions: Iif | e == eaiFail -> ... | e == eaiNoName -> ... | otherwise -> ...socket ;AddressInfoException "Temporary failure in name resolution"socket -AddressInfoException "Bad value for ai_flags"socket AAddressInfoException "Non-recoverable failure in name resolution"socket .AddressInfoException "ai_family not supported"socket 0AddressInfoException "Memory allocation failure"socket ,AddressInfoException "No such host is known"socket =AddressInfoException "Servname not supported for ai_socktype"socket 0AddressInfoException "ai_socktype not supported"socket #AddressInfoException "System error"socket AI_ADDRCONFIG:socketAI_ALLI: Return both IPv4 (as v4-mapped IPv6 address) and IPv6 addresses when D is set independent of whether IPv6 addresses exist for this name.socket AI_CANONNAME:socketAI_NUMERICHOST:socketAI_NUMERICSERV:socket AI_PASSIVE:socket AI_V4MAPPEDL: Return mapped IPv4 addresses if no IPv6 addresses could be found or if  flag is set.socket NI_NAMEREQD:: Throw an exception if the hostname cannot be determined.socketNI_DGRAM": Service is datagram based (i.e. !) rather than stream based (i.e. ).socket NI_NOFQDNS: Return only the hostname part of the fully qualified domain name for local hosts.socketNI_NUMERICHOST.: Return the numeric form of the host address.socketNI_NUMERICSERV1: Return the numeric form of the service address.((c) Lars Petersen 2015MITinfo@lars-petersen.net experimentalSafe(c) Lars Petersen 2015MITinfo@lars-petersen.net experimentalNonesocket.If set to True, disable the Nagle's algorithm. Also know as  TCP_NODELAY.(c) Lars Petersen 2015MITinfo@lars-petersen.net experimentalSafe(c) Lars Petersen 2015MITinfo@lars-petersen.net experimentalSafe (c) Lars Petersen 2015MITinfo@lars-petersen.net experimentalSafe0 (c) Lars Petersen 2015MITinfo@lars-petersen.net experimentalSafe^(c) Lars Petersen 2015MITinfo@lars-petersen.net experimentalNonesocketLike ' , but using  and length instead of a  ByteString.This function is unsafe. bufPtr/ must refer to a buffer which size is at least bufSize bytes.socketLike ( , but using  and length instead of a  ByteString.This function is unsafe. bufPtr/ must refer to a buffer which size is at least bufSize bytes.socketLike  , but using  and length instead of a  ByteString.This function is unsafe. bufPtr/ must refer to a buffer which size is at least bufSize bytes.socketLike ) , but using  and length instead of a  ByteString.This function is unsafe. bufPtr/ must refer to a buffer which size is at least bufSize bytes. 34567_` 34`_567(c) Lars Petersen 2015MITinfo@lars-petersen.net experimentalNone<FTVg socketCreates a new socket.Whereas the underlying POSIX socket operation takes 3 parameters, this library encodes this information in the type variables. This rules out several kinds of errors and especially simplifies the handling of addresses (by using associated data families). Examples: &-- create an IPv4-UDP-datagram socket sock <- socket :: IO (Socket Inet Datagram UDP) -- create an IPv6-TCP-streaming socket sock6 <- socket :: IO (Socket Inet6 Stream TCP) -- create an IPv6-streaming socket with default protocol (usually TCP) sock6 <- socket :: IO (Socket Inet6 Strem Default)1This operation sets up a finalizer that automatically closes the socket when the garbage collection decides to collect it. This is just a fail-safe. You might still run out of file descriptors as there's no guarantee about when the finalizer is run. You're advised to manually @ the socket when it's no longer needed. If possible, use o to reliably close the socket descriptor on exception or regular termination of your computation: result <- bracket (socket :: IO (Socket Inet6 Stream TCP)) close $ \sock-> do somethingWith sock -- your computation here return somethingelseThis operation configures the socket non-blocking to work seamlessly with the runtime system's event notification mechanism.dThis operation can safely deal with asynchronous exceptions without leaking file descriptors.This operation throws s. Consult your  man socket( for details and specific errors.socketConnects to a remote address.This operation returns as soon as a connection has been established (as if the socket were blocking). The connection attempt has either failed or succeeded after this operation threw an exception or returned.The operation throws  s. Calling  on a d socket throws = even if the former file descriptor has been reassigned.socketBind a socket to an address.Calling  on a d socket throws 8 even if the former file descriptor has been reassigned.It is assumed that  never blocks and therefore %, $ and % don't occur. This assumption is supported by the fact that the Linux manpage doesn't mention any of these errors, the Posix manpage doesn't mention the last one and even MacOS' implementation will never fail with any of these when the socket is configured non-blocking as  #http://stackoverflow.com/a/14485305 argued here.This operation throws s. Consult your man$ page for details and specific errnos.socketStarts listening and queueing connection requests on a connection-mode socket. The second parameter determines the backlog size.Calling  on a d socket throws = even if the former file descriptor has been reassigned.The second parameter is called backlogt and sets a limit on how many unaccepted connections the transport implementation shall queue. A value of 0+ leaves the decision to the implementation.This operation throws s. Consult your  man listen& for details and specific errors.socketAccept a new connection.Calling  on a d socket throws = even if the former file descriptor has been reassigned.?This operation configures the new socket non-blocking. It uses accept4i (when available) in order to accept and set the socket non-blocking with a single system call.@This operation sets up a finalizer for the new socket that automatically closes the new socket when the garbage collection decides to collect it. This is just a fail-safe. You might still run out of file descriptors as there's no guarantee about when the finalizer is run. You're advised to manually ' the socket when it's no longer needed.This operation throws s.This operation catches  ,  and + internally and retries automatically.socket Send data.Calling  on a d socket throws = even if the former file descriptor has been reassigned.3The operation returns the number of bytes sent. On  and 8 sockets certain assurances on atomicity exist and   or H are thrown until the whole message would fit into the send buffer.This operation throws  s. Consult man send& for details and specific errors. ,  and  and handled internally and won't be thrown. For performance reasons the operation first tries a write on the socket and then waits when it got   or .socketLike ., but allows to specify a destination address.socket Receive data.rThe operation takes a buffer size in bytes a first parameter which limits the maximum length of the returned *+.When an empty *+ is returned this usally (protocol specific) means that the peer gracefully closed the connection. The user is advised to check for and handle this case.Calling  on a d socket throws = even if the former file descriptor has been reassigned.This operation throws  s. Consult man recv& for details and specific errors. ,  and  and handled internally and won't be thrown. For performance reasons the operation first tries a read on the socket and then waits when it got   or 2 until the socket is signaled to be readable.socketLike +, but additionally yields the peer address.socketCloses a socket.This operation is idempotent and thus can be performed more than once without throwing an exception. If it throws an exception it is presumably a not recoverable situation and the process should exit.This operation does not block.This operation wakes up all threads that are currently blocking on this socket. All other threads are guaranteed to not block on operations on this socket in the future. Threads that perform operations other than  on this socket will fail with ( after the socket has been closed ( replaces the ,- in the ./ with -13 to reliably avoid use-after-free situations)."This operation potentially throws s (only EIO is documented). E is catched internally and retried automatically, so won't be thrown.socketGet a socket's (local) address. > (socket :: IO (Socket Inet Stream TCP)) >>= getAddress SocketAddressInet {inetAddress = InetAddress 0.0.0.0, inetPort = InetPort 0}The operation throws  s. Calling  on a d socket throws = even if the former file descriptor has been reassigned.Behaviour of calling C on a socket that is neither bound nor connected is undefined.o  !"#$%&'()*+,-./01213VWXYZ[\]^n3012./,-\]^Z[XYVW&'()*+  !"#$% (c) Lars Petersen 2015MITinfo@lars-petersen.net experimentalNone&socketSends a whole ] with as many system calls as necessary and returns the bytes sent (in this case just the s ).socketLike , but operates on lazy 0+s.It uses  internally to send all chunks sequentially. The lock on the socket is acquired for each chunk separately, so the socket can be read from in an interleaving fashion.socketSends a whole  without allocating ys. If performance is an issue, this operation should be preferred over all other solutions for sending stream data.The operation Ytes a single buffer of the given size on entry and reuses this buffer until the whole p has been sent. The count of all bytes sent is returned as there is no other efficient way to determine a $s size without actually building it.socketLike , but operates on lazy 0+s and continues until either an empty part has been received (peer closed the connection) or given buffer limit has been exceeded or an exception occured.The  parameter is a soft limit on how many bytes to receive. Collection is stopped if the limit has been exceeded. The result might be up to one internal buffer size longer than the given limit. If the returned 0+ys length is lower than or equal to the limit, the data has not been truncated and the transmission is complete. 1 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V V W X Y Z[\]^_`a b c defghijklmnopqrstuvwxyz{|}~""""""""""%"$sxy&&&&&&&&!&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&   #'()  /.              && +*%socket-0.8.1.0-LElpymhk0PSBvs8fzND8ob System.SocketSystem.Socket.Family.InetSystem.Socket.UnsafeSystem.Socket.Family.Inet6System.Socket.Protocol.DefaultSystem.Socket.Protocol.TCPSystem.Socket.Protocol.UDPSystem.Socket.Type.DatagramSystem.Socket.Type.Raw#System.Socket.Type.SequentialPacketSystem.Socket.Type.Stream System.Socket.Internal.ExceptionSystem.Socket.Internal.MessageSequentialPacketreceiveSystem.Socket.Internal.SocketSystem.Socket.ProtocolDefaultSystem.Socket.TypeRawStreamTCPDatagramUDPSCTPInetInet6socketSocketGHC.ConcthreadWaitReadSystem.Socket.Internal.PlatformgetAddressInfo#System.Socket.Internal.SocketOptionbindunsafeGetSocketOptionunsafeSetSocketOption"System.Socket.Internal.AddressInfosendsendTo receiveFromData.ByteString ByteStringSystem.Posix.TypesFdControl.Concurrent.MVarMVarData.ByteString.LazySocketExceptioneOk eInterruptedeBadFileDescriptorePermissionDeniedeInvalidePipe eWouldBlockeAgain eNotSocketeDestinationAddressRequired eMessageSize eProtocolTypeeNoProtocolOptioneProtocolNotSupportedeSocketTypeNotSupportedeOperationNotSupportedeProtocolFamilyNotSupportedeAddressFamilyNotSupported eAddressInUseeAddressNotAvailable eNetworkDowneNetworkUnreachable eNetworkReseteConnectionAbortedeConnectionReseteNoBufferSpace eIsConnected eNotConnected eShutdowneTooManyReferences eTimedOuteConnectionRefused eHostDowneHostUnreachableeAlready eInProgress MessageFlags msgNoSignalmsgEndOfRecord msgOutOfBand msgWaitAllProtocolprotocolNumberType typeNumberFamily SocketAddress familyNumberwaitRead waitWrite waitConnectedInetPort InetAddressSocketAddressInet inetAddressinetPortinetAddressFromTupleinetAddressToTupleinetAny inetBroadcastinetNone inetLoopbackinetUnspecificGroupinetAllHostsGroupinetMaxLocalGroup$fStorableSocketAddress$fStorableInetAddress$fShowInetAddress$fStorableInetPort $fFamilyInet$fEqSocketAddress$fShowSocketAddress$fEqInetAddress $fEqInetPort $fOrdInetPort$fShowInetPort $fNumInetPort$fRealInetPort$fEnumInetPort$fIntegralInetPort KeepAlive ReuseAddressError SocketOptiongetSocketOptionsetSocketOptionV6Only Inet6ScopeId Inet6FlowInfo Inet6Port Inet6AddressSocketAddressInet6 inet6Address inet6Port inet6FlowInfo inet6ScopeIdinet6AddressToTupleinet6AddressFromTupleinet6Any inet6Loopback$fStorableInet6Address$fShowInet6Address$fStorableInet6Port$fStorableInet6FlowInfo$fStorableInet6ScopeId $fFamilyInet6$fSocketOptionV6Only$fEqInet6Address $fEqInet6Port$fOrdInet6Port$fShowInet6Port$fNumInet6Port$fRealInet6Port$fEnumInet6Port$fIntegralInet6Port$fEqInet6FlowInfo$fOrdInet6FlowInfo$fShowInet6FlowInfo$fNumInet6FlowInfo$fRealInet6FlowInfo$fEnumInet6FlowInfo$fIntegralInet6FlowInfo$fEqInet6ScopeId$fOrdInet6ScopeId$fShowInet6ScopeId$fNumInet6ScopeId$fRealInet6ScopeId$fEnumInet6ScopeId$fIntegralInet6ScopeId $fEqV6Only $fOrdV6Only $fShowV6Only HasNameInfo getNameInfoNameInfohostName serviceNameHasAddressInfo NameInfoFlagsAddressInfoFlagsAddressInfoException AddressInfoaddressInfoFlags socketAddress canonicalNameeaiAgain eaiBadFlagseaiFail eaiFamily eaiMemory eaiNoName eaiService eaiSocketType eaiSystemaiAddressConfigaiAllaiCanonicalName aiNumericHostaiNumericService aiPassive aiV4MappedniNameRequired niDatagramniNoFullyQualifiedDomainName niNumericHostniNumericService$fProtocolDefaultNoDelay $fProtocolTCP$fSocketOptionNoDelay $fEqNoDelay $fOrdNoDelay $fShowNoDelay $fProtocolUDP$fTypeDatagram $fTypeRaw$fTypeSequentialPacket unsafeSend unsafeSendTo unsafeReceiveunsafeReceiveFromtryWaitRetryLoopconnectlistenacceptclose getAddresssendAll sendAllLazysendAllBuilder receiveAll $fTypeStreambaseGHC.BaseMonoid Data.BitsBitsGHC.MVarwithMVar c_getsocknamec_gai_strerror c_getnameinfoc_freeaddrinfo c_getaddrinfoc_memset c_setsockopt c_getsockopt c_recvfromc_recvc_sendtoc_sendc_listenc_accept c_connectc_bindc_closec_socketForeign.StorableStorableGHC.PtrPtrControl.Exception.Basebracketbytestring-0.10.8.2Data.ByteString.Internallength Data.ByteString.Builder.InternalBuilderForeign.Marshal.AllocallocaGHC.IntInt64