bonding: support custom interface IDs
[vpp.git] / src / vlibmemory / socket_client.c
index c04b804..38bcc2a 100644 (file)
@@ -79,6 +79,9 @@ vl_socket_client_read (int wait)
                    scm->socket_buffer_size);
          if (n < 0)
            {
+             if (errno == EAGAIN)
+               continue;
+
              clib_unix_warning ("socket_read");
              return -1;
            }
@@ -103,8 +106,11 @@ vl_socket_client_read (int wait)
          n = read (scm->socket_fd,
                    scm->socket_rx_buffer + vec_len (scm->socket_rx_buffer),
                    msg_size - vec_len (scm->socket_rx_buffer));
-         if (n < 0 && errno != EAGAIN)
+         if (n < 0)
            {
+             if (errno == EAGAIN)
+               continue;
+
              clib_unix_warning ("socket_read");
              return -1;
            }
@@ -214,7 +220,7 @@ vl_sock_api_recv_fd_msg (int socket_fd, int fds[], int n_fds, u32 wait)
   mh.msg_control = ctl;
   mh.msg_controllen = sizeof (ctl);
 
-  memset (ctl, 0, sizeof (ctl));
+  clib_memset (ctl, 0, sizeof (ctl));
 
   if (wait != ~0)
     {
@@ -246,7 +252,7 @@ vl_sock_api_recv_fd_msg (int socket_fd, int fds[], int n_fds, u32 wait)
            }
          else if (cmsg->cmsg_type == SCM_RIGHTS)
            {
-             clib_memcpy (fds, CMSG_DATA (cmsg), sizeof (int) * n_fds);
+             clib_memcpy_fast (fds, CMSG_DATA (cmsg), sizeof (int) * n_fds);
            }
        }
       cmsg = CMSG_NXTHDR (&mh, cmsg);
@@ -282,7 +288,7 @@ static void vl_api_sock_init_shm_reply_t_handler
       return;
     }
 
-  memset (memfd, 0, sizeof (*memfd));
+  clib_memset (memfd, 0, sizeof (*memfd));
   memfd->fd = my_fd;
 
   /* Note: this closes memfd.fd */
@@ -358,7 +364,8 @@ vl_socket_client_connect (char *socket_path, char *client_name,
 
   sock = &scm->client_socket;
   sock->config = socket_path;
-  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_NON_BLOCKING_CONNECT;
 
   if ((error = clib_socket_init (sock)))
     {
@@ -404,7 +411,7 @@ vl_socket_client_init_shm (vl_api_shm_elem_config_t * config)
 
   mp = vl_socket_client_msg_alloc (sizeof (*mp) +
                                   vec_len (config) * sizeof (u64));
-  memset (mp, 0, sizeof (*mp));
+  clib_memset (mp, 0, sizeof (*mp));
   mp->_vl_msg_id = clib_host_to_net_u16 (VL_API_SOCK_INIT_SHM);
   mp->client_index = clib_host_to_net_u32 (scm->client_index);
   mp->requested_size = 64 << 20;