Skip to content

SocketRecv

Description

Blocking read from a connected socket.

Parameters

Name Direction Description
self in Socket to read from.
buf out Destination buffer.
n in Capacity of buf.

Success

returns number of bytes read (0 means peer closed).

Failure

returns -1; logs the failing syscall.

Usage example (Cross-references)

Usage examples (Cross-references)
            return -1;
        }
        i64 got = SocketRecv(&sock, resp_buf, resp_cap);
        SocketClose(&sock);
        return got;
    }
    
    i64 SocketRecv(Socket *self, void *buf, size n) {
        if (!self || !buf) {
            LOG_FATAL("SocketRecv: NULL argument");
    i64 SocketRecv(Socket *self, void *buf, size n) {
        if (!self || !buf) {
            LOG_FATAL("SocketRecv: NULL argument");
        }
        return plat_recv(self->fd, buf, n);
    
            if (items[0].events_ready & SOCKET_POLL_READ) {
                i64 n = SocketRecv(a, buf, sizeof(buf));
                if (n <= 0) {
                    return;
            }
            if (items[1].events_ready & SOCKET_POLL_READ) {
                i64 n = SocketRecv(b, buf, sizeof(buf));
                if (n <= 0) {
                    return;
        // Read the first chunk so we can log the request line.
        char first[4096];
        i64  first_n = SocketRecv(client, first, sizeof(first));
        if (first_n <= 0) {
            SocketClose(&upstream);
    
        char buf[64];
        i64  got = SocketRecv(&server, buf, sizeof(buf));
        bool ok  = got == (i64)n && MemCompare(buf, payload, n) == 0;
        ok       = ok && SocketSend(&client, c2s, n1) == (i64)n1;
        char buf1[64];
        i64  g1 = SocketRecv(&server, buf1, sizeof(buf1));
        ok      = ok && g1 == (i64)n1 && MemCompare(buf1, c2s, n1) == 0;
        ok       = ok && SocketSend(&server, s2c, n2) == (i64)n2;
        char buf2[64];
        i64  g2 = SocketRecv(&client, buf2, sizeof(buf2));
        ok      = ok && g2 == (i64)n2 && MemCompare(buf2, s2c, n2) == 0;
    
        char buf[16];
        i64  got = SocketRecv(&server, buf, sizeof(buf));
        bool ok  = got == 0;
        // Drain so the close path is clean.
        char buf[16];
        SocketRecv(&server, buf, sizeof(buf));
    
        SocketClose(&server);
        ok           = ok && SocketSend(&client, payload, n) == (i64)n;
        char buf[32];
        i64  got = SocketRecv(&server, buf, sizeof(buf));
        ok       = ok && got == (i64)n && MemCompare(buf, payload, n) == 0;
        ok           = ok && SocketSend(&client, payload, n) == (i64)n;
        char buf[32];
        i64  got = SocketRecv(&server, buf, sizeof(buf));
        ok       = ok && got == (i64)n && MemCompare(buf, payload, n) == 0;
        ok           = ok && SocketSend(&client, payload, n) == (i64)n;
        char buf[16];
        i64  got = SocketRecv(&server, buf, sizeof(buf));
        ok       = ok && got == (i64)n && MemCompare(buf, payload, n) == 0;
Last updated on