5      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      portable provisional Graham Klyne <gk@ninebynine.org>n&Type for authority value within a URI   anonymous@ www.haskell.org :429Represents a general universal resource identifier using  its component parts. For example, for the URI  5 foo://anonymous@www.haskell.org:42/ghc?query#frag the components are:  foo: // anonymous@www.haskell.org:42  /ghc  ?query  #frag  Blank URI  &Turn a string containing a URI into a .  Returns  # if the string is not a valid URI; 7 (an absolute URI with optional fragment identifier). 7NOTE: this is different from the previous network.URI,  whose parseURI function works like   in this module. Parse a URI reference to a  value.  Returns  - if the string is not a valid URI reference. C (an absolute or relative URI with optional fragment identifier). Parse a relative URI to a  value.  Returns  , if the string is not a valid relative URI. 6 (a relative URI with optional fragment identifier). Parse an absolute URI to a  value.  Returns  , if the string is not a valid absolute URI. 3 (an absolute URI without a fragment identifier). $Test if string contains a valid URI 7 (an absolute URI with optional fragment identifier). .Test if string contains a valid URI reference C (an absolute or relative URI with optional fragment identifier). -Test if string contains a valid relative URI 6 (a relative URI with optional fragment identifier). -Test if string contains a valid absolute URI 3 (an absolute URI without a fragment identifier). -Test if string contains a valid IPv6 address -Test if string contains a valid IPv4 address !5Test function: parse and reconstruct a URI reference "#$%Returns & if the character is a "reserved" character in a F URI. To include a literal instance of one of these characters in a * component of a URI, it must be escaped. '(Returns & if the character is an " unreserved" character in D a URI. These characters do not need to be escaped in a URI. The . only characters allowed in a URI are either "reserved",  " unreserved", or an escape sequence (% followed by two hex digits). )*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQTurn a  into a string. >Uses a supplied function to map the userinfo part of the URI. AThe Show instance for URI uses a mapping that hides any password C that may be present in the URI. Use this function with argument id 4 to preserve the password in the formatted output. RReturns &' if the character is allowed in a URI. Returns &1 if the character is allowed unescaped in a URI. 9Escape character if supplied predicate is not satisfied, 2 otherwise return character as singleton string. 5Can be used to make a string valid for use in a URI. a predicate which returns S & if the character should be escaped the string to process the resulting URI string =Turns all instances of escaped characters in the string back  into literal characters. Returns a new # which represents the value of the  first ' interpreted as relative to the second .  For example:  = "foo" `relativeTo` "http://bar.org/" = "http://bar.org/foo" K "http:foo" `nonStrictRelativeTo` "http://bar.org/" = "http://bar.org/foo" Algorithm from RFC3986 [3], section 5.2.2 T Compute an absolute  for a supplied URI  relative to a given base. UVWXY!Returns a new + which represents the relative location of  the first  with respect to the second  . Thus, the C values supplied are expected to be absolute URIs, and the result " returned may be a relative URI.  Example:  + "http://example.com/Root/sub1/name2#frag" < `relativeFrom` "http://example.com/Root/sub2/name2#frag"  == "../sub1/name2#frag" <There is no single correct implementation of this function, @ but any acceptable implementation must satisfy the following:  8 (uabs `relativeFrom` ubase) `relativeTo` ubase == uabs For any valid absolute URI.  (cf.  9http://lists.w3.org/Archives/Public/uri/2003Jan/0008.html   9http://lists.w3.org/Archives/Public/uri/2003Jan/0005.html) Z[\]"0Case normalization; cf. RFC3986 section 6.2.2.1 7 NOTE: authority case normalization is not performed #4Encoding normalization; cf. RFC3986 section 6.2.2.2 $8Path segment normalization; cf. RFC3986 section 6.2.2.4 ^_%&'()*+,-`.  !"#$%&'()*+,-.   !"#$%&'()*+,-.   !"#$%&'()*+,-abcdabcdabcdbcdportable provisionallibraries@haskell.org6.>This data type might have different constructors depending on , what is supported by the operating system. /0123456789:;<=>?@ABCDEFGHeIJKLMNOPQRfghiS:Computes the storage requirements (in bytes) of the given  I. This function differs from j # in that the value of the argument is used. T<Computes the storage requirements (in bytes) required for a  I with the given .. UUse a I* with a function requiring a pointer to a  I and the length of that I. V Create a new I% for use with a function requiring a  pointer to a I and the length of that I. WWrite the given I to the given memory location. XRead a I! from the given memory location. Y Throw an k. corresponding to the current socket error if # the IO action returns a result of -1, but retries in case of an D interrupted operation. Checks for operations that would block and > executes an alternative action before retrying in that case. $textual description of the location (action to execute before retrying if an  immediate retry would block the l operation to be executed Z Throw an k. corresponding to the current socket error if # the IO action returns a result of -1, but retries in case of an  interrupted operation. $textual description of the location the l operation to be executed [ Throw an k. corresponding to the current socket error if # the IO action returns a result of -1. Discards the result of the ! IO action after error handling. $textual description of the location the l operation to be executed \ Throw an k, corresponding to the current socket error. *textual description of the error location ]AOn Windows operating systems, the networking subsystem has to be initialised using ]& before any networking operations can be used. eg.  ! main = withSocketsDo $ do {...} EAlthough this is only strictly necessary on Windows platforms, it is Gharmless on other platforms, so for portability it is good practice to use it all the time. ^Zero a structure. 1./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^1RQNMOPILKJXWSTUV.HGFEDCBA@?>=<;:9876543210/\[ZY]^1.HGFEDCBA@?>=<;:9876543210//0123456789:;<=>?@ABCDEFGHILKJJKLMNOPPQRSTUVWXYZ[\]^portable provisionallibraries@haskell.org_`abcdefghijklm-Flags that control the querying behaviour of . nopqrstuvwxySocket Types. FThis data type might have different constructors depending on what is $ supported by the operating system. z{|}~Either a host name e.g., " haskell.org" or a numeric host B address string consisting of a dotted decimal IPv4 address or an  IPv6 address e.g., " 192.168.0.1". mnopqrstuvwxyz{|}~2This is the default protocol for a given service. @Create a new socket using the given address family, socket type 5 and protocol number. The address family is usually F,  E, or G. The socket type is usually ~ or  }". The protocol number is usually .  If E is used, the IPv6Only socket option is set to 0 < so that both IPv4 and IPv6 can be handled with one socket. ABuild a pair of connected socket objects using the given address C family, socket type, and protocol number. Address family, socket * type, and protocol number are as for the  function above.  Availability: Unix. >Bind the socket to an address. The socket must not already be  bound. The . passed to  bindSocket must be the  same as that passed to . If the special port number  6 is passed then the system assigns the next available  use port. 'Connect to a remote socket at address. @Listen for connections made to the socket. The second argument E specifies the maximum number of queued connections and should be at = least 1; the maximum value is system-dependent (usually 5). AAccept a connection. The socket must be bound to an address and 8 listening for connections. The return value is a pair (conn,  address) where conn+ is a new socket object usable to send and % receive data on the connection, and address is the address bound 3 to the socket on the other end of the connection. 9Send data to the socket. The recipient can be specified = explicitly, so the socket need not be in a connected state. E Returns the number of bytes sent. Applications are responsible for ' ensuring that all data has been sent. ANOTE: blocking on Windows unless you compile with -threaded (see  GHC ticket #1129) 9Send data to the socket. The recipient can be specified = explicitly, so the socket need not be in a connected state. E Returns the number of bytes sent. Applications are responsible for ' ensuring that all data has been sent. :Receive data from the socket. The socket need not be in a  connected state. Returns (bytes, nbytes, address) where bytes  is a String of length nbytes$ representing the data received and  address is a I) representing the address of the sending  socket. ANOTE: blocking on Windows unless you compile with -threaded (see  GHC ticket #1129) @Receive data from the socket, writing it into buffer instead of ? creating a new string. The socket need not be in a connected  state. Returns (nbytes, address) where nbytes is the number of  bytes received and address is a I representing the  address of the sending socket. ANOTE: blocking on Windows unless you compile with -threaded (see  GHC ticket #1129) BSend data to the socket. The socket must be connected to a remote = socket. Returns the number of bytes sent. Applications are 7 responsible for ensuring that all data has been sent. AReceive data from the socket. The socket must be in a connected E state. This function may return fewer bytes than specified. If the B message is longer than the specified length, it may be discarded C depending on the type of socket. This function may block until a  message arrives. BConsidering hardware and network realities, the maximum number of < bytes to receive should be a small power of 2, e.g., 4096. ?For TCP sockets, a zero length return value means the peer has ) closed its half side of the connection. 7Returns the processID, userID and groupID of the socket's peer. HOnly available on platforms that support SO_PEERCRED on domain sockets. The IPv4 wild card address. The IPv6 wild card address. AShut down one or both halves of the connection, depending on the = second argument to the function. If the second argument is  x-, further receives are disallowed. If it is  w*, further sends are disallowed. If it is  v-, further sends and receives are disallowed. >Close the socket. All future operations on the socket object D will fail. The remote end will receive no more data (after queued  data is flushed). Turns a Socket into an  . By default, the new handle is  unbuffered. Use  to change the buffering. Note that since a ( is automatically closed by a finalizer B when it is no longer referenced, you should avoid doing any more  operations on the  after calling . To  close the  after , call   on the . BPack a list of values into a bitmask. The possible mappings from A value to bit-to-set are given as the first argument. We assume F that each value can cause exactly one bit to be set; unpackBits will % break if this property is not true. (Unpack a bitmask into a list of values. Indicate whether the given m will have any effect on  this system. &Default hints for address lookup with . The values  of the k and l fields are ,  and are never inspected by . 9Resolve a host or service name to one or more addresses.  The fe+ values that this function returns contain I & values that you can pass directly to  or  . DThis function is protocol independent. It can return both IPv4 and  IPv6 address information. The fe3 argument specifies the preferred query behaviour, C socket options, or protocol. You can override these conveniently  using Haskell's record update syntax on , for example  as follows:   D myHints = defaultHints { addrFlags = [AI_ADDRCONFIG, AI_CANONNAME] }  Values for g) control query behaviour. The supported  flags are as follows:   AI_PASSIVE If no  value is provided, the network  address in each I  will be left as a  wild card, i.e. as either   or /. This is useful for server applications that . will accept connections from any client.  AI_CANONNAME The l field of the first returned  fe will contain the canonical name of the host. AI_NUMERICHOST The  argument must be a numeric B address in string form, and network name lookups will not be  attempted. Note>: Although the following flags are required by RFC 3493, they A may not have an effect on all platforms, because the underlying E network stack may not support them. To see whether a flag from the ' list below will have any effect, call .  AI_NUMERICSERV The  argument must be a port A number in string form, and service name lookups will not be  attempted.  AI_ADDRCONFIG The list of returned fe values will B only contain IPv4 addresses if the local system has at least ; one IPv4 interface configured, and likewise for IPv6.  AI_V4MAPPED- If an IPv6 lookup is performed, and no IPv6 = addresses are found, IPv6-mapped IPv4 addresses will be  returned. AI_ALL If s, is specified, return all matching IPv6 and : IPv4 addresses. Otherwise, this flag has no effect. You must provide a  value for at least one of the   or  arguments.  can be either a numeric @ network address (dotted quad for IPv4, colon-separated hex for A IPv6) or a hostname. In the latter case, its addresses will be  looked up unless q! is specified as a hint. If you  do not provide a  value and do not set o as E a hint, network addresses in the result will contain the address of  the loopback interface. DIf the query fails, this function throws an IO exception instead of B returning an empty list. Otherwise, it returns a non-empty list  of fe values. >There are several reasons why a query might result in several D values. For example, the queried-for host could be multihomed, or 7 the service might be available via several protocols. CNote: the order of arguments is slightly different to that defined  for  getaddrinfo in RFC 2553. The fe parameter comes first % to make partial application easier.  Example:   F let hints = defaultHints { addrFlags = [AI_ADDRCONFIG, AI_CANONNAME] }  addrs <!- getAddrInfo (Just hints) (Just www.haskell.org) (Just http)  let addr = head addrs  sock <E- socket (addrFamily addr) (addrSocketType addr) (addrProtocol addr) # connect sock (addrAddress addr)   "preferred socket type or protocol host name to look up service name to look up resolved addresses, with best first .Resolve an address to a host or service name. ( This function is protocol independent.  The list of _' values controls query behaviour. The ! supported flags are as follows:   NI_NOFQDN% If a host is local, return only the  hostname part of the FQDN. NI_NUMERICHOST The name of the host is not > looked up. Instead, a numeric representation of the host's ? address is returned. For an IPv4 address, this will be a ? dotted-quad string. For IPv6, it will be colon-separated  hexadecimal. NI_NUMERICSERV The name of the service is not : looked up. Instead, a numeric representation of the  service is returned.  NI_NAMEREQD2 If the hostname cannot be looked up, an IO error  is thrown. NI_DGRAM1 Resolve a datagram-based service name. This is B required only for the few protocols that have different port > numbers for their datagram-based versions than for their  stream-based versions. =Hostname and service name lookups can be expensive. You can . specify which lookups to perform via the two  arguments. If  one of these is S*, the corresponding value in the returned  tuple will be  #, and no lookup will be performed. If a host or service'-s name cannot be looked up, then the numeric 2 form of the address or service will be returned. :If the query fails, this function throws an IO exception.  Example:    (hostName, _) <- getNameInfo [] True False myAddress   "flags to control lookup behaviour whether to look up a hostname "whether to look up a service name the address to look up ./0123456789:;<=>?@ABCDEFGHIJKLMNOPQR[]_`abcdefghijklmnopqrstuvwxyz{|}~њ.HGFEDCBA@?>=<;:9876543210/y~}|{zILKJRQNMuxwvOPefghijklmtsrqpon_dcba`][s_dcba``abcdefghijklfghijklmtsrqponnopqrstuxwvvwxy~}|{zz{|}~  portablestablejohan.tibell@gmail.comportablestablejohan.tibell@gmail.com<Send data to the socket. The socket must be connected to a D remote socket. Returns the number of bytes sent. Applications are 7 responsible for ensuring that all data has been sent. Connected socket  Data to send Number of bytes sent <Send data to the socket. The socket must be connected to a  remote socket. Unlike ', this function continues to send data D until either all data has been sent or an error occurs. On error, C an exception is raised, and there is no way to determine how much & data, if any, was successfully sent. Connected socket  Data to send 9Send data to the socket. The recipient can be specified = explicitly, so the socket need not be in a connected state. D Returns the number of bytes sent. Applications are responsible for ' ensuring that all data has been sent. Socket  Data to send Recipient address Number of bytes sent 8Send data to the socket. The recipient can be specified E explicitly, so the socket need not be in a connected state. Unlike  8, this function continues to send data until either all C data has been sent or an error occurs. On error, an exception is E raised, and there is no way to determine how much data, if any, was  successfully sent. Socket  Data to send Recipient address <Send data to the socket. The socket must be in a connected B state. The data is sent as if the parts have been concatenated. E This function continues to send data until either all data has been A sent or an error occurs. On error, an exception is raised, and 9 there is no way to determine how much data, if any, was  successfully sent. Connected socket  Data to send 9Send data to the socket. The recipient can be specified B explicitly, so the socket need not be in a connected state. The E data is sent as if the parts have been concatenated. This function B continues to send data until either all data has been sent or an B error occurs. On error, an exception is raised, and there is no @ way to determine how much data, if any, was successfully sent. Socket  Data to send Recipient address AReceive data from the socket. The socket must be in a connected B state. This function may return fewer bytes than specified. If < the message is longer than the specified length, it may be E discarded depending on the type of socket. This function may block  until a message arrives. KConsidering hardware and network realities, the maximum number of bytes to 3 receive should be a small power of 2, e.g., 4096. ?For TCP sockets, a zero length return value means the peer has ) closed its half side of the connection. Connected socket #Maximum number of bytes to receive Data received ;Receive data from the socket. The socket need not be in a  connected state. Returns (bytes, address) where bytes is a  $ representing the data received and address is a  I1 representing the address of the sending socket. Socket #Maximum number of bytes to receive !Data received and sender address ,Suppose we try to transmit a list of chunks cs via a gathering write  operation and find that n bytes were sent. Then remainingChunks n cs is & list of chunks remaining to be sent. totalLength cs5 is the sum of the lengths of the chunks in the list cs. withIOVec cs f executes the computation f, passing as argument a pair I consisting of a pointer to a temporarily allocated array of pointers to  ba made from cs and the number of pointers ( length cs).   Unix only.  POSIX, GHC experimentalbos@serpentine.comBSend data to the socket. The socket must be in a connected state. D Returns the number of bytes sent. Applications are responsible for ' ensuring that all data has been sent. Because a lazily generated  may be arbitrarily long, E this function caps the amount it will attempt to send at 4MB. This @ number is large (so it should not penalize performance on fast ? networks), but not outrageously so (to avoid demanding lazily B computed data unnecessarily early). Before being sent, the lazy  ' will be converted to a list of strict s  with %; at most 1024 chunks will be sent.  Unix only. Connected socket  Data to send Number of bytes sent <Send data to the socket. The socket must be in a connected C state. This function continues to send data until either all data = has been sent or an error occurs. If there is an error, an E exception is raised, and there is no way to determine how much data  was sent.  Unix only. Connected socket  Data to send AReceive data from the socket. The socket must be in a connected C state. Data is received on demand, in chunks; each chunk will be < sized to reflect the amount of data received by individual   calls. BAll remaining data from the socket is consumed. When there is no D more data to be received, the receiving side of the socket is shut D down. If there is an error and an exception is thrown, the socket  is not shut down. Connected socket Data received AReceive data from the socket. The socket must be in a connected B state. This function may return fewer bytes than specified. If B the received data is longer than the specified length, it may be E discarded depending on the type of socket. This function may block  until a message arrives. :If there is no more data to be received, returns an empty . Connected socket #Maximum number of bytes to receive Data received  non-portable experimentallibraries@haskell.orgOGet service by name. Get the service given a O and . Get the O corresponding to the .  Resolve a  to IPv4 address. Get a 0 corresponding to the given address and family. - Note that only IPv4 is currently supported.      8Open the network name database. The parameter specifies 9 whether a connection is maintained open between various  networkEntry calls 3Close the connection to the network name database. !Get the list of network entries. CCalling getHostName returns the standard host name for the current ! processor, as set at boot time. ;O     ;    O 6     portable provisionallibraries@haskell.orgCalling ' creates a client side socket which is H connected to the given host and port. The Protocol and socket type is D derived from the given port identifier. If a port number is given . then the result is always an internet family ~ socket. ;Creates the server side socket which has been bound to the  specified port. NOTE: To avoid the "Address already in use" C problems popped up several times on the GHC-Users mailing list we  set the 0 socket option on the listening socket. If you  don'2t want this behaviour, please use the lower level   instead. If available, the IPv6Only socket option is set to 0 > so that both IPv4 and IPv6 can be accepted with this socket. Port Identifier Connected Socket +Accept a connection on a socket created by  . Normal  I/O operations (see  System.IO) can be used on the  * returned to communicate with the client. A Notice that although you can pass any Socket to Network.accept, @ only sockets of either AF_UNIX, AF_INET, or AF_INET6 will work  (this shouldn'6t be a problem, though). When using AF_UNIX, HostName = will be set to the path of the socket and PortNumber to -1. Listening Socket Triple of: read/write  for  communicating with the client,  the  of the peer socket, and  the O of the remote connection.  Returns the ! associated with a given socket. O]O]      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnnopqrstuvwxyz{|}~     X !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMN !OPQRSTUVWXYZ[\]]^_`abcdefgh !ijklmnopqrstuvwxyz{|}~ !         oqnetwork-2.3.0.7 Network.URINetwork.Socket.InternalNetwork.SocketNetwork.Socket.ByteStringNetwork.Socket.ByteString.Lazy Network.BSDNetworkNetwork.Socket.ByteString.IOVec Network.Socket.ByteString.MsgHdr"Network.Socket.ByteString.InternalURIAuth uriUserInfo uriRegNameuriPortURI uriScheme uriAuthorityuriPathuriQuery uriFragmentnullURIparseURIparseURIReferenceparseRelativeReferenceparseAbsoluteURIisURIisURIReferenceisRelativeReference isAbsoluteURI isIPv6address isIPv4address isReserved isUnreserved uriToStringisAllowedInURIisUnescapedInURI escapeURICharescapeURIStringunEscapeStringnonStrictRelativeTo relativeTo relativeFrom normalizeCasenormalizeEscapenormalizePathSegmentsparseabsoluteURI escapeStringreserved unreservedscheme authoritypathqueryfragmentFamily AF_BLUETOOTH AF_WANPIPEAF_PPPOXAF_IRDA AF_ATMSVC AF_ECONETAF_ASH AF_PACKET AF_SECURITY AF_NETBEUIAF_ROSE AF_ATMPVC AF_BRIDGE AF_NETROMAF_ISDNAF_IPXAF_AX25AF_X25AF_ROUTE AF_APPLETALK AF_DECnetAF_SNAAF_INET6AF_INETAF_UNIX AF_UNSPECSockAddr SockAddrUnix SockAddrInet6 SockAddrInetScopeIDFlowInfo PortNumberPortNum HostAddress6 HostAddresssizeOfSockAddrsizeOfSockAddrByFamily withSockAddrwithNewSockAddr pokeSockAddr peekSockAddr%throwSocketErrorIfMinus1RetryMayBlockthrowSocketErrorIfMinus1RetrythrowSocketErrorIfMinus1_throwSocketError withSocketsDo zeroMemory NameInfoFlagNI_NUMERICSERVNI_NUMERICHOST NI_NOFQDN NI_NAMEREQDNI_DGRAMAddrInfo addrFlags addrFamilyaddrSocketType addrProtocol addrAddress addrCanonName AddrInfoFlag AI_V4MAPPED AI_PASSIVEAI_NUMERICSERVAI_NUMERICHOST AI_CANONNAMEAI_ALL AI_ADDRCONFIG ShutdownCmd ShutdownBoth ShutdownSendShutdownReceive SocketType SeqPacketRDMRawDatagramStream NoSocketType SocketOption SendTimeOut RecvTimeOut SendLowWater RecvLowWaterLingerNoDelay MaxSegment TimeToLive OOBInline KeepAlive RecvBuffer SendBuffer Broadcast DontRouteSoErrorType ReuseAddrDebugDummySocketOption__ProtocolNumberSocketMkSocket SocketStatusClosedConvertedToHandle Connected ListeningBound NotConnected ServiceNameHostNamemkSocketfdSocketdefaultProtocolsocket socketPair bindSocketconnectlistenacceptsendTo sendBufTorecvFrom recvBufFromsendrecvrecvLen socketPort getPeerName getSocketNamesetSocketOptiongetSocketOption getPeerCredsendFdrecvFd sendAncillary recvAncillary packFamily unpackFamilypackSocketTypeaNY_PORT iNADDR_ANY iN6ADDR_ANY sOMAXCONN sOL_SOCKET sCM_RIGHTSmaxListenQueueshutdownsClose sIsConnectedsIsBound sIsListening sIsReadable sIsWritable inet_addr inet_ntoasocketToHandleaddrInfoFlagImplemented defaultHints getAddrInfo getNameInfosendAll sendAllTosendMany sendManyTo getContents NetworkEntry networkNamenetworkAliases networkFamilynetworkAddress NetworkName NetworkAddr HostEntryhostName hostAliases hostFamily hostAddresses ProtocolEntry protoName protoAliases protoNumber ServiceEntry serviceNameserviceAliases servicePortserviceProtocol ProtocolNamegetServiceByNamegetServiceByPortgetServicePortNumbergetServiceEntrysetServiceEntryendServiceEntrygetServiceEntriesgetProtocolByNamegetProtocolByNumbergetProtocolNumbergetProtocolEntrysetProtocolEntryendProtocolEntrygetProtocolEntries hostAddress getHostByName getHostByAddr getHostEntry setHostEntry endHostEntrygetHostEntriesgetNetworkByNamegetNetworkByAddrgetNetworkEntrysetNetworkEntryendNetworkEntrygetNetworkEntries getHostNamePortID UnixSocketService connectTolistenOn URIParserdefaultUserInfoMapbase Data.MaybeNothingtestURIReference parseURIAny isValidParseparseAllescapedghc-prim GHC.TypesTrue genDelims subDelimsunreservedCharurihierPartuscheme uauthorityuserinfohost ipLiteral ipvFuture ipv6address opt_n_h4c_h4ls32h4ch4 ipv4addressdecOctetregNameport pathAbEmptypathAbs pathNoScheme pathRootLess slashSegmentsegment segmentNz segmentNzcpcharucharuquery ufragment uriReference relativeRef relativePart absoluteURI alphaChar digitChar alphaNumChar hexDigitChar oneThenMany countMinMax notMatchinguriAuthToStringFalse isDefinedremoveDotSegmentselimDotsdropHead nextSegment splitLast relPathFrom relPathFrom1 relSegsFrom difSegsFrom traceShowtraceValorNullIOVeciovBaseiovLen CSaFamilymemsets6_addr_offsetpeek32poke32Foreign.StorablesizeOfGHC.IO.ExceptionIOErrorIO c_setsockopt c_getsockopt c_getsockname c_getpeername c_recvfromc_recvc_sendtoc_sendthreadedc_listen c_accept_safec_accept c_connectc_bindc_socketc_close c_shutdown c_inet_addr c_inet_ntoa c_getnameinfoc_gai_strerrorc_freeaddrinfo c_getaddrinfoc_recvFdc_sendFdc_recvAncillaryc_sendAncillary c_socketpairhtonlhtonsntohsintToPortNumberportNumberToIntsocketOptLevelpackSocketOptionunpackSocketType sdownCmdToInt sIsAcceptableGHC.IO.Handle.TypesHandle GHC.IO.Handle hSetBufferinghClosepackBits unpackBits aiFlagMapping niFlagMappingGHC.Err undefinedJustfollowAddrInfo gai_strerror withCStringIfBoolmkInvalidRecvArgError mkEOFErrorcloseMsgHdrmsgName msgNameLenmsgIov msgIovLen c_sendmsgc_writev recvInnerbytestring-0.9.2.0Data.ByteString.Internal ByteStringremainingChunks totalLength withIOVecData.ByteString.Lazy.InternalData.ByteString.LazytoChunks c_gethostname c_endnetent c_setnetent c_getnetentc_getnetbyaddrc_getnetbyname c_endhostent c_sethostent c_gethostentc_gethostbyaddrc_gethostbyname c_endprotoent c_setprotoent c_getprotoentc_getprotobynumberc_getprotobyname c_endservent c_setservent c_getserventc_getservbyportc_getservbynamelockwithLock getEntriesthrowNoSuchThingIfNullconnect'listen'catchIOfirstSuccessful