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:
		
				
					committed by
					
						 Marc-André Lureau
						Marc-André Lureau
					
				
			
			
				
	
			
			
			
						parent
						
							fc0c128531
						
					
				
				
					commit
					3c63b4e94a
				
			| @@ -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) | ||||
| { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user