mirror of
https://gitlab.com/qemu-project/qemu
synced 2024-11-05 20:35:44 +00:00
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
2 changed files with 37 additions and 0 deletions
|
@ -14,6 +14,24 @@ int inet_aton(const char *cp, struct in_addr *ia);
|
|||
/* misc helpers */
|
||||
bool fd_is_socket(int fd);
|
||||
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 socket_set_cork(int fd, int v);
|
||||
int socket_set_nodelay(int fd);
|
||||
|
|
|
@ -253,6 +253,25 @@ void qemu_set_cloexec(int fd)
|
|||
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 *
|
||||
qemu_get_local_state_dir(void)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue