Possible fix for large sockets messages.

Wed, 24 Apr 2024 21:36:49 +0200

author
Michiel Broek <mbroek@mbse.eu>
date
Wed, 24 Apr 2024 21:36:49 +0200
changeset 706
50d9a25aba86
parent 705
d7c8106b28e4
child 707
b435bf0bf24a

Possible fix for large sockets messages.

thermferm/server.c file | annotate | diff | comparison | revisions
--- 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;

mercurial