diff options
author | mrfoxygmfr <mrfoxygmfr@sch9.ru> | 2025-05-22 23:38:43 +0300 |
---|---|---|
committer | mrfoxygmfr <mrfoxygmfr@sch9.ru> | 2025-05-22 23:38:43 +0300 |
commit | 9893fb055910bb2a39565e38c3b3524651648776 (patch) | |
tree | 0c6623b494960bb67be4e465113c94bf103467b8 | |
parent | 067de7c721ad27d36500668dfb374fead08bc0d2 (diff) |
fix(lib/net): conn functions now expect full block read/write
-rw-r--r-- | lib/net/common.c | 34 |
1 files changed, 12 insertions, 22 deletions
diff --git a/lib/net/common.c b/lib/net/common.c index 152c5c0..6ed19ad 100644 --- a/lib/net/common.c +++ b/lib/net/common.c @@ -64,49 +64,39 @@ int conn_configure_tcpalive(conn_t* conn) { char* conn_read(conn_t* conn, size_t* size) { size_t sz; - int n = recv(conn->conn_socket_fd, &sz, sizeof(sz), 0); + size_t n = recv(conn->conn_socket_fd, &sz, sizeof(sz), 0); if (n == 0) { *size = 0; return NULL; } if (n != sizeof(sz)) { - fprintf(stderr, "[conn_read] Failed to read size of msg %d %d\n", n, errno); + fprintf(stderr, "[conn_read] Failed to read size of msg %lu %d\n", n, errno); exit(EXIT_FAILURE); } char* buf = calloc(sz, sizeof(*buf)); - size_t readed = 0; - while (readed < sz) { - int n = recv(conn->conn_socket_fd, buf + readed, sz - readed, MSG_WAITALL); - if (n == -1) { - fprintf(stderr, "[conn_read] Failed to read msg\n"); - exit(EXIT_FAILURE); - } - - readed += n; + n = recv(conn->conn_socket_fd, buf, sz, MSG_WAITALL); + if ((size_t) n != sz) { + fprintf(stderr, "[conn_read] Failed to read msg\n"); + exit(EXIT_FAILURE); } - *size = readed; + *size = sz; return buf; } void conn_write(conn_t* conn, const char* value, size_t sz) { - int n = write(conn->conn_socket_fd, &sz, sizeof(sz)); + size_t n = send(conn->conn_socket_fd, &sz, sizeof(sz), MSG_MORE); if (n != sizeof(sz)) { fprintf(stderr, "[conn_write] Failed to write size of msg\n"); exit(EXIT_FAILURE); } - size_t written = 0; - while (written < sz) { - int n = write(conn->conn_socket_fd, value + written, sz - written); - if (n == -1) { - fprintf(stderr, "[conn_write] Failed to write msg\n"); - exit(EXIT_FAILURE); - } - - written += n; + n = send(conn->conn_socket_fd, value, sz, 0); + if (n != sz) { + fprintf(stderr, "[conn_write] Failed to write msg\n"); + exit(EXIT_FAILURE); } } |