| network-2.1.0.0: Networking-related facilities | Source code | Contents | Index

Network.Socket |

Portability | portable
Stability | provisional
Maintainer | libraries@haskell.org

Contents

Types
Address operations
Socket Operations
  Predicates on sockets
Socket options
File descriptor transmission
Special Constants
Initialisation
Very low level operations
Internal

Description
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.

Synopsis

data Socket = MkSocket CInt Family SocketType ProtocolNumber (MVar SocketStatus)

data Family

= AF_UNSPEC
| AF_UNIX
| AF_INET
| AF_INET6
| AF_IMPLINK
| AF_PUP
| AF_CHAOS
| AF_NS
| AF_ECMA
| AF_DATAKIT
| AF_CCITT
| AF_SNA
| AF_DECnet
| AF_DLI
| AF_LAT
| AF_HYLINK
| AF_APPLETALK
| AF_NETBIOS
| AF_ISO
| AF_OSI
| AF_IPX

data SocketType

= NoSocketType
| Stream
| Datagram
| Raw
| RDM
| SeqPacket

data SockAddr = SockAddrInet PortNumber HostAddress

data SocketStatus

= NotConnected
| Bound
| Listening
| Connected
| ConvertedToHandle

type HostAddress = Word32

data ShutdownCmd

= ShutdownReceive
| ShutdownSend
| ShutdownBoth

type ProtocolNumber = CInt
defaultProtocol :: ProtocolNumber
newtype PortNumber = PortNum Word16
type HostName = String
type ServiceName = String
socket :: Family -> SocketType -> ProtocolNumber -> IO Socket
connect :: Socket -> SockAddr -> IO ()
bindSocket :: Socket -> SockAddr -> IO ()
listen :: Socket -> Int -> IO ()
accept :: Socket -> IO (Socket, SockAddr)
getPeerName :: Socket -> IO SockAddr
getSocketName :: Socket -> IO SockAddr
socketPort :: Socket -> IO PortNumber
socketToHandle :: Socket -> IOMode -> IO Handle
sendTo :: Socket -> String -> SockAddr -> IO Int
sendBufTo :: Socket -> Ptr a -> Int -> SockAddr -> IO Int
recvFrom :: Socket -> Int -> IO (String, Int, SockAddr)
recvBufFrom :: Socket -> Ptr a -> Int -> IO (Int, SockAddr)
send :: Socket -> String -> IO Int
recv :: Socket -> Int -> IO String
recvLen :: Socket -> Int -> IO (String, Int)
inet_addr :: String -> IO HostAddress
inet_ntoa :: HostAddress -> IO String
shutdown :: Socket -> ShutdownCmd -> IO ()
sClose :: Socket -> IO ()
sIsConnected :: Socket -> IO Bool
sIsBound :: Socket -> IO Bool
sIsListening :: Socket -> IO Bool
sIsReadable :: Socket -> IO Bool
sIsWritable :: Socket -> IO Bool

data SocketOption

= DummySocketOption__
| Debug
| ReuseAddr
| Type
| SoError
| DontRoute
| Broadcast
| SendBuffer
| RecvBuffer
| KeepAlive
| OOBInline
| NoDelay
| Linger
| RecvLowWater
| SendLowWater
| RecvTimeOut
| SendTimeOut
| UseLoopBack

getSocketOption :: Socket -> SocketOption -> IO Int
setSocketOption :: Socket -> SocketOption -> Int -> IO ()
aNY_PORT :: PortNumber
iNADDR_ANY :: HostAddress
sOMAXCONN :: Int
sOL_SOCKET :: Int
maxListenQueue :: Int
withSocketsDo :: IO a -> IO a
fdSocket :: Socket -> CInt
mkSocket :: CInt -> Family -> SocketType -> ProtocolNumber -> SocketStatus -> IO Socket
packFamily :: Family -> CInt
unpackFamily :: CInt -> Family
packSocketType :: SocketType -> CInt
throwSocketErrorIfMinus1_ :: Num a => String -> IO a -> IO ()

Types

data Socket | Source

Constructors

MkSocket CInt Family SocketType ProtocolNumber (MVar SocketStatus) |

Instances

Eq Socket
Show Socket
Typeable Socket

data Family | Source

Address Families. This data type might have different constructors depending on what is supported by the operating system.
Constructors

AF_UNSPEC |
AF_UNIX |
AF_INET |
AF_INET6 |
AF_IMPLINK |
AF_PUP |
AF_CHAOS |
AF_NS |
AF_ECMA |
AF_DATAKIT |
AF_CCITT |
AF_SNA |
AF_DECnet |
AF_DLI |
AF_LAT |
AF_HYLINK |
AF_APPLETALK |
AF_NETBIOS |
AF_ISO |
AF_OSI |
AF_IPX |

Instances

