-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Low-level networking interface -- -- This package provides a low-level networking interface. -- -- In network-2.6 the Network.URI module was split off into its -- own package, network-uri-2.6. If you're using the Network.URI -- module you can automatically get it from the right package by adding -- this to your .cabal file: -- --
-- flag network-uri -- description: Get Network.URI from the network-uri package -- default: True -- -- library -- -- ... -- if flag(network-uri) -- build-depends: network-uri >= 2.6, network >= 2.6 -- else -- build-depends: network-uri < 2.6, network < 2.6 ---- -- That is, get the module from either network < 2.6 or from -- network-uri >= 2.6. @package network @version 2.6.3.1 -- | A module containing semi-public Socket internals. Modules which -- extend the Socket module will need to use this module while -- ideally most users will be able to make do with the public interface. module Network.Socket.Internal -- | The raw network byte order number is read using host byte order. -- Therefore on little-endian architectures the byte order is swapped. -- For example 127.0.0.1 is represented as 0x0100007f -- on little-endian hosts and as 0x7f000001 on big-endian hosts. -- -- For direct manipulation prefer hostAddressToTuple and -- tupleToHostAddress. type HostAddress = Word32 -- | Independent of endianness. For example ::1 is stored as -- (0, 0, 0, 1). -- -- For direct manipulation prefer hostAddress6ToTuple and -- tupleToHostAddress6. type HostAddress6 = (Word32, Word32, Word32, Word32) type FlowInfo = Word32 type ScopeID = Word32 -- | Use the Num instance (i.e. use a literal) to create a -- PortNumber value with the correct network-byte-ordering. You -- should not use the PortNum constructor. It will be removed in the next -- release. -- --
-- >>> 1 :: PortNumber -- 1 -- -- >>> read "1" :: PortNumber -- 1 --newtype PortNumber -- | Deprecated: Do not use the PortNum constructor. Use the Num -- instance. PortNum will be removed in the next release. PortNum :: Word16 -> PortNumber -- | The existence of a constructor does not necessarily imply that that -- socket address type is supported on your system: see -- isSupportedSockAddr. data SockAddr SockAddrInet :: PortNumber -> HostAddress -> SockAddr SockAddrInet6 :: PortNumber -> FlowInfo -> HostAddress6 -> ScopeID -> SockAddr SockAddrUnix :: String -> SockAddr SockAddrCan :: Int32 -> SockAddr -- | Read a SockAddr from the given memory location. peekSockAddr :: Ptr SockAddr -> IO SockAddr -- | Write the given SockAddr to the given memory location. pokeSockAddr :: Ptr a -> SockAddr -> IO () -- | Computes the storage requirements (in bytes) of the given -- SockAddr. This function differs from sizeOf in that the -- value of the argument is used. sizeOfSockAddr :: SockAddr -> Int -- | Computes the storage requirements (in bytes) required for a -- SockAddr with the given Family. sizeOfSockAddrByFamily :: Family -> Int -- | Use a SockAddr with a function requiring a pointer to a -- SockAddr and the length of that SockAddr. withSockAddr :: SockAddr -> (Ptr SockAddr -> Int -> IO a) -> IO a -- | Create a new SockAddr for use with a function requiring a -- pointer to a SockAddr and the length of that SockAddr. withNewSockAddr :: Family -> (Ptr SockAddr -> Int -> IO a) -> IO a -- | Address families. -- -- A constructor being present here does not mean it is supported by the -- operating system: see isSupportedFamily. data Family AF_UNSPEC :: Family AF_UNIX :: Family AF_INET :: Family AF_INET6 :: Family AF_IMPLINK :: Family AF_PUP :: Family AF_CHAOS :: Family AF_NS :: Family AF_NBS :: Family AF_ECMA :: Family AF_DATAKIT :: Family AF_CCITT :: Family AF_SNA :: Family AF_DECnet :: Family AF_DLI :: Family AF_LAT :: Family AF_HYLINK :: Family AF_APPLETALK :: Family AF_ROUTE :: Family AF_NETBIOS :: Family AF_NIT :: Family AF_802 :: Family AF_ISO :: Family AF_OSI :: Family AF_NETMAN :: Family AF_X25 :: Family AF_AX25 :: Family AF_OSINET :: Family AF_GOSSIP :: Family AF_IPX :: Family Pseudo_AF_XTP :: Family AF_CTF :: Family AF_WAN :: Family AF_SDL :: Family AF_NETWARE :: Family AF_NDD :: Family AF_INTF :: Family AF_COIP :: Family AF_CNT :: Family Pseudo_AF_RTIP :: Family Pseudo_AF_PIP :: Family AF_SIP :: Family AF_ISDN :: Family Pseudo_AF_KEY :: Family AF_NATM :: Family AF_ARP :: Family Pseudo_AF_HDRCMPLT :: Family AF_ENCAP :: Family AF_LINK :: Family AF_RAW :: Family AF_RIF :: Family AF_NETROM :: Family AF_BRIDGE :: Family AF_ATMPVC :: Family AF_ROSE :: Family AF_NETBEUI :: Family AF_SECURITY :: Family AF_PACKET :: Family AF_ASH :: Family AF_ECONET :: Family AF_ATMSVC :: Family AF_IRDA :: Family AF_PPPOX :: Family AF_WANPIPE :: Family AF_BLUETOOTH :: Family AF_CAN :: Family -- | Throw an IOError corresponding to the current socket error. throwSocketError :: String -> IO a -- | Like throwSocketError, but the error code is supplied as an -- argument. -- -- On Windows, do not use errno. Use a system error code instead. throwSocketErrorCode :: String -> CInt -> IO a -- | Throw an IOError 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. throwSocketErrorIfMinus1_ :: (Eq a, Num a) => String -> IO a -> IO () -- | Throw an IOError corresponding to the current socket error if -- the IO action returns a result of -1, but retries in case of -- an interrupted operation. throwSocketErrorIfMinus1Retry :: (Eq a, Num a) => String -> IO a -> IO a -- | Throw an IOError corresponding to the current socket error if -- the IO action returns a result of -1, but retries in case of -- an interrupted operation. Discards the result of the IO action after -- error handling. throwSocketErrorIfMinus1Retry_ :: (Eq a, Num a) => String -> IO a -> IO () -- | Throw an IOError corresponding to the current socket error if -- the IO action returns a result of -1, but retries in case of -- an interrupted operation. Checks for operations that would block and -- executes an alternative action before retrying in that case. throwSocketErrorIfMinus1RetryMayBlock :: (Eq a, Num a) => String -> IO b -> IO a -> IO a -- | Like throwSocketErrorIfMinus1Retry, but if the action fails -- with EWOULDBLOCK or similar, wait for the socket to be -- read-ready, and try again. throwSocketErrorWaitRead :: (Eq a, Num a) => Socket -> String -> IO a -> IO a -- | Like throwSocketErrorIfMinus1Retry, but if the action fails -- with EWOULDBLOCK or similar, wait for the socket to be -- write-ready, and try again. throwSocketErrorWaitWrite :: (Eq a, Num a) => Socket -> String -> IO a -> IO a -- | With older versions of the network library on Windows -- operating systems, the networking subsystem must be initialised using -- withSocketsDo before any networking operations can be used. eg. -- --
-- main = withSocketsDo $ do {...}
--
--
-- It is fine to nest calls to withSocketsDo, and to perform
-- networking operations after withSocketsDo has returned.
--
-- In newer versions of the network library it is only necessary
-- to call withSocketsDo if you are calling the MkSocket
-- constructor directly. However, for compatibility with older versions
-- on Windows, it is good practice to always call withSocketsDo
-- (it's very cheap).
withSocketsDo :: IO a -> IO a
-- | Zero a structure.
zeroMemory :: Ptr a -> CSize -> IO ()
-- | The Network.Socket module is for when you want full control
-- over sockets. Essentially the entire C socket API is exposed through
-- this module; in general the operations follow the behaviour of the C
-- functions of the same name (consult your favourite Unix networking
-- book).
--
-- A higher level interface to networking operations is provided through
-- the module Network.
module Network.Socket
-- | Represents a socket. The fields are, respectively:
--
-- -- >>> 1 :: PortNumber -- 1 -- -- >>> read "1" :: PortNumber -- 1 --newtype PortNumber -- | Deprecated: Do not use the PortNum constructor. Use the Num -- instance. PortNum will be removed in the next release. PortNum :: Word16 -> PortNumber -- | Either a host name e.g., "haskell.org" or a numeric host -- address string consisting of a dotted decimal IPv4 address or an IPv6 -- address e.g., "192.168.0.1". type HostName = String type ServiceName = String data AddrInfo AddrInfo :: [AddrInfoFlag] -> Family -> SocketType -> ProtocolNumber -> SockAddr -> Maybe String -> AddrInfo [addrFlags] :: AddrInfo -> [AddrInfoFlag] [addrFamily] :: AddrInfo -> Family [addrSocketType] :: AddrInfo -> SocketType [addrProtocol] :: AddrInfo -> ProtocolNumber [addrAddress] :: AddrInfo -> SockAddr [addrCanonName] :: AddrInfo -> Maybe String -- | Flags that control the querying behaviour of getAddrInfo. For -- more information, see -- https://tools.ietf.org/html/rfc3493#page-25 data AddrInfoFlag -- | The list of returned AddrInfo values will only contain IPv4 -- addresses if the local system has at least one IPv4 interface -- configured, and likewise for IPv6. (Only some platforms support this.) AI_ADDRCONFIG :: AddrInfoFlag -- | If AI_ALL is specified, return all matching IPv6 and IPv4 -- addresses. Otherwise, this flag has no effect. (Only some platforms -- support this.) AI_ALL :: AddrInfoFlag -- | The addrCanonName field of the first returned AddrInfo -- will contain the "canonical name" of the host. AI_CANONNAME :: AddrInfoFlag -- | The HostName argument must be a numeric address in -- string form, and network name lookups will not be attempted. AI_NUMERICHOST :: AddrInfoFlag -- | The ServiceName argument must be a port number in string -- form, and service name lookups will not be attempted. (Only some -- platforms support this.) AI_NUMERICSERV :: AddrInfoFlag -- | If no HostName value is provided, the network address in each -- SockAddr will be left as a "wild card", i.e. as either -- iNADDR_ANY or iN6ADDR_ANY. This is useful for server -- applications that will accept connections from any client. AI_PASSIVE :: AddrInfoFlag -- | If an IPv6 lookup is performed, and no IPv6 addresses are found, -- IPv6-mapped IPv4 addresses will be returned. (Only some platforms -- support this.) AI_V4MAPPED :: AddrInfoFlag -- | Indicate whether the given AddrInfoFlag will have any effect on -- this system. addrInfoFlagImplemented :: AddrInfoFlag -> Bool -- | Default hints for address lookup with getAddrInfo. The values -- of the addrAddress and addrCanonName fields are -- undefined, and are never inspected by getAddrInfo. -- --
-- >>> addrFlags defaultHints -- [] -- -- >>> addrFamily defaultHints -- AF_UNSPEC -- -- >>> addrSocketType defaultHints -- NoSocketType -- -- >>> addrProtocol defaultHints -- 0 --defaultHints :: AddrInfo -- | Resolve a host or service name to one or more addresses. The -- AddrInfo values that this function returns contain -- SockAddr values that you can pass directly to connect or -- bind. -- -- This function is protocol independent. It can return both IPv4 and -- IPv6 address information. -- -- The AddrInfo argument specifies the preferred query behaviour, -- socket options, or protocol. You can override these conveniently using -- Haskell's record update syntax on defaultHints, for example as -- follows: -- --
-- >>> let hints = defaultHints { addrFlags = [AI_NUMERICHOST], addrSocketType = Stream }
--
--
-- You must provide a Just value for at least one of the
-- HostName or ServiceName arguments. HostName can
-- be either a numeric network address (dotted quad for IPv4,
-- colon-separated hex for IPv6) or a hostname. In the latter case, its
-- addresses will be looked up unless AI_NUMERICHOST is specified
-- as a hint. If you do not provide a HostName value and do
-- not set AI_PASSIVE as a hint, network addresses in the result
-- will contain the address of the loopback interface.
--
-- If the query fails, this function throws an IO exception instead of
-- returning an empty list. Otherwise, it returns a non-empty list of
-- AddrInfo values.
--
-- There are several reasons why a query might result in several values.
-- For example, the queried-for host could be multihomed, or the service
-- might be available via several protocols.
--
-- Note: the order of arguments is slightly different to that defined for
-- getaddrinfo in RFC 2553. The AddrInfo parameter comes
-- first to make partial application easier.
--
-- -- >>> addr:_ <- getAddrInfo (Just hints) (Just "127.0.0.1") (Just "http") -- -- >>> addrAddress addr -- 127.0.0.1:80 --getAddrInfo :: Maybe AddrInfo -> Maybe HostName -> Maybe ServiceName -> IO [AddrInfo] -- | Flags that control the querying behaviour of getNameInfo. For -- more information, see -- https://tools.ietf.org/html/rfc3493#page-30 data NameInfoFlag -- | Resolve a datagram-based service name. This is required only for the -- few protocols that have different port numbers for their -- datagram-based versions than for their stream-based versions. NI_DGRAM :: NameInfoFlag -- | If the hostname cannot be looked up, an IO error is thrown. NI_NAMEREQD :: NameInfoFlag -- | If a host is local, return only the hostname part of the FQDN. NI_NOFQDN :: NameInfoFlag -- | 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_NUMERICHOST :: NameInfoFlag -- | The name of the service is not looked up. Instead, a numeric -- representation of the service is returned. NI_NUMERICSERV :: NameInfoFlag -- | Resolve an address to a host or service name. This function is -- protocol independent. The list of NameInfoFlag values controls -- query behaviour. -- -- If a host or service's name cannot be looked up, then the numeric 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 -- getNameInfo :: [NameInfoFlag] -> Bool -> Bool -> SockAddr -> IO (Maybe HostName, Maybe ServiceName) -- | Create a new socket using the given address family, socket type and -- protocol number. The address family is usually AF_INET, -- AF_INET6, or AF_UNIX. The socket type is usually -- Stream or Datagram. The protocol number is usually -- defaultProtocol. If AF_INET6 is used and the socket type -- is Stream or Datagram, the IPv6Only socket option -- is set to 0 so that both IPv4 and IPv6 can be handled with one socket. -- --
-- >>> let hints = defaultHints { addrFlags = [AI_NUMERICHOST, AI_NUMERICSERV], addrSocketType = Stream }
--
-- >>> addr:_ <- getAddrInfo (Just hints) (Just "127.0.0.1") (Just "5000")
--
-- >>> sock@(MkSocket _ fam stype _ _) <- socket (addrFamily addr) (addrSocketType addr) (addrProtocol addr)
--
-- >>> fam
-- AF_INET
--
-- >>> stype
-- Stream
--
-- >>> bind sock (addrAddress addr)
--
-- >>> getSocketName sock
-- 127.0.0.1:5000
--
socket :: Family -> SocketType -> ProtocolNumber -> IO Socket
-- | Build a pair of connected socket objects using the given address
-- family, socket type, and protocol number. Address family, socket type,
-- and protocol number are as for the socket function above.
-- Availability: Unix.
socketPair :: Family -> SocketType -> ProtocolNumber -> IO (Socket, Socket)
-- | Connect to a remote socket at address.
connect :: Socket -> SockAddr -> IO ()
-- | Bind the socket to an address. The socket must not already be bound.
-- The Family passed to bind must be the same as that
-- passed to socket. If the special port number aNY_PORT is
-- passed then the system assigns the next available use port.
bind :: Socket -> SockAddr -> IO ()
-- | Listen for connections made to the socket. The second argument
-- specifies the maximum number of queued connections and should be at
-- least 1; the maximum value is system-dependent (usually 5).
listen :: Socket -> Int -> IO ()
-- | Accept a connection. The socket must be bound to an address and
-- 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 to the socket on the other end of the connection.
accept :: Socket -> IO (Socket, SockAddr)
getPeerName :: Socket -> IO SockAddr
getSocketName :: Socket -> IO SockAddr
-- | Returns the processID, userID and groupID of the socket's peer.
--
-- Only available on platforms that support SO_PEERCRED or GETPEEREID(3)
-- on domain sockets. GETPEEREID(3) returns userID and groupID. processID
-- is always 0.
getPeerCred :: Socket -> IO (CUInt, CUInt, CUInt)
socketPort :: Socket -> IO PortNumber
-- | Turns a Socket into an Handle. By default, the new handle is
-- unbuffered. Use hSetBuffering to change the buffering.
--
-- Note that since a Handle is automatically closed by a finalizer
-- when it is no longer referenced, you should avoid doing any more
-- operations on the Socket after calling socketToHandle.
-- To close the Socket after socketToHandle, call
-- hClose on the Handle.
socketToHandle :: Socket -> IOMode -> IO Handle
-- | Send data to the socket. The socket must be connected to a remote
-- socket. Returns the number of bytes sent. Applications are responsible
-- for ensuring that all data has been sent.
--
-- Sending data to closed socket may lead to undefined behaviour.
-- | Warning: Use send defined in Network.Socket.ByteString
send :: Socket -> String -> IO Int
-- | Send data to the socket. The recipient can be specified explicitly, so
-- the socket need not be in a connected state. Returns the number of
-- bytes sent. Applications are responsible for ensuring that all data
-- has been sent.
--
-- NOTE: blocking on Windows unless you compile with -threaded (see GHC
-- ticket #1129)
-- | Warning: Use sendTo defined in Network.Socket.ByteString
sendTo :: Socket -> String -> SockAddr -> IO Int
-- | Receive data from the socket. The socket must be in a connected state.
-- This function may return fewer bytes than specified. If the message is
-- longer than the specified length, it may be discarded depending on the
-- type of socket. This function may block until a message arrives.
--
-- Considering 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.
--
-- Receiving data from closed socket may lead to undefined behaviour.
-- | Warning: Use recv defined in Network.Socket.ByteString
recv :: Socket -> Int -> IO String
-- | 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 SockAddr representing the
-- address of the sending socket.
--
-- NOTE: blocking on Windows unless you compile with -threaded (see GHC
-- ticket #1129)
-- | Warning: Use recvFrom defined in
-- Network.Socket.ByteString
recvFrom :: Socket -> Int -> IO (String, Int, SockAddr)
-- | Warning: Use recvLen defined in
-- Network.Socket.ByteString
recvLen :: Socket -> Int -> IO (String, Int)
-- | Send data to the socket. The socket must be connected to a remote
-- socket. Returns the number of bytes sent. Applications are responsible
-- for ensuring that all data has been sent.
--
-- Sending data to closed socket may lead to undefined behaviour.
sendBuf :: Socket -> Ptr Word8 -> Int -> IO Int
-- | Receive data from the socket. The socket must be in a connected state.
-- This function may return fewer bytes than specified. If the message is
-- longer than the specified length, it may be discarded depending on the
-- type of socket. This function may block until a message arrives.
--
-- Considering 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.
--
-- Receiving data from closed socket may lead to undefined behaviour.
recvBuf :: Socket -> Ptr Word8 -> Int -> IO Int
-- | Send data to the socket. The recipient can be specified explicitly, so
-- the socket need not be in a connected state. Returns the number of
-- bytes sent. Applications are responsible for ensuring that all data
-- has been sent.
sendBufTo :: Socket -> Ptr a -> Int -> SockAddr -> IO Int
-- | 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 SockAddr
-- representing the address of the sending socket.
--
-- NOTE: blocking on Windows unless you compile with -threaded (see GHC
-- ticket #1129)
recvBufFrom :: Socket -> Ptr a -> Int -> IO (Int, SockAddr)
inet_addr :: String -> IO HostAddress
inet_ntoa :: HostAddress -> IO String
-- | Shut down one or both halves of the connection, depending on the
-- second argument to the function. If the second argument is
-- ShutdownReceive, further receives are disallowed. If it is
-- ShutdownSend, further sends are disallowed. If it is
-- ShutdownBoth, further sends and receives are disallowed.
shutdown :: Socket -> ShutdownCmd -> IO ()
-- | Close the socket. Sending data to or receiving data from closed socket
-- may lead to undefined behaviour.
close :: Socket -> IO ()
-- | Determines whether close has been used on the Socket.
-- This does not indicate any status about the socket beyond this.
-- If the socket has been closed remotely, this function can still return
-- True.
isConnected :: Socket -> IO Bool
isBound :: Socket -> IO Bool
isListening :: Socket -> IO Bool
isReadable :: Socket -> IO Bool
isWritable :: Socket -> IO Bool
-- | Socket options for use with setSocketOption and
-- getSocketOption.
--
-- The existence of a constructor does not imply that the relevant option
-- is supported on your system: see isSupportedSocketOption
data SocketOption
-- | SO_DEBUG
Debug :: SocketOption
-- | SO_REUSEADDR
ReuseAddr :: SocketOption
-- | SO_TYPE
Type :: SocketOption
-- | SO_ERROR
SoError :: SocketOption
-- | SO_DONTROUTE
DontRoute :: SocketOption
-- | SO_BROADCAST
Broadcast :: SocketOption
-- | SO_SNDBUF
SendBuffer :: SocketOption
-- | SO_RCVBUF
RecvBuffer :: SocketOption
-- | SO_KEEPALIVE
KeepAlive :: SocketOption
-- | SO_OOBINLINE
OOBInline :: SocketOption
-- | IP_TTL
TimeToLive :: SocketOption
-- | TCP_MAXSEG
MaxSegment :: SocketOption
-- | TCP_NODELAY
NoDelay :: SocketOption
-- | TCP_CORK
Cork :: SocketOption
-- | SO_LINGER
Linger :: SocketOption
-- | SO_REUSEPORT
ReusePort :: SocketOption
-- | SO_RCVLOWAT
RecvLowWater :: SocketOption
-- | SO_SNDLOWAT
SendLowWater :: SocketOption
-- | SO_RCVTIMEO
RecvTimeOut :: SocketOption
-- | SO_SNDTIMEO
SendTimeOut :: SocketOption
-- | SO_USELOOPBACK
UseLoopBack :: SocketOption
-- | TCP_USER_TIMEOUT
UserTimeout :: SocketOption
-- | IPV6_V6ONLY
IPv6Only :: SocketOption
CustomSockOpt :: (CInt, CInt) -> SocketOption
-- | Does the SocketOption exist on this system?
isSupportedSocketOption :: SocketOption -> Bool
-- | Get a socket option that gives an Int value. There is currently no API
-- to get e.g. the timeval socket options
getSocketOption :: Socket -> SocketOption -> IO Int
-- | Set a socket option that expects an Int value. There is currently no
-- API to set e.g. the timeval socket options
setSocketOption :: Socket -> SocketOption -> Int -> IO ()
sendFd :: Socket -> CInt -> IO ()
recvFd :: Socket -> IO CInt
aNY_PORT :: PortNumber
-- | The IPv4 wild card address.
iNADDR_ANY :: HostAddress
-- | The IPv6 wild card address.
iN6ADDR_ANY :: HostAddress6
sOMAXCONN :: Int
sOL_SOCKET :: Int
sCM_RIGHTS :: Int
-- | This is the value of SOMAXCONN, typically 128. 128 is good enough for
-- normal network servers but is too small for high performance servers.
maxListenQueue :: Int
-- | With older versions of the network library on Windows
-- operating systems, the networking subsystem must be initialised using
-- withSocketsDo before any networking operations can be used. eg.
--
--
-- main = withSocketsDo $ do {...}
--
--
-- It is fine to nest calls to withSocketsDo, and to perform
-- networking operations after withSocketsDo has returned.
--
-- In newer versions of the network library it is only necessary
-- to call withSocketsDo if you are calling the MkSocket
-- constructor directly. However, for compatibility with older versions
-- on Windows, it is good practice to always call withSocketsDo
-- (it's very cheap).
withSocketsDo :: IO a -> IO a
fdSocket :: Socket -> CInt
mkSocket :: CInt -> Family -> SocketType -> ProtocolNumber -> SocketStatus -> IO Socket
-- | Deprecated alias for bind.
-- | Deprecated: use bind
bindSocket :: Socket -> SockAddr -> IO ()
-- | Deprecated alias for close.
-- | Deprecated: use close
sClose :: Socket -> IO ()
-- | Deprecated alias for isConnected.
-- | Deprecated: use isConnected
sIsConnected :: Socket -> IO Bool
-- | Deprecated alias for isBound.
-- | Deprecated: use isBound
sIsBound :: Socket -> IO Bool
-- | Deprecated alias for isListening.
-- | Deprecated: use isListening
sIsListening :: Socket -> IO Bool
-- | Deprecated alias for isReadable.
-- | Deprecated: use isReadable
sIsReadable :: Socket -> IO Bool
-- | Deprecated alias for isWritable.
-- | Deprecated: use isWritable
sIsWritable :: Socket -> IO Bool
packFamily :: Family -> CInt
unpackFamily :: CInt -> Family
packSocketType :: SocketType -> CInt
instance GHC.Show.Show Network.Socket.NameInfoFlag
instance GHC.Read.Read Network.Socket.NameInfoFlag
instance GHC.Classes.Eq Network.Socket.NameInfoFlag
instance GHC.Show.Show Network.Socket.AddrInfo
instance GHC.Classes.Eq Network.Socket.AddrInfo
instance GHC.Show.Show Network.Socket.AddrInfoFlag
instance GHC.Read.Read Network.Socket.AddrInfoFlag
instance GHC.Classes.Eq Network.Socket.AddrInfoFlag
instance GHC.Show.Show Network.Socket.SocketOption
instance GHC.Show.Show Network.Socket.Types.SockAddr
instance Foreign.Storable.Storable Network.Socket.AddrInfo
-- | This module provides access to the BSD socket interface. This
-- module is generally more efficient than the String based
-- network functions in Socket. For detailed documentation,
-- consult your favorite POSIX socket reference. All functions
-- communicate failures by converting the error number to IOError.
--
-- This module is made to be imported with Socket like so:
--
-- -- import Network.Socket hiding (send, sendTo, recv, recvFrom) -- import Network.Socket.ByteString --module Network.Socket.ByteString -- | Send data to the socket. The socket must be connected to a remote -- socket. Returns the number of bytes sent. Applications are responsible -- for ensuring that all data has been sent. -- -- Sending data to closed socket may lead to undefined behaviour. send :: Socket -> ByteString -> IO Int -- | Send data to the socket. The socket must be connected to a remote -- socket. Unlike send, this function continues to send data until -- either all data has been sent or an error occurs. On error, an -- exception is raised, and there is no way to determine how much data, -- if any, was successfully sent. -- -- Sending data to closed socket may lead to undefined behaviour. sendAll :: Socket -> ByteString -> IO () -- | Send data to the socket. The recipient can be specified explicitly, so -- the socket need not be in a connected state. Returns the number of -- bytes sent. Applications are responsible for ensuring that all data -- has been sent. -- -- Sending data to closed socket may lead to undefined behaviour. sendTo :: Socket -> ByteString -> SockAddr -> IO Int -- | Send data to the socket. The recipient can be specified explicitly, so -- the socket need not be in a connected state. Unlike sendTo, -- this function continues to send data until either all data has been -- sent or an error occurs. On error, an exception is raised, and there -- is no way to determine how much data, if any, was successfully sent. -- -- Sending data to closed socket may lead to undefined behaviour. sendAllTo :: Socket -> ByteString -> SockAddr -> IO () -- | Send data to the socket. The socket must be in a connected state. The -- data is sent as if the parts have been concatenated. This function -- continues to send data until either all data has been sent or an error -- occurs. On error, an exception is raised, and there is no way to -- determine how much data, if any, was successfully sent. -- -- Sending data to closed socket may lead to undefined behaviour. sendMany :: Socket -> [ByteString] -> IO () -- | Send data to the socket. The recipient can be specified explicitly, so -- the socket need not be in a connected state. The data is sent as if -- the parts have been concatenated. This function continues to send data -- until either all data has been sent or an error occurs. On error, an -- exception is raised, and there is no way to determine how much data, -- if any, was successfully sent. -- -- Sending data to closed socket may lead to undefined behaviour. sendManyTo :: Socket -> [ByteString] -> SockAddr -> IO () -- | Receive data from the socket. The socket must be in a connected state. -- This function may return fewer bytes than specified. If the message is -- longer than the specified length, it may be discarded depending on the -- type of socket. This function may block until a message arrives. -- -- Considering 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. -- -- Receiving data from closed socket may lead to undefined behaviour. recv :: Socket -> Int -> IO ByteString -- | Receive data from the socket. The socket need not be in a connected -- state. Returns (bytes, address) where bytes is a -- ByteString representing the data received and address -- is a SockAddr representing the address of the sending socket. -- -- Receiving data from closed socket may lead to undefined behaviour. recvFrom :: Socket -> Int -> IO (ByteString, SockAddr) -- | This module provides access to the BSD socket interface. This -- module is generally more efficient than the String based -- network functions in Socket. For detailed documentation, -- consult your favorite POSIX socket reference. All functions -- communicate failures by converting the error number to IOError. -- -- This module is made to be imported with Socket like so: -- --
-- import Network.Socket hiding (send, sendTo, recv, recvFrom) -- import Network.Socket.ByteString.Lazy -- import Prelude hiding (getContents) --module Network.Socket.ByteString.Lazy send :: Socket -> ByteString -> IO Int64 sendAll :: Socket -> ByteString -> IO () -- | Receive data from the socket. The socket must be in a connected state. -- Data is received on demand, in chunks; each chunk will be sized to -- reflect the amount of data received by individual recv calls. -- -- All remaining data from the socket is consumed. When there is no more -- data to be received, the receiving side of the socket is shut down. If -- there is an error and an exception is thrown, the socket is not shut -- down. getContents :: Socket -> IO ByteString -- | Receive data from the socket. The socket must be in a connected state. -- This function may return fewer bytes than specified. If the received -- data is longer than the specified length, it may be 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 -- ByteString. -- -- Receiving data from closed socket may lead to undefined behaviour. recv :: Socket -> Int64 -> IO ByteString -- | The Network.BSD module defines Haskell bindings to network -- programming functionality provided by BSD Unix derivatives. module Network.BSD -- | Either a host name e.g., "haskell.org" or a numeric host -- address string consisting of a dotted decimal IPv4 address or an IPv6 -- address e.g., "192.168.0.1". type HostName = String -- | Calling getHostName returns the standard host name for the current -- processor, as set at boot time. getHostName :: IO HostName data HostEntry HostEntry :: HostName -> [HostName] -> Family -> [HostAddress] -> HostEntry [hostName] :: HostEntry -> HostName [hostAliases] :: HostEntry -> [HostName] [hostFamily] :: HostEntry -> Family [hostAddresses] :: HostEntry -> [HostAddress] -- | Resolve a HostName to IPv4 address. getHostByName :: HostName -> IO HostEntry -- | Get a HostEntry corresponding to the given address and family. -- Note that only IPv4 is currently supported. getHostByAddr :: Family -> HostAddress -> IO HostEntry hostAddress :: HostEntry -> HostAddress getHostEntries :: Bool -> IO [HostEntry] setHostEntry :: Bool -> IO () getHostEntry :: IO HostEntry endHostEntry :: IO () data ServiceEntry ServiceEntry :: ServiceName -> [ServiceName] -> PortNumber -> ProtocolName -> ServiceEntry [serviceName] :: ServiceEntry -> ServiceName [serviceAliases] :: ServiceEntry -> [ServiceName] [servicePort] :: ServiceEntry -> PortNumber [serviceProtocol] :: ServiceEntry -> ProtocolName type ServiceName = String -- | Get service by name. getServiceByName :: ServiceName -> ProtocolName -> IO ServiceEntry -- | Get the service given a PortNumber and ProtocolName. getServiceByPort :: PortNumber -> ProtocolName -> IO ServiceEntry -- | Get the PortNumber corresponding to the ServiceName. getServicePortNumber :: ServiceName -> IO PortNumber getServiceEntries :: Bool -> IO [ServiceEntry] getServiceEntry :: IO ServiceEntry setServiceEntry :: Bool -> IO () endServiceEntry :: IO () type ProtocolName = String type ProtocolNumber = CInt data ProtocolEntry ProtocolEntry :: ProtocolName -> [ProtocolName] -> ProtocolNumber -> ProtocolEntry [protoName] :: ProtocolEntry -> ProtocolName [protoAliases] :: ProtocolEntry -> [ProtocolName] [protoNumber] :: ProtocolEntry -> ProtocolNumber getProtocolByName :: ProtocolName -> IO ProtocolEntry getProtocolByNumber :: ProtocolNumber -> IO ProtocolEntry getProtocolNumber :: ProtocolName -> IO ProtocolNumber -- | This is the default protocol for a given service. defaultProtocol :: ProtocolNumber getProtocolEntries :: Bool -> IO [ProtocolEntry] setProtocolEntry :: Bool -> IO () getProtocolEntry :: IO ProtocolEntry endProtocolEntry :: IO () -- | Use the Num instance (i.e. use a literal) to create a -- PortNumber value with the correct network-byte-ordering. You -- should not use the PortNum constructor. It will be removed in the next -- release. -- --
-- >>> 1 :: PortNumber -- 1 -- -- >>> read "1" :: PortNumber -- 1 --data PortNumber type NetworkName = String type NetworkAddr = CULong data NetworkEntry NetworkEntry :: NetworkName -> [NetworkName] -> Family -> NetworkAddr -> NetworkEntry [networkName] :: NetworkEntry -> NetworkName [networkAliases] :: NetworkEntry -> [NetworkName] [networkFamily] :: NetworkEntry -> Family [networkAddress] :: NetworkEntry -> NetworkAddr getNetworkByName :: NetworkName -> IO NetworkEntry getNetworkByAddr :: NetworkAddr -> Family -> IO NetworkEntry -- | Get the list of network entries. getNetworkEntries :: Bool -> IO [NetworkEntry] -- | Open the network name database. The parameter specifies whether a -- connection is maintained open between various networkEntry calls setNetworkEntry :: Bool -> IO () getNetworkEntry :: IO NetworkEntry -- | Close the connection to the network name database. endNetworkEntry :: IO () ifNameToIndex :: String -> IO (Maybe Int) instance GHC.Show.Show Network.BSD.NetworkEntry instance GHC.Read.Read Network.BSD.NetworkEntry instance GHC.Show.Show Network.BSD.HostEntry instance GHC.Read.Read Network.BSD.HostEntry instance GHC.Show.Show Network.BSD.ProtocolEntry instance GHC.Read.Read Network.BSD.ProtocolEntry instance GHC.Show.Show Network.BSD.ServiceEntry instance Foreign.Storable.Storable Network.BSD.ServiceEntry instance Foreign.Storable.Storable Network.BSD.ProtocolEntry instance Foreign.Storable.Storable Network.BSD.HostEntry instance Foreign.Storable.Storable Network.BSD.NetworkEntry -- | This module is kept for backwards-compatibility. New users are -- encouraged to use Network.Socket instead. -- -- Network was intended as a "higher-level" interface to -- networking facilities, and only supports TCP. module Network -- | Represents a socket. The fields are, respectively: -- --
-- >>> 1 :: PortNumber -- 1 -- -- >>> read "1" :: PortNumber -- 1 --data PortNumber -- | With older versions of the network library on Windows -- operating systems, the networking subsystem must be initialised using -- withSocketsDo before any networking operations can be used. eg. -- --
-- main = withSocketsDo $ do {...}
--
--
-- It is fine to nest calls to withSocketsDo, and to perform
-- networking operations after withSocketsDo has returned.
--
-- In newer versions of the network library it is only necessary
-- to call withSocketsDo if you are calling the MkSocket
-- constructor directly. However, for compatibility with older versions
-- on Windows, it is good practice to always call withSocketsDo
-- (it's very cheap).
withSocketsDo :: IO a -> IO a
-- | Creates the server side socket which has been bound to the specified
-- port.
--
-- maxListenQueue (typically 128) is specified to the listen
-- queue. This is good enough for normal network servers but is too small
-- for high performance servers.
--
-- To avoid the "Address already in use" problems, the ReuseAddr
-- socket option is set on the listening socket.
--
-- If available, the IPv6Only socket option is set to 0 so that
-- both IPv4 and IPv6 can be accepted with this socket.
--
-- If you don't like the behavior above, please use the lower level
-- listen instead.
listenOn :: PortID -> IO Socket
-- | Accept a connection on a socket created by listenOn. Normal I/O
-- operations (see System.IO) can be used on the Handle
-- returned to communicate with the client. 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't be a problem, though).
-- When using AF_UNIX, HostName will be set to the path of the socket and
-- PortNumber to -1.
accept :: Socket -> IO (Handle, HostName, PortNumber)
-- | Close the socket. Sending data to or receiving data from closed socket
-- may lead to undefined behaviour.
sClose :: Socket -> IO ()
-- | Calling connectTo creates a client side socket which is
-- connected to the given host and port. The Protocol and socket type is
-- derived from the given port identifier. If a port number is given then
-- the result is always an internet family Stream socket.
connectTo :: HostName -> PortID -> IO Handle
sendTo :: HostName -> PortID -> String -> IO ()
recvFrom :: HostName -> PortID -> IO String
-- | Returns the PortID associated with a given socket.
socketPort :: Socket -> IO PortID
instance GHC.Classes.Eq Network.PortID
instance GHC.Show.Show Network.PortID