work for udp
authorMazet Laurent <laurent.mazet@thalesgroup.com>
Wed, 21 May 2025 14:18:20 +0000 (16:18 +0200)
committerMazet Laurent <laurent.mazet@thalesgroup.com>
Wed, 21 May 2025 14:18:20 +0000 (16:18 +0200)
sap.c
sap_test.c

diff --git a/sap.c b/sap.c
index 7d7bab0401391fa9289217b4dc84eda13d596e15..bd5e656709e2e824e32ba5cd1b7c714d097b7a9b 100644 (file)
--- a/sap.c
+++ b/sap.c
@@ -68,12 +68,9 @@ void free_saps (void)
 
     VERBOSE (sap, TRACE, PRINTF ("free_saps\n"));
 
-    int i;
-    for (i = 0; i < MAX_SAP_NUMBER; i++) {
-        if (SAP_list[i]) {
-            free (SAP_list[i]);
-            SAP_list[i] = NULL;
-        }
+    for (int i = 0; i < MAX_SAP_NUMBER; i++) {
+        free (SAP_list[i]);
+        SAP_list[i] = NULL;
     }
 }
 
@@ -129,14 +126,13 @@ static inline int sap_create_and_listen (char *local_address, int doListen,
     VERBOSE (sap, TRACE, PRINTF ("sap_create_and_listen\n"));
 
     SAP_addr_t addr;
-    int sap;
+    int sap = 0;
 
     VERBOSE (sap, DEBUG, PRINTF ("SAP local addr %s\n", local_address));
-    int rc = parse_url (local_address, &addr);
-
-    if (rc < 0) {
+    if (parse_url (local_address, &addr) < 0) {
+        VERBOSE (sap, ERROR, PRINTF ("can't parse url\n"));
         errno = EINVAL;
-        return rc;
+        return -1;
     }
 
     addr.sockaddr.sin_port =
@@ -149,14 +145,14 @@ static inline int sap_create_and_listen (char *local_address, int doListen,
         if (sap >= 0) {
             int val = 1;
             setsockopt (sap, SOL_SOCKET, SO_REUSEADDR, (OPT_TYPE *)&val, sizeof (val));
-            rc = bind (sap, (struct sockaddr *)&addr.sockaddr, sizeof (addr.sockaddr));
-            if (rc < 0) {
-                return rc;
+            if (bind (sap, (struct sockaddr *)&addr.sockaddr, sizeof (addr.sockaddr)) < 0) {
+                VERBOSE (sap, ERROR, PRINTF ("cant bind on SAP %d\n", sap));
+                return -1;
             }
             if (doListen) {
-                rc = listen (sap, 5);
-                if (rc < 0) {
-                    return rc;
+                if (listen (sap, 5) < 0) {
+                    VERBOSE (sap, ERROR, PRINTF ("cant listen on SAP %d\n", sap));
+                    return -1;
                 }
             }
         }
@@ -166,9 +162,8 @@ static inline int sap_create_and_listen (char *local_address, int doListen,
         if (sap >= 0) {
             int val = 1;
             setsockopt (sap, SOL_SOCKET, SO_REUSEADDR, (OPT_TYPE *)&val, sizeof (val));
-            rc = bind (sap, (struct sockaddr *)&addr.sockaddr, sizeof (addr.sockaddr));
-            if (rc < 0) {
-                return rc;
+            if (bind (sap, (struct sockaddr *)&addr.sockaddr, sizeof (addr.sockaddr)) < 0) {
+                VERBOSE (sap, ERROR, PRINTF ("cant bind on SAP %d\n", sap));
             }
         }
         break;
@@ -206,12 +201,12 @@ int SAP_Connect_Offset (char *local_address, char *remote_address, int port_offs
 
     SAP_addr_t addr;
     int sap;
-    int rc = parse_url (remote_address, &addr);
 
-    if (rc < 0) {
+    VERBOSE (sap, DEBUG, PRINTF ("SAP remote addr %s\n", remote_address));
+    if (parse_url (remote_address, &addr) < 0) {
         VERBOSE (sap, ERROR, PRINTF ("can't parse url\n"));
         errno = EINVAL;
-        return rc;
+        return -1;
     }
 
     addr.sockaddr.sin_port =
@@ -246,13 +241,15 @@ int SAP_Connect_Offset (char *local_address, char *remote_address, int port_offs
     }
 
     SETNOBLK (sap);
-    rc = connect (sap, (struct sockaddr *)&addr.sockaddr, sizeof (addr.sockaddr));
+    if (connect (sap, (struct sockaddr *)&addr.sockaddr, sizeof (addr.sockaddr)) < 0) {
+        VERBOSE (sap, ERROR, PRINTF ("can't connect on soket %d\n", sap));
+        return -1;
+    }
     
     if (addr.type == SAP_tcp) {
         int val = 1;
-        rc = setsockopt (sap, IPPROTO_TCP, TCP_NODELAY, (OPT_TYPE *)&val, sizeof (val));
-        if (rc < 0) {
-            VERBOSE (sap, ERROR, PRINTF ("setsockopt/TCP_NODELAY\n"));
+        if (setsockopt (sap, IPPROTO_TCP, TCP_NODELAY, (OPT_TYPE *)&val, sizeof (val)) < 0) {
+            VERBOSE (sap, ERROR, PRINTF ("error on setsockopt/TCP_NODELAY\n"));
             return -1;
         }
     }
@@ -260,6 +257,7 @@ int SAP_Connect_Offset (char *local_address, char *remote_address, int port_offs
     assert (SAP_list[sap] == NULL);
     SAP_list[sap] = (SAP_descriptor_t *) calloc (1, sizeof (SAP_descriptor_t));
     assert (SAP_list[sap]);
+
     if (__sync_bool_compare_and_swap (&__init, 1, 0)) {
         atexit (free_saps);
     }
@@ -275,8 +273,8 @@ int SAP_IsConnected (int sap)
     int sockerr;
     socklen_t rlen = sizeof (sockerr);
 
-    int rc = getsockopt (sap, SOL_SOCKET, SO_ERROR, (OPT_TYPE *)&sockerr, &rlen);
-    if (rc < 0) {
+    if (getsockopt (sap, SOL_SOCKET, SO_ERROR, (OPT_TYPE *)&sockerr, &rlen) < 0) {
+        VERBOSE (sap, ERROR, PRINTF ("error on getsockopt\n"));
         return -1;
     }
 
@@ -288,6 +286,7 @@ int SAP_IsConnected (int sap)
         return 0;
         break;
     }
+
     return -1;
 }
 
@@ -298,7 +297,7 @@ int SAP_Accept (int sap)
 
     int newsap = accept (sap, NULL, 0);
     if (newsap < 0) {
-        VERBOSE (sap, ERROR, PRINTF ("can't accept any SAP\n"));
+        VERBOSE (sap, ERROR, PRINTF ("can't accept SAP %d\n", sap));
         return newsap;
     }
     if (newsap >= MAX_SAP_NUMBER) {
@@ -306,19 +305,20 @@ int SAP_Accept (int sap)
         errno = ENOMEM;
         return -1;
     }
-    assert (SAP_list[newsap] == NULL);
 
+    assert (SAP_list[newsap] == NULL);
     SAP_list[newsap] = (SAP_descriptor_t *)calloc (1, sizeof (SAP_descriptor_t));
     assert (SAP_list[newsap]);
+
     if (__sync_bool_compare_and_swap (&__init, 1, 0)) {
         atexit (free_saps);
     }
+
     SETNOBLK (newsap);
 
     int val = 1;
-    int rc = setsockopt (newsap, IPPROTO_TCP, TCP_NODELAY, (OPT_TYPE *)&val, sizeof (val));
-    if (rc < 0) {
-        VERBOSE (sap, ERROR, PRINTF ("setsockopt/TCP_NODELAY\n"));
+    if (setsockopt (newsap, IPPROTO_TCP, TCP_NODELAY, (OPT_TYPE *)&val, sizeof (val)) < 0) {
+        VERBOSE (sap, ERROR, PRINTF ("error on setsockopt/TCP_NODELAY\n"));
         return -1;
     }
 
@@ -342,11 +342,11 @@ void SAP_Close (int sap)
     if ((sap < 0) || (sap >= MAX_SAP_NUMBER)) {
         return;
     }
+
     close (sap);
-    if (SAP_list[sap]) {
-        free (SAP_list[sap]);
-        SAP_list[sap] = NULL;
-    }
+
+    free (SAP_list[sap]);
+    SAP_list[sap] = NULL;
 }
 
 void SAP_Set_Blocking (int sap)
@@ -372,6 +372,8 @@ int SAP_Send (int sap, unsigned char *data, int len)
         return -1;
     }
 
+    VERBOSE (sap, TRACE, PRINTF ("SAP_Send writting...\n"));
+
     return write (sap, data, len);
 }
 
@@ -403,10 +405,12 @@ int SAP_Receive (int sap, unsigned char *buffer, int maxlen)
         return -1;
     }
 
+    VERBOSE (sap, TRACE, PRINTF ("SAP_Receive reading...\n"));
+
     int rc = read (sap, buffer, maxlen);
 
-    if ((rc < 0) && (errno != EAGAIN)) {
-        rc = -1;
+    if ((rc < 0) && (errno == EAGAIN)) {
+        rc = 0;
     }
 
     return rc;
index 781f5b13728f2301885086da16ac2efda44a4e27..a3e1f928f7a42a3c1befc7588fc2fe820efe01da 100644 (file)
@@ -97,7 +97,7 @@ int test_client (char *local_address, char *remote_address)
     VERBOSE (sap, TRACE, PRINTF ("test_client\n"));
 
     int count;
-    unsigned char tx_data[10][8192];
+    unsigned char tx_data[10][1500];
     int tx_len[10];
 
     VERBOSE (sap, DEBUG, PRINTF ("%s started\n", remote_address));
@@ -124,14 +124,15 @@ int test_client (char *local_address, char *remote_address)
 
             rc = SAP_Send (sap, tx_data[count], tx_len[count]);
             if (rc < 0) {
-                VERBOSE (sap, WARNING, PRINTF ("%s SAP_Send tx error\n", remote_address));
+                VERBOSE (sap, WARNING, PRINTF ("%s SAP_Send tx error (%d/%d-%d)\n", remote_address, rc, tx_len[count], errno));
                 return -1;
-
             }
+
             if (tx_len[count] != rc) {
                 VERBOSE (sap, WARNING, PRINTF ("%s SAP_Send tx len error tx=%d rc=%d\n", remote_address, tx_len[count], rc));
                 return -1;
             }
+            VERBOSE (sap, DEBUG, PRINTF ("%s SAP_Send ok (%d)\n", remote_address, tx_len[count]));
     }
 
     for (count = 0; count < 10; count++) {
@@ -267,7 +268,7 @@ int main (int argc, char **argv)
         exit (1);
     }
 
-    printf ("*** STARTING TEST SEQUENCE ***\n");
+    printf ("*** STARTING SERVERS ***\n");
 
     pthread_t tcp_thread, udp_thread;
 
@@ -276,6 +277,8 @@ int main (int argc, char **argv)
 
     /* Give some delay to server to setup there SAP */
     sleep (1);
+    
+    printf ("*** STARTING TEST SEQUENCE ***\n");
 
     pthread_t tcp_client_thread, udp_client_thread;