vppinfra: explicit blocking mode for sock connects 57/32457/3
authorFlorin Coras <fcoras@cisco.com>
Wed, 26 May 2021 17:21:10 +0000 (10:21 -0700)
committerDave Wallace <dwallacelf@gmail.com>
Wed, 26 May 2021 18:47:41 +0000 (18:47 +0000)
Type: fix

Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: I3a33230de13fef613dc9523cf24a9968d200c2e5

src/plugins/memif/memif.c
src/vcl/vcl_sapi.c
src/vppinfra/socket.c
src/vppinfra/socket.h

index e83864b..9bbbe7f 100644 (file)
@@ -583,9 +583,10 @@ memif_process (vlib_main_t * vm, vlib_node_runtime_t * rt, vlib_frame_t * f)
            {
               clib_memset (sock, 0, sizeof(clib_socket_t));
              sock->config = (char *) msf->filename;
-              sock->flags = CLIB_SOCKET_F_IS_CLIENT| CLIB_SOCKET_F_SEQPACKET;
+             sock->flags = CLIB_SOCKET_F_IS_CLIENT | CLIB_SOCKET_F_SEQPACKET |
+                           CLIB_SOCKET_F_BLOCKING;
 
-              if ((err = clib_socket_init (sock)))
+             if ((err = clib_socket_init (sock)))
                {
                  clib_error_free (err);
                }
index 14401da..84d56af 100644 (file)
@@ -23,7 +23,8 @@ vcl_api_connect_app_socket (vcl_worker_t * wrk)
   int rv = 0;
 
   cs->config = (char *) vcm->cfg.vpp_app_socket_api;
-  cs->flags = CLIB_SOCKET_F_IS_CLIENT | CLIB_SOCKET_F_SEQPACKET;
+  cs->flags =
+    CLIB_SOCKET_F_IS_CLIENT | CLIB_SOCKET_F_SEQPACKET | CLIB_SOCKET_F_BLOCKING;
 
   wrk->vcl_needs_real_epoll = 1;
 
index 1d8b2ca..d842785 100644 (file)
@@ -518,8 +518,10 @@ clib_socket_init (clib_socket_t * s)
                                          s->fd, s->config);
          goto done;
        }
-      /* Connect was blocking so set fd to non-blocking now */
+      /* Connect was blocking so set fd to non-blocking now unless
+       * blocking mode explicitly requested. */
       if (!(s->flags & CLIB_SOCKET_F_NON_BLOCKING_CONNECT) &&
+         !(s->flags & CLIB_SOCKET_F_BLOCKING) &&
          fcntl (s->fd, F_SETFL, O_NONBLOCK) < 0)
        {
          error = clib_error_return_unix (0, "fcntl NONBLOCK2 (fd %d, '%s')",
index b5f0058..78a56fe 100644 (file)
@@ -62,7 +62,7 @@ typedef struct _socket_t
 #define CLIB_SOCKET_F_ALLOW_GROUP_WRITE (1 << 4)
 #define CLIB_SOCKET_F_SEQPACKET (1 << 5)
 #define CLIB_SOCKET_F_PASSCRED  (1 << 6)
-
+#define CLIB_SOCKET_F_BLOCKING            (1 << 7)
 
   /* Transmit buffer.  Holds data waiting to be written. */
   u8 *tx_buffer;