Eq Family
Ord Family
Read Family
Show Family

data SocketType | Source

Socket Types. This data type might have different constructors depending on what is supported by the operating system.
Constructors

NoSocketType |
Stream |
Datagram |
Raw |
RDM |
SeqPacket |

Instances

Eq SocketType
Ord SocketType
Read SocketType
Show SocketType
Typeable SocketType

data SockAddr | Source

Constructors

SockAddrInet PortNumber HostAddress |

Instances

Eq SockAddr
Show SockAddr
Typeable SockAddr

data SocketStatus | Source

Constructors

NotConnected |
Bound |
Listening |
Connected |
ConvertedToHandle |

Instances

Eq SocketStatus
Show SocketStatus
Typeable SocketStatus

type HostAddress = Word32 | Source

data ShutdownCmd | Source

Constructors

ShutdownReceive |
ShutdownSend |
ShutdownBoth |

Instances

Typeable ShutdownCmd

type ProtocolNumber = CInt | Source

defaultProtocol :: ProtocolNumber | Source

This is the default protocol for a given service.

newtype PortNumber | Source

Constructors

PortNum Word16 |

Instances

Enum PortNumber
Eq PortNumber
Integral PortNumber
Num PortNumber
Ord PortNumber
Real PortNumber
Show PortNumber
Storable PortNumber
Typeable PortNumber

Address operations

type HostName = String | Source

type ServiceName = String | Source

Socket Operations

socket :: Family -> SocketType -> ProtocolNumber -> IO Socket | Source

connect :: Socket -> SockAddr -> IO () | Source

bindSocket :: Socket -> SockAddr -> IO () | Source

listen :: Socket -> Int -> IO () | Source

accept :: Socket -> IO (Socket, SockAddr) | Source

getPeerName :: Socket -> IO SockAddr | Source

getSocketName :: Socket -> IO SockAddr | Source

socketPort :: Socket -> IO PortNumber | Source

socketToHandle :: Socket -> IOMode -> IO Handle | Source

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`.

sendTo :: Socket -> String -> SockAddr -> IO Int | Source

sendBufTo :: Socket -> Ptr a -> Int -> SockAddr -> IO Int | Source

recvFrom :: Socket -> Int -> IO (String, Int, SockAddr) | Source

recvBufFrom :: Socket -> Ptr a -> Int -> IO (Int, SockAddr) | Source

send :: Socket -> String -> IO Int | Source

recv :: Socket -> Int -> IO String | Source

recvLen :: Socket -> Int -> IO (String, Int) | Source

inet_addr :: String -> IO HostAddress | Source

inet_ntoa :: HostAddress -> IO String | Source

shutdown :: Socket -> ShutdownCmd -> IO () | Source

sClose :: Socket -> IO () | Source

Closes a socket
Predicates on sockets

sIsConnected :: Socket -> IO Bool | Source

sIsBound :: Socket -> IO Bool | Source

sIsListening :: Socket -> IO Bool | Source

sIsReadable :: Socket -> IO Bool | Source

sIsWritable :: Socket -> IO Bool | Source

Socket options

data SocketOption | Source

Constructors

DummySocketOption__ |
Debug |
ReuseAddr |
Type |
SoError |
DontRoute |
Broadcast |
SendBuffer |
RecvBuffer |
KeepAlive |
OOBInline |
NoDelay |
Linger |
RecvLowWater |
SendLowWater |
RecvTimeOut |
SendTimeOut |
UseLoopBack |

Instances

Typeable SocketOption

getSocketOption :: Socket -> SocketOption -> IO Int | Source

setSocketOption :: Socket -> SocketOption -> Int -> IO () | Source

File descriptor transmission
Special Constants

aNY_PORT :: PortNumber | Source

iNADDR_ANY :: HostAddress | Source

The IPv4 wild card address.

sOMAXCONN :: Int | Source

sOL_SOCKET :: Int | Source

maxListenQueue :: Int | Source

Initialisation

withSocketsDo :: IO a -> IO a | Source

On Windows operating systems, the networking subsystem has to be initialised using `withSocketsDo` before any networking operations can be used. eg.
     main = withSocketsDo $ do {...}
Although this is only strictly necessary on Windows platforms, it is harmless on other platforms, so for portability it is good practice to use it all the time.
Very low level operations

fdSocket :: Socket -> CInt | Source

mkSocket :: CInt -> Family -> SocketType -> ProtocolNumber -> SocketStatus -> IO Socket | Source

Internal
The following are exported ONLY for use in the BSD module and should not be used anywhere else.

packFamily :: Family -> CInt | Source

unpackFamily :: CInt -> Family | Source

packSocketType :: SocketType -> CInt | Source

throwSocketErrorIfMinus1_ :: Num a => String -> IO a -> IO () | Source

Produced by Haddock version 0.8