summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormrfoxygmfr <mrfoxygmfr@sch9.ru>2025-05-22 23:38:43 +0300
committermrfoxygmfr <mrfoxygmfr@sch9.ru>2025-05-22 23:38:43 +0300
commit9893fb055910bb2a39565e38c3b3524651648776 (patch)
tree0c6623b494960bb67be4e465113c94bf103467b8
parent067de7c721ad27d36500668dfb374fead08bc0d2 (diff)
fix(lib/net): conn functions now expect full block read/write
-rw-r--r--lib/net/common.c34
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);
}
}