Copyright | Will Thompson Iñaki García Etxebarria and Jonas Platte |
---|---|
License | LGPL-2.1 |
Maintainer | Iñaki García Etxebarria (garetxe@gmail.com) |
Safe Haskell | None |
Language | Haskell2010 |
- newtype Socket = Socket (ManagedPtr Socket)
- class GObject o => IsSocket o
- toSocket :: (MonadIO m, IsSocket o) => o -> m Socket
- noSocket :: Maybe Socket
- socketConnectAsync :: (HasCallStack, MonadIO m, IsSocket a, IsCancellable b) => a -> Maybe b -> SocketCallback -> m ()
- socketConnectSync :: (HasCallStack, MonadIO m, IsSocket a, IsCancellable b) => a -> Maybe b -> m Word32
- socketDisconnect :: (HasCallStack, MonadIO m, IsSocket a) => a -> m ()
- socketGetFd :: (HasCallStack, MonadIO m, IsSocket a) => a -> m Int32
- socketGetLocalAddress :: (HasCallStack, MonadIO m, IsSocket a) => a -> m Address
- socketGetRemoteAddress :: (HasCallStack, MonadIO m, IsSocket a) => a -> m Address
- socketIsConnected :: (HasCallStack, MonadIO m, IsSocket a) => a -> m Bool
- socketIsSsl :: (HasCallStack, MonadIO m, IsSocket a) => a -> m Bool
- socketListen :: (HasCallStack, MonadIO m, IsSocket a) => a -> m Bool
- socketRead :: (HasCallStack, MonadIO m, IsSocket a, IsCancellable b) => a -> ByteString -> Maybe b -> m (SocketIOStatus, Word64)
- socketReadUntil :: (HasCallStack, MonadIO m, IsSocket a, IsCancellable b) => a -> ByteString -> Ptr () -> Word64 -> Bool -> Maybe b -> m (SocketIOStatus, Word64)
- socketStartProxySsl :: (HasCallStack, MonadIO m, IsSocket a, IsCancellable b) => a -> Text -> Maybe b -> m Bool
- socketStartSsl :: (HasCallStack, MonadIO m, IsSocket a, IsCancellable b) => a -> Maybe b -> m Bool
- socketWrite :: (HasCallStack, MonadIO m, IsSocket a, IsCancellable b) => a -> ByteString -> Maybe b -> m (SocketIOStatus, Word64)
- constructSocketAsyncContext :: IsSocket o => Ptr () -> IO (GValueConstruct o)
- getSocketAsyncContext :: (MonadIO m, IsSocket o) => o -> m (Ptr ())
- constructSocketFd :: IsSocket o => Int32 -> IO (GValueConstruct o)
- getSocketFd :: (MonadIO m, IsSocket o) => o -> m Int32
- constructSocketGsocket :: (IsSocket o, IsSocket a) => a -> IO (GValueConstruct o)
- constructSocketIostream :: (IsSocket o, IsIOStream a) => a -> IO (GValueConstruct o)
- constructSocketIpv6Only :: IsSocket o => Bool -> IO (GValueConstruct o)
- getSocketIpv6Only :: (MonadIO m, IsSocket o) => o -> m Bool
- setSocketIpv6Only :: (MonadIO m, IsSocket o) => o -> Bool -> m ()
- getSocketIsServer :: (MonadIO m, IsSocket o) => o -> m Bool
- constructSocketLocalAddress :: (IsSocket o, IsAddress a) => a -> IO (GValueConstruct o)
- getSocketLocalAddress :: (MonadIO m, IsSocket o) => o -> m Address
- constructSocketNonBlocking :: IsSocket o => Bool -> IO (GValueConstruct o)
- getSocketNonBlocking :: (MonadIO m, IsSocket o) => o -> m Bool
- setSocketNonBlocking :: (MonadIO m, IsSocket o) => o -> Bool -> m ()
- constructSocketRemoteAddress :: (IsSocket o, IsAddress a) => a -> IO (GValueConstruct o)
- getSocketRemoteAddress :: (MonadIO m, IsSocket o) => o -> m Address
- constructSocketSslCreds :: IsSocket o => Ptr () -> IO (GValueConstruct o)
- getSocketSslCreds :: (MonadIO m, IsSocket o) => o -> m (Ptr ())
- setSocketSslCreds :: (MonadIO m, IsSocket o) => o -> Ptr () -> m ()
- constructSocketSslFallback :: IsSocket o => Bool -> IO (GValueConstruct o)
- getSocketSslFallback :: (MonadIO m, IsSocket o) => o -> m Bool
- constructSocketSslStrict :: IsSocket o => Bool -> IO (GValueConstruct o)
- getSocketSslStrict :: (MonadIO m, IsSocket o) => o -> m Bool
- constructSocketTimeout :: IsSocket o => Word32 -> IO (GValueConstruct o)
- getSocketTimeout :: (MonadIO m, IsSocket o) => o -> m Word32
- setSocketTimeout :: (MonadIO m, IsSocket o) => o -> Word32 -> m ()
- getSocketTlsCertificate :: (MonadIO m, IsSocket o) => o -> m (Maybe TlsCertificate)
- getSocketTlsErrors :: (MonadIO m, IsSocket o) => o -> m [TlsCertificateFlags]
- getSocketTrustedCertificate :: (MonadIO m, IsSocket o) => o -> m Bool
- constructSocketUseThreadContext :: IsSocket o => Bool -> IO (GValueConstruct o)
- getSocketUseThreadContext :: (MonadIO m, IsSocket o) => o -> m Bool
- type C_SocketDisconnectedCallback = Ptr () -> Ptr () -> IO ()
- type SocketDisconnectedCallback = IO ()
- afterSocketDisconnected :: (IsSocket a, MonadIO m) => a -> SocketDisconnectedCallback -> m SignalHandlerId
- genClosure_SocketDisconnected :: SocketDisconnectedCallback -> IO Closure
- mk_SocketDisconnectedCallback :: C_SocketDisconnectedCallback -> IO (FunPtr C_SocketDisconnectedCallback)
- noSocketDisconnectedCallback :: Maybe SocketDisconnectedCallback
- onSocketDisconnected :: (IsSocket a, MonadIO m) => a -> SocketDisconnectedCallback -> m SignalHandlerId
- wrap_SocketDisconnectedCallback :: SocketDisconnectedCallback -> Ptr () -> Ptr () -> IO ()
- type C_SocketEventCallback = Ptr () -> CUInt -> Ptr IOStream -> Ptr () -> IO ()
- type SocketEventCallback = SocketClientEvent -> IOStream -> IO ()
- afterSocketEvent :: (IsSocket a, MonadIO m) => a -> SocketEventCallback -> m SignalHandlerId
- genClosure_SocketEvent :: SocketEventCallback -> IO Closure
- mk_SocketEventCallback :: C_SocketEventCallback -> IO (FunPtr C_SocketEventCallback)
- noSocketEventCallback :: Maybe SocketEventCallback
- onSocketEvent :: (IsSocket a, MonadIO m) => a -> SocketEventCallback -> m SignalHandlerId
- wrap_SocketEventCallback :: SocketEventCallback -> Ptr () -> CUInt -> Ptr IOStream -> Ptr () -> IO ()
- type C_SocketNewConnectionCallback = Ptr () -> Ptr Socket -> Ptr () -> IO ()
- type SocketNewConnectionCallback = Socket -> IO ()
- afterSocketNewConnection :: (IsSocket a, MonadIO m) => a -> SocketNewConnectionCallback -> m SignalHandlerId
- genClosure_SocketNewConnection :: SocketNewConnectionCallback -> IO Closure
- mk_SocketNewConnectionCallback :: C_SocketNewConnectionCallback -> IO (FunPtr C_SocketNewConnectionCallback)
- noSocketNewConnectionCallback :: Maybe SocketNewConnectionCallback
- onSocketNewConnection :: (IsSocket a, MonadIO m) => a -> SocketNewConnectionCallback -> m SignalHandlerId
- wrap_SocketNewConnectionCallback :: SocketNewConnectionCallback -> Ptr () -> Ptr Socket -> Ptr () -> IO ()
- type C_SocketReadableCallback = Ptr () -> Ptr () -> IO ()
- type SocketReadableCallback = IO ()
- afterSocketReadable :: (IsSocket a, MonadIO m) => a -> SocketReadableCallback -> m SignalHandlerId
- genClosure_SocketReadable :: SocketReadableCallback -> IO Closure
- mk_SocketReadableCallback :: C_SocketReadableCallback -> IO (FunPtr C_SocketReadableCallback)
- noSocketReadableCallback :: Maybe SocketReadableCallback
- onSocketReadable :: (IsSocket a, MonadIO m) => a -> SocketReadableCallback -> m SignalHandlerId
- wrap_SocketReadableCallback :: SocketReadableCallback -> Ptr () -> Ptr () -> IO ()
- type C_SocketWritableCallback = Ptr () -> Ptr () -> IO ()
- type SocketWritableCallback = IO ()
- afterSocketWritable :: (IsSocket a, MonadIO m) => a -> SocketWritableCallback -> m SignalHandlerId
- genClosure_SocketWritable :: SocketWritableCallback -> IO Closure
- mk_SocketWritableCallback :: C_SocketWritableCallback -> IO (FunPtr C_SocketWritableCallback)
- noSocketWritableCallback :: Maybe SocketWritableCallback
- onSocketWritable :: (IsSocket a, MonadIO m) => a -> SocketWritableCallback -> m SignalHandlerId
- wrap_SocketWritableCallback :: SocketWritableCallback -> Ptr () -> Ptr () -> IO ()
Exported types
Methods
connectAsync
:: (HasCallStack, MonadIO m, IsSocket a, IsCancellable b) | |
=> a |
|
-> Maybe b |
|
-> SocketCallback |
|
-> m () |
Begins asynchronously connecting to sock
's remote address. The
socket will call callback
when it succeeds or fails (but not
before returning from this function).
If cancellable
is non-Nothing
, it can be used to cancel the
connection. callback
will still be invoked in this case, with a
status of StatusCancelled
.
connectSync
:: (HasCallStack, MonadIO m, IsSocket a, IsCancellable b) | |
=> a |
|
-> Maybe b |
|
-> m Word32 | Returns: a success or failure code. |
Attempt to synchronously connect sock
to its remote address.
If cancellable
is non-Nothing
, it can be used to cancel the
connection, in which case socketConnectSync
will return
StatusCancelled
.
disconnect
:: (HasCallStack, MonadIO m, IsSocket a) | |
=> a |
|
-> m () |
Disconnects sock
. Any further read or write attempts on it will
fail.
getFd
:: (HasCallStack, MonadIO m, IsSocket a) | |
=> a |
|
-> m Int32 | Returns: |
Gets sock
's underlying file descriptor.
Note that fiddling with the file descriptor may break the
Socket
.
getLocalAddress
socketGetLocalAddress Source #
Returns the Address
corresponding to the local end of sock
.
Calling this method on an unconnected socket is considered to be an error, and produces undefined results.
getRemoteAddress
socketGetRemoteAddress Source #
Returns the Address
corresponding to the remote end of sock
.
Calling this method on an unconnected socket is considered to be an error, and produces undefined results.
isConnected
Tests if sock
is connected to another host
isSsl
:: (HasCallStack, MonadIO m, IsSocket a) | |
=> a |
|
-> m Bool | Returns: |
Tests if sock
is doing (or has attempted to do) SSL.
listen
:: (HasCallStack, MonadIO m, IsSocket a) | |
=> a |
|
-> m Bool | Returns: whether or not |
Makes sock
start listening on its local address. When connections
come in, sock
will emit Socket
::new_connection
.
read
:: (HasCallStack, MonadIO m, IsSocket a, IsCancellable b) | |
=> a |
|
-> ByteString |
|
-> Maybe b |
|
-> m (SocketIOStatus, Word64) | Returns: a |
Attempts to read up to len
bytes from sock
into buffer
. If some
data is successfully read, socketRead
will return
SocketIOStatusOk
, and *nread
will contain the number of bytes
actually read (which may be less than len
).
If sock
is non-blocking, and no data is available, the return
value will be SocketIOStatusWouldBlock
. In this case, the caller
can connect to the Socket
::readable
signal to know when there
is more data to read. (NB: You MUST read all available data off the
socket first. Socket
::readable
is only emitted after
socketRead
returns SocketIOStatusWouldBlock
, and it is only
emitted once. See the documentation for Socket
:non-blocking
.)
readUntil
:: (HasCallStack, MonadIO m, IsSocket a, IsCancellable b) | |
=> a |
|
-> ByteString |
|
-> Ptr () |
|
-> Word64 |
|
-> Bool |
|
-> Maybe b |
|
-> m (SocketIOStatus, Word64) | Returns: as for |
Like socketRead
, but reads no further than the first
occurrence of boundary
. (If the boundary is found, it will be
included in the returned data, and *gotBoundary
will be set to
True
.) Any data after the boundary will returned in future reads.
socketReadUntil
will almost always return fewer than len
bytes: if the boundary is found, then it will only return the bytes
up until the end of the boundary, and if the boundary is not found,
then it will leave the last <literal>(boundary_len - 1)</literal>
bytes in its internal buffer, in case they form the start of the
boundary string. Thus, len
normally needs to be at least 1 byte
longer than boundaryLen
if you want to make any progress at all.
startProxySsl
:: (HasCallStack, MonadIO m, IsSocket a, IsCancellable b) | |
=> a |
|
-> Text |
|
-> Maybe b |
|
-> m Bool | Returns: success or failure |
Starts using SSL on socket
, expecting to find a host named
sslHost
.
startSsl
:: (HasCallStack, MonadIO m, IsSocket a, IsCancellable b) | |
=> a |
|
-> Maybe b |
|
-> m Bool | Returns: success or failure |
Starts using SSL on socket
.
write
:: (HasCallStack, MonadIO m, IsSocket a, IsCancellable b) | |
=> a |
|
-> ByteString |
|
-> Maybe b |
|
-> m (SocketIOStatus, Word64) | Returns: a |
Attempts to write len
bytes from buffer
to sock
. If some data is
successfully written, the return status will be SocketIOStatusOk
,
and *nwrote
will contain the number of bytes actually written
(which may be less than len
).
If sock
is non-blocking, and no data could be written right away,
the return value will be SocketIOStatusWouldBlock
. In this case,
the caller can connect to the Socket
::writable
signal to know
when more data can be written. (NB: Socket
::writable
is only
emitted after socketWrite
returns SocketIOStatusWouldBlock
,
and it is only emitted once. See the documentation for
Socket
:non-blocking
.)
Properties
asyncContext
constructSocketAsyncContext :: IsSocket o => Ptr () -> IO (GValueConstruct o) Source #
fd
constructSocketFd :: IsSocket o => Int32 -> IO (GValueConstruct o) Source #
gsocket
constructSocketGsocket :: (IsSocket o, IsSocket a) => a -> IO (GValueConstruct o) Source #
iostream
constructSocketIostream :: (IsSocket o, IsIOStream a) => a -> IO (GValueConstruct o) Source #
ipv6Only
constructSocketIpv6Only :: IsSocket o => Bool -> IO (GValueConstruct o) Source #
isServer
localAddress
constructSocketLocalAddress :: (IsSocket o, IsAddress a) => a -> IO (GValueConstruct o) Source #
nonBlocking
constructSocketNonBlocking :: IsSocket o => Bool -> IO (GValueConstruct o) Source #
remoteAddress
constructSocketRemoteAddress :: (IsSocket o, IsAddress a) => a -> IO (GValueConstruct o) Source #
sslCreds
constructSocketSslCreds :: IsSocket o => Ptr () -> IO (GValueConstruct o) Source #
sslFallback
constructSocketSslFallback :: IsSocket o => Bool -> IO (GValueConstruct o) Source #
sslStrict
constructSocketSslStrict :: IsSocket o => Bool -> IO (GValueConstruct o) Source #
timeout
constructSocketTimeout :: IsSocket o => Word32 -> IO (GValueConstruct o) Source #
tlsCertificate
getSocketTlsCertificate :: (MonadIO m, IsSocket o) => o -> m (Maybe TlsCertificate) Source #
tlsErrors
getSocketTlsErrors :: (MonadIO m, IsSocket o) => o -> m [TlsCertificateFlags] Source #
trustedCertificate
useThreadContext
constructSocketUseThreadContext :: IsSocket o => Bool -> IO (GValueConstruct o) Source #
Signals
disconnected
type SocketDisconnectedCallback = IO () Source #
afterSocketDisconnected :: (IsSocket a, MonadIO m) => a -> SocketDisconnectedCallback -> m SignalHandlerId Source #
mk_SocketDisconnectedCallback :: C_SocketDisconnectedCallback -> IO (FunPtr C_SocketDisconnectedCallback) Source #
onSocketDisconnected :: (IsSocket a, MonadIO m) => a -> SocketDisconnectedCallback -> m SignalHandlerId Source #
wrap_SocketDisconnectedCallback :: SocketDisconnectedCallback -> Ptr () -> Ptr () -> IO () Source #
event
type SocketEventCallback = SocketClientEvent -> IOStream -> IO () Source #
afterSocketEvent :: (IsSocket a, MonadIO m) => a -> SocketEventCallback -> m SignalHandlerId Source #
onSocketEvent :: (IsSocket a, MonadIO m) => a -> SocketEventCallback -> m SignalHandlerId Source #
wrap_SocketEventCallback :: SocketEventCallback -> Ptr () -> CUInt -> Ptr IOStream -> Ptr () -> IO () Source #
newConnection
type SocketNewConnectionCallback = Socket -> IO () Source #
afterSocketNewConnection :: (IsSocket a, MonadIO m) => a -> SocketNewConnectionCallback -> m SignalHandlerId Source #
mk_SocketNewConnectionCallback :: C_SocketNewConnectionCallback -> IO (FunPtr C_SocketNewConnectionCallback) Source #
onSocketNewConnection :: (IsSocket a, MonadIO m) => a -> SocketNewConnectionCallback -> m SignalHandlerId Source #
wrap_SocketNewConnectionCallback :: SocketNewConnectionCallback -> Ptr () -> Ptr Socket -> Ptr () -> IO () Source #
readable
type SocketReadableCallback = IO () Source #
afterSocketReadable :: (IsSocket a, MonadIO m) => a -> SocketReadableCallback -> m SignalHandlerId Source #
mk_SocketReadableCallback :: C_SocketReadableCallback -> IO (FunPtr C_SocketReadableCallback) Source #
onSocketReadable :: (IsSocket a, MonadIO m) => a -> SocketReadableCallback -> m SignalHandlerId Source #
wrap_SocketReadableCallback :: SocketReadableCallback -> Ptr () -> Ptr () -> IO () Source #
writable
type SocketWritableCallback = IO () Source #
afterSocketWritable :: (IsSocket a, MonadIO m) => a -> SocketWritableCallback -> m SignalHandlerId Source #
mk_SocketWritableCallback :: C_SocketWritableCallback -> IO (FunPtr C_SocketWritableCallback) Source #
onSocketWritable :: (IsSocket a, MonadIO m) => a -> SocketWritableCallback -> m SignalHandlerId Source #
wrap_SocketWritableCallback :: SocketWritableCallback -> Ptr () -> Ptr () -> IO () Source #