Skip to content

SocketClose

Description

Close a connected socket. Safe to call on a zeroed Socket.

Success

Socket is closed and zeroed.

Failure

Function cannot fail; close errors are logged at error level but do not propagate.

Usage example (Cross-references)

Usage examples (Cross-references)
    
        if (!ListenerAccept(&listener, &server)) {
            SocketClose(&client);
            ListenerClose(&listener);
            return false;
        size        n       = (size)ZstrLen(payload);
        if (SocketSend(&client, payload, n) != (i64)n) {
            SocketClose(&server);
            SocketClose(&client);
            ListenerClose(&listener);
        if (SocketSend(&client, payload, n) != (i64)n) {
            SocketClose(&server);
            SocketClose(&client);
            ListenerClose(&listener);
            return false;
        bool ok  = got == (i64)n && MemCompare(buf, payload, n) == 0;
    
        SocketClose(&server);
        SocketClose(&client);
        ListenerClose(&listener);
    
        SocketClose(&server);
        SocketClose(&client);
        ListenerClose(&listener);
        return ok;
    }
    
    void SocketClose(Socket *self) {
        if (!self) {
            return;
        if (self->fd > 0) {
            if (close(self->fd) < 0) {
                LOG_SYS_ERROR("SocketClose: close() failed");
            }
        }
        if (!SocketConnect(&upstream, SOCKET_KIND_TCP, upstream_addr)) {
            LOG_ERROR("failed to dial upstream for client [{}]", peer_str);
            SocketClose(client);
            StrDeinit(&peer_str);
            return;
        i64  first_n = SocketRecv(client, first, sizeof(first));
        if (first_n <= 0) {
            SocketClose(&upstream);
            SocketClose(client);
            StrDeinit(&peer_str);
        if (first_n <= 0) {
            SocketClose(&upstream);
            SocketClose(client);
            StrDeinit(&peer_str);
            return;
        proxy_pump(client, &upstream, first, (size)first_n);
    
        SocketClose(&upstream);
        SocketClose(client);
        StrDeinit(&peer_str);
    
        SocketClose(&upstream);
        SocketClose(client);
        StrDeinit(&peer_str);
    }
Last updated on