virgl/vtest: add utilities for receiving fds
v2: recieve --> receive (airlied@) Signed-off-by: Gurchetan Singh <gurchetansingh@chromium.org> Reviewed-By: Gert Wollny <gert.wollny@collabora.com> Reviewed-By: Piotr Rak <p.rak@samsung.com>
This commit is contained in:
parent
0dd661777a
commit
9881733e32
|
@ -72,6 +72,49 @@ static int virgl_block_read(int fd, void *buf, int size)
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int virgl_vtest_receive_fd(int socket_fd)
|
||||||
|
{
|
||||||
|
struct cmsghdr *cmsgh;
|
||||||
|
struct msghdr msgh = { 0 };
|
||||||
|
char buf[CMSG_SPACE(sizeof(int))], c;
|
||||||
|
struct iovec iovec;
|
||||||
|
|
||||||
|
iovec.iov_base = &c;
|
||||||
|
iovec.iov_len = sizeof(char);
|
||||||
|
|
||||||
|
msgh.msg_name = NULL;
|
||||||
|
msgh.msg_namelen = 0;
|
||||||
|
msgh.msg_iov = &iovec;
|
||||||
|
msgh.msg_iovlen = 1;
|
||||||
|
msgh.msg_control = buf;
|
||||||
|
msgh.msg_controllen = sizeof(buf);
|
||||||
|
msgh.msg_flags = 0;
|
||||||
|
|
||||||
|
int size = recvmsg(socket_fd, &msgh, 0);
|
||||||
|
if (size < 0) {
|
||||||
|
fprintf(stderr, "Failed with %s\n", strerror(errno));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
cmsgh = CMSG_FIRSTHDR(&msgh);
|
||||||
|
if (!cmsgh) {
|
||||||
|
fprintf(stderr, "No headers available\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cmsgh->cmsg_level != SOL_SOCKET) {
|
||||||
|
fprintf(stderr, "invalid cmsg_level %d\n", cmsgh->cmsg_level);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cmsgh->cmsg_type != SCM_RIGHTS) {
|
||||||
|
fprintf(stderr, "invalid cmsg_type %d\n", cmsgh->cmsg_type);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return *((int *) CMSG_DATA(cmsgh));
|
||||||
|
}
|
||||||
|
|
||||||
static int virgl_vtest_send_init(struct virgl_vtest_winsys *vws)
|
static int virgl_vtest_send_init(struct virgl_vtest_winsys *vws)
|
||||||
{
|
{
|
||||||
uint32_t buf[VTEST_HDR_SIZE];
|
uint32_t buf[VTEST_HDR_SIZE];
|
||||||
|
|
Loading…
Reference in New Issue