mirror of https://github.com/xemu-project/xemu.git
oslib-posix: Introduce qemu_socketpair()
qemu_socketpair() will create a pair of connected sockets with FD_CLOEXEC set Signed-off-by: Guoyi Tu <tugy@chinatelecom.cn> Reviewed-by: Christian Schoenebeck <qemu_oss@crudebyte.com> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com> Message-Id: <17fa1eff729eeabd9a001f4639abccb127ceec81.1661240709.git.tugy@chinatelecom.cn>
This commit is contained in:
parent
fc0c128531
commit
3c63b4e94a
|
@ -14,6 +14,24 @@ int inet_aton(const char *cp, struct in_addr *ia);
|
||||||
/* misc helpers */
|
/* misc helpers */
|
||||||
bool fd_is_socket(int fd);
|
bool fd_is_socket(int fd);
|
||||||
int qemu_socket(int domain, int type, int protocol);
|
int qemu_socket(int domain, int type, int protocol);
|
||||||
|
|
||||||
|
#ifndef WIN32
|
||||||
|
/**
|
||||||
|
* qemu_socketpair:
|
||||||
|
* @domain: specifies a communication domain, such as PF_UNIX
|
||||||
|
* @type: specifies the socket type.
|
||||||
|
* @protocol: specifies a particular protocol to be used with the socket
|
||||||
|
* @sv: an array to store the pair of socket created
|
||||||
|
*
|
||||||
|
* Creates an unnamed pair of connected sockets in the specified domain,
|
||||||
|
* of the specified type, and using the optionally specified protocol.
|
||||||
|
* And automatically set the close-on-exec flags on the returned sockets
|
||||||
|
*
|
||||||
|
* Return 0 on success.
|
||||||
|
*/
|
||||||
|
int qemu_socketpair(int domain, int type, int protocol, int sv[2]);
|
||||||
|
#endif
|
||||||
|
|
||||||
int qemu_accept(int s, struct sockaddr *addr, socklen_t *addrlen);
|
int qemu_accept(int s, struct sockaddr *addr, socklen_t *addrlen);
|
||||||
int socket_set_cork(int fd, int v);
|
int socket_set_cork(int fd, int v);
|
||||||
int socket_set_nodelay(int fd);
|
int socket_set_nodelay(int fd);
|
||||||
|
|
|
@ -253,6 +253,25 @@ void qemu_set_cloexec(int fd)
|
||||||
assert(f != -1);
|
assert(f != -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int qemu_socketpair(int domain, int type, int protocol, int sv[2])
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
#ifdef SOCK_CLOEXEC
|
||||||
|
ret = socketpair(domain, type | SOCK_CLOEXEC, protocol, sv);
|
||||||
|
if (ret != -1 || errno != EINVAL) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
ret = socketpair(domain, type, protocol, sv);;
|
||||||
|
if (ret == 0) {
|
||||||
|
qemu_set_cloexec(sv[0]);
|
||||||
|
qemu_set_cloexec(sv[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
char *
|
char *
|
||||||
qemu_get_local_state_dir(void)
|
qemu_get_local_state_dir(void)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue