scm->socket_buffer_size);
if (n < 0)
{
+ if (errno == EAGAIN)
+ continue;
+
clib_unix_warning ("socket_read");
return -1;
}
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;
}
}
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);
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)))
{