Roc Toolkit internal modules
Roc Toolkit: real-time audio streaming
Loading...
Searching...
No Matches
socket_ops.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2020 Roc Streaming authors
3 *
4 * This Source Code Form is subject to the terms of the Mozilla Public
5 * License, v. 2.0. If a copy of the MPL was not distributed with this
6 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
7 */
8
9//! @file roc_netio/target_posix/roc_netio/socket_ops.h
10//! @brief Socket operations.
11
12#ifndef ROC_NETIO_SOCKET_OPS_H_
13#define ROC_NETIO_SOCKET_OPS_H_
14
16#include "roc_core/stddefs.h"
17#include "roc_netio/io_error.h"
19
20namespace roc {
21namespace netio {
22
23//! Socket type.
25 SocketType_Tcp, //!< TCP socket.
26 SocketType_Udp //!< UDP socket.
27};
28
29//! Platform-specific socket handle.
30typedef int SocketHandle;
31
32//! Invalid socket handle.
34
35//! Create non-blocking socket.
37
38//! Accept incoming connection.
40 SocketHandle& new_sock,
41 address::SocketAddr& remote_address);
42
43//! Set socket options.
44bool socket_setup(SocketHandle sock, const SocketOptions& options);
45
46//! Bind socket to local address.
47bool socket_bind(SocketHandle sock, address::SocketAddr& local_address);
48
49//! Start listening for incoming connections.
50bool socket_listen(SocketHandle sock, size_t backlog);
51
52//! Initiate connecting to remote peer.
53//! @returns true if connection was successfully initiated.
54//! Sets @p completed_immediately to true if connection was established
55//! immediately and there is no need to wait for it.
57 const address::SocketAddr& remote_address,
58 bool& completed_immediately);
59
60//! Finish connecting to remote peer.
61//! @returns true if connection was successfully established.
63
64//! Try to read bytes from socket without blocking.
65//! @returns number of bytes read (>= 0) or IOError (< 0).
66ssize_t socket_try_recv(SocketHandle sock, void* buf, size_t bufsz);
67
68//! Try to write bytes to socket without blocking.
69//! @returns number of bytes written (>= 0) or IOError (< 0).
70ssize_t socket_try_send(SocketHandle sock, const void* buf, size_t bufsz);
71
72//! Try to send datagram via socket to given address, without blocking.
73//! @returns number of bytes written (>= 0) or IOError (< 0).
75 const void* buf,
76 size_t bufsz,
77 const address::SocketAddr& remote_address);
78
79//! Gracefully shutdown connection.
81
82//! Close socket.
84
85//! Close socket and send reset to remote peer.
86//! Remote peer will get error when reading from connection.
88
89} // namespace netio
90} // namespace roc
91
92#endif // ROC_NETIO_SOCKET_OPS_H_
Socket address.
Definition: socket_addr.h:25
I/O error codes.
AddrFamily
Address family.
Definition: addr_family.h:19
bool socket_shutdown(SocketHandle sock)
Gracefully shutdown connection.
bool socket_create(address::AddrFamily family, SocketType type, SocketHandle &new_sock)
Create non-blocking socket.
bool socket_listen(SocketHandle sock, size_t backlog)
Start listening for incoming connections.
int SocketHandle
Platform-specific socket handle.
Definition: socket_ops.h:30
bool socket_accept(SocketHandle sock, SocketHandle &new_sock, address::SocketAddr &remote_address)
Accept incoming connection.
bool socket_close_with_reset(SocketHandle sock)
Close socket and send reset to remote peer. Remote peer will get error when reading from connection.
bool socket_bind(SocketHandle sock, address::SocketAddr &local_address)
Bind socket to local address.
ssize_t socket_try_send_to(SocketHandle sock, const void *buf, size_t bufsz, const address::SocketAddr &remote_address)
Try to send datagram via socket to given address, without blocking.
bool socket_setup(SocketHandle sock, const SocketOptions &options)
Set socket options.
ssize_t socket_try_send(SocketHandle sock, const void *buf, size_t bufsz)
Try to write bytes to socket without blocking.
const SocketHandle SocketInvalid
Invalid socket handle.
Definition: socket_ops.h:33
SocketType
Socket type.
Definition: socket_ops.h:24
@ SocketType_Tcp
TCP socket.
Definition: socket_ops.h:25
@ SocketType_Udp
UDP socket.
Definition: socket_ops.h:26
bool socket_end_connect(SocketHandle sock)
Finish connecting to remote peer.
ssize_t socket_try_recv(SocketHandle sock, void *buf, size_t bufsz)
Try to read bytes from socket without blocking.
bool socket_begin_connect(SocketHandle sock, const address::SocketAddr &remote_address, bool &completed_immediately)
Initiate connecting to remote peer.
bool socket_close(SocketHandle sock)
Close socket.
Root namespace.
Socket address.
Socket options.
Commonly used types and functions.