svm: minimal initial fifo
[vpp.git] / src / vppinfra / socket.c
index 109cbad..4522514 100644 (file)
@@ -356,7 +356,8 @@ default_socket_recvmsg (clib_socket_t * s, void *msg, int msglen,
 #endif
          if (cmsg->cmsg_type == SCM_RIGHTS)
            {
-             clib_memcpy (fds, CMSG_DATA (cmsg), num_fds * sizeof (int));
+             clib_memcpy_fast (fds, CMSG_DATA (cmsg),
+                               num_fds * sizeof (int));
            }
        }
       cmsg = CMSG_NXTHDR (&mh, cmsg);
@@ -388,7 +389,7 @@ clib_socket_init (clib_socket_t * s)
     struct sockaddr_un su;
   } addr;
   socklen_t addr_len = 0;
-  int socket_type;
+  int socket_type, rv;
   clib_error_t *error = 0;
   word port;
 
@@ -501,9 +502,11 @@ clib_socket_init (clib_socket_t * s)
          goto done;
        }
 
-      if (connect (s->fd, &addr.sa, addr_len) < 0
-         && !((s->flags & CLIB_SOCKET_F_NON_BLOCKING_CONNECT) &&
-              errno == EINPROGRESS))
+      while ((rv = connect (s->fd, &addr.sa, addr_len)) < 0
+            && errno == EAGAIN)
+       ;
+      if (rv < 0 && !((s->flags & CLIB_SOCKET_F_NON_BLOCKING_CONNECT) &&
+                     errno == EINPROGRESS))
        {
          error = clib_error_return_unix (0, "connect (fd %d, '%s')",
                                          s->fd, s->config);