{
struct msghdr mh = { 0 };
struct iovec iov[1];
- char ctl[CMSG_SPACE (sizeof (int)) * num_fds];
+ char ctl[CMSG_SPACE (sizeof (int) * num_fds)];
int rv;
iov[0].iov_base = msg;
#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);
struct sockaddr_un su;
} addr;
socklen_t addr_len = 0;
- int socket_type;
+ int socket_type, rv;
clib_error_t *error = 0;
word port;
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);