int smb_direct_accept(struct smb_direct_socket *socket)
{
struct msghdr msg = { 0 };
- int fd;
- size_t fdlen;
- int result;
+ int fd = -1;
+ size_t fdlen = msghdr_prep_recv_fds(NULL, NULL, 0, 1);
+ uint8_t buf[fdlen];
uint8_t iobuf[1024] = {0, };
struct iovec iov;
+ ssize_t nread;
iov = (struct iovec) {
.iov_base = iobuf,
return -1;
}
- fdlen = msghdr_prep_recv_fds(&msg, NULL, 0, 1);
+ msghdr_prep_recv_fds(&msg, buf, fdlen, 1);
- {
- uint8_t buf[fdlen];
+ do {
+ nread = recvmsg(socket->fd, &msg, 0);
+ } while ((nread == -1) && (errno == EINTR));
- msghdr_prep_recv_fds(&msg, buf, fdlen, 1);
-
- result = recvmsg(socket->fd, &msg, 0);
- if (result == -1) {
- DBG_ERR("recvmsg failed [%s]\n", strerror(errno));
- return -1;
- }
+ if (nread == -1) {
+ DBG_ERR("recvmsg failed [%s]\n", strerror(errno));
+ return -1;
}
msghdr_extract_fds(&msg, &fd, 1);