# HG changeset patch # User Michiel Broek # Date 1713987409 -7200 # Node ID 50d9a25aba86aeb27c0dc305680bb7ccf59f797d # Parent d7c8106b28e4cc14553c6aa093631dfdd7df02df Possible fix for large sockets messages. diff -r d7c8106b28e4 -r 50d9a25aba86 thermferm/server.c --- a/thermferm/server.c Wed Apr 24 20:44:56 2024 +0200 +++ b/thermferm/server.c Wed Apr 24 21:36:49 2024 +0200 @@ -115,6 +115,29 @@ /* + * Send unlimited size message + */ +int large_send(int s, char *out) +{ + if (s == -1) + return -1; + + if (send(s, out, strlen(out), 0) != strlen(out)) { + syslog(LOG_NOTICE, "large_send failed"); + return -1; + } + + if (send(s, (char *)"\r\n", 2, 0) != 2) { + syslog(LOG_NOTICE, "large_send failed"); + return -1; + } + + return 0; +} + + + +/* * Argument is a buffer of size SS_BUFSIZE. * Return -1 if error, else the number of received * character. \n is line end, ignore \r. @@ -360,7 +383,7 @@ payloadu = NULL; } payload = xstrcat(payload, (char *)"]"); - srv_send(s, payload); + large_send(s, payload); srv_send(s, (char *)"."); free(payload); payload = NULL; @@ -380,7 +403,7 @@ payloadu = NULL; payload = xstrcat(payload, (char *)"}"); srv_send(s, (char *)"213 Device json record follows:"); - srv_send(s, payload); + large_send(s, payload); free(payload); payload = NULL; srv_send(s, (char *)"."); @@ -664,7 +687,7 @@ payloadu = NULL; } payload = xstrcat(payload, (char *)"]"); - srv_send(s, payload); + large_send(s, payload); srv_send(s, (char *)"."); free(payload); payload = NULL; @@ -1477,7 +1500,7 @@ payloadu = NULL; } payload = xstrcat(payload, (char *)"]"); - srv_send(s, payload); + large_send(s, payload); srv_send(s, (char *)"."); free(payload); payload = NULL; @@ -1493,7 +1516,7 @@ payloadu = unit_data(unit, false); payload = xstrcat(payload, payloadu); payload = xstrcat(payload, (char *)"}"); - srv_send(s, payload); + large_send(s, payload); free(payload); free(payloadu); payload = payloadu = NULL;