12 #pragma comment(lib, "ws2_32.lib")
15 #define INVALID_SOCKET_VALUE INVALID_SOCKET
16 #define SOCKET_ERROR_VALUE SOCKET_ERROR
18 #include <sys/socket.h>
19 #include <arpa/inet.h>
20 #include <netinet/in.h>
23 #define INVALID_SOCKET_VALUE -1
24 #define SOCKET_ERROR_VALUE -1
25 #define closesocket close
54 return !(*
this == other);
176 int timeout_ms = -1);
int get_bound_port(socket_t socket)
Get the port that a socket is bound to.
bool connect_with_timeout(socket_t socket, struct sockaddr *addr, socklen_t addr_len, int timeout_ms)
Connect to a socket address with timeout.
bool set_socket_nonblocking(socket_t socket)
Set socket to non-blocking mode.
int send_tcp_string(socket_t socket, const std::string &data)
Send string data through a TCP socket (converts to binary)
std::vector< uint8_t > receive_udp_data(socket_t socket, size_t buffer_size, Peer &sender_peer, int timeout_ms=-1)
Receive UDP data with optional timeout.
void close_socket(socket_t socket, bool force=false)
Close a socket.
socket_t create_tcp_client(const std::string &host, int port, int timeout_ms=0)
Create a TCP client socket and connect to a server using dual stack (IPv6 with IPv4 fallback)
std::vector< uint8_t > receive_tcp_data(socket_t socket, size_t buffer_size=1024)
Receive data from a TCP socket.
int send_tcp_data(socket_t socket, const std::vector< uint8_t > &data)
Send data through a TCP socket.
bool init_socket_library()
Initialize the socket library.
bool is_valid_socket(socket_t socket)
Check if a socket is valid.
std::vector< uint8_t > receive_tcp_message(socket_t socket)
Receive a complete length-prefixed framed message from a TCP socket.
socket_t create_udp_socket(int port=0, const std::string &bind_address="", AddressFamily af=AddressFamily::DualStack)
Create a UDP socket and bind to a port.
socket_t create_tcp_server(int port, int backlog=5, const std::string &bind_address="", AddressFamily af=AddressFamily::DualStack)
Create a TCP server socket and bind to a port.
bool set_socket_blocking(socket_t socket)
Set socket to blocking mode.
int send_udp_data(socket_t socket, const std::vector< uint8_t > &data, const std::string &host, int port, AddressFamily af=AddressFamily::DualStack)
Send UDP data to a destination host and port.
socket_t accept_client(socket_t server_socket)
Accept a client connection on a server socket.
void cleanup_socket_library()
Cleanup the socket library.
int send_tcp_message(socket_t socket, const std::vector< uint8_t > &message)
Send a length-prefixed framed message through a TCP socket.
AddressFamily
Address family for socket creation.
std::string get_peer_address(socket_t socket)
Get the peer address (IP:port) from a connected socket.
Peer(const std::string &ip, uint16_t port)
bool operator!=(const Peer &other) const
bool operator==(const Peer &other) const