Skip to content

Listener

Description

A bound + listening socket. kind records whether stream (TCP) or datagram (UDP) semantics apply. bound is the address that was passed to ListenerOpen (mostly for logging).

Usage example (Cross-references)

Usage examples (Cross-references)
    // client socket, send/recv a byte string, verify it round-trips.
    bool test_socket_loopback_round_trip(void) {
        Listener listener;
        Socket   client = {0};
        Socket   server = {0};
    // ---------------------------------------------------------------------------
    
    bool ListenerOpen(Listener *out, SocketKind kind, const SocketAddr *addr, i32 backlog) {
        if (!out || !addr) {
            LOG_ERROR("ListenerOpen: NULL argument");
    }
    
    bool ListenerAccept(Listener *self, Socket *out_conn) {
        if (!self || !out_conn) {
            LOG_ERROR("ListenerAccept: NULL argument");
    }
    
    void ListenerClose(Listener *self) {
        if (!self) {
            return;
        SocketKind kind;
        SocketAddr bound;
    } Listener;
    
    ///
    /// TAGS: Socket, Listener, Bind
    ///
    bool ListenerOpen(Listener *out, SocketKind kind, const SocketAddr *addr, i32 backlog);
    
    ///
    /// TAGS: Socket, Listener, Accept
    ///
    bool ListenerAccept(Listener *self, Socket *out_conn);
    
    ///
    /// TAGS: Socket, Listener, Close
    ///
    void ListenerClose(Listener *self);
    
    // --- Socket (client + accepted) --------------------------------------------
            }
    
            Listener listener;
            if (!ListenerOpen(&listener, SOCKET_KIND_TCP, &listen_addr, 128)) {
                LOG_ERROR("failed to open listener on {}", listen_spec);
Last updated on