]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
tests/key-material-set-dtls: retry send/recv on E_AGAIN/E_INTERRUPTED
authorAlexander Sosedkin <asosedkin@redhat.com>
Wed, 25 Sep 2024 11:32:14 +0000 (13:32 +0200)
committerAlexander Sosedkin <asosedkin@redhat.com>
Mon, 30 Sep 2024 11:12:45 +0000 (13:12 +0200)
Signed-off-by: Alexander Sosedkin <asosedkin@redhat.com>
tests/key-material-set-dtls.c

index 01d04d3d84fd0d96ed3d31ada1103d40d202e1fd..644070a952d6fdab9c594b7ee1622c6910127f16 100644 (file)
@@ -172,18 +172,24 @@ static void client(int fd)
 
        /* skip past the sliding window */
        for (i = 0; i < 96; i++) {
-               ret = gnutls_record_send(session, "hello", 5);
+               do {
+                       ret = gnutls_record_send(session, "hello", 5);
+               } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED);
                if (ret < 0) {
                        fail("gnutls_record_send: %s\n", gnutls_strerror(ret));
                }
 
-               ret = gnutls_record_recv(session, buf, sizeof(buf));
+               do {
+                       ret = gnutls_record_recv(session, buf, sizeof(buf));
+               } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED);
                if (ret < 0) {
                        fail("gnutls_record_recv: %s\n", gnutls_strerror(ret));
                }
        }
 
-       ret = gnutls_record_send(session, "reset", 5);
+       do {
+               ret = gnutls_record_send(session, "reset", 5);
+       } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED);
        if (ret < 0) {
                fail("gnutls_record_send(reset): %s\n", gnutls_strerror(ret));
        }
@@ -202,12 +208,16 @@ static void client(int fd)
                exit(1);
        }
 
-       ret = gnutls_record_send(session, "ping", 4);
+       do {
+               ret = gnutls_record_send(session, "ping", 4);
+       } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED);
        if (ret < 0) {
                fail("gnutls_record_send(ping): %s\n", gnutls_strerror(ret));
        }
 
-       ret = gnutls_record_recv(session, buf, sizeof(buf));
+       do {
+               ret = gnutls_record_recv(session, buf, sizeof(buf));
+       } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED);
        if (ret < 0) {
                fail("gnutls_record_recv(pong): %s\n", gnutls_strerror(ret));
        }
@@ -302,7 +312,9 @@ static void server(int fd)
        }
 
        do {
-               ret = gnutls_record_recv(session, buf, sizeof(buf));
+               do {
+                       ret = gnutls_record_recv(session, buf, sizeof(buf));
+               } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED);
 
                if (ret > 0) {
                        if (ret == 5 && memcmp(buf, "reset", 5) == 0) {
@@ -311,7 +323,10 @@ static void server(int fd)
                                break;
                        }
 
-                       ret = gnutls_record_send(session, buf, ret);
+                       do {
+                               ret = gnutls_record_send(session, buf, ret);
+                       } while (ret == GNUTLS_E_AGAIN ||
+                                ret == GNUTLS_E_INTERRUPTED);
                }
        } while (ret > 0);
 
@@ -329,10 +344,14 @@ static void server(int fd)
                fail("error in %d\n", __LINE__);
        }
 
-       ret = gnutls_record_recv(session, buf, sizeof(buf));
+       do {
+               ret = gnutls_record_recv(session, buf, sizeof(buf));
+       } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED);
 
        if (ret == 4 && memcmp(buf, "ping", 4) == 0) {
-               ret = gnutls_record_send(session, "pong", 4);
+               do {
+                       ret = gnutls_record_send(session, "pong", 4);
+               } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED);
        } else if (ret > 0) {
                fail("did not receive ping; received: %.*s\n", ret, buf);
        } else if (ret < 0) {