sockets: move fd_is_socket() into common sockets code
The fd_is_socket() helper method is useful in a few places, so put it in the common sockets code. Make the code more compact while moving it. Reviewed-by: Eric Blake <eblake@redhat.com> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com> Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
This commit is contained in:
		
							parent
							
								
									abd983c0e0
								
							
						
					
					
						commit
						58dc31f1a7
					
				| @ -12,6 +12,7 @@ int inet_aton(const char *cp, struct in_addr *ia); | ||||
| #include "qapi/qapi-types-sockets.h" | ||||
| 
 | ||||
| /* misc helpers */ | ||||
| bool fd_is_socket(int fd); | ||||
| int qemu_socket(int domain, int type, int protocol); | ||||
| int qemu_accept(int s, struct sockaddr *addr, socklen_t *addrlen); | ||||
| int socket_set_cork(int fd, int v); | ||||
|  | ||||
| @ -24,19 +24,6 @@ | ||||
| #include "io/channel-socket.h" | ||||
| 
 | ||||
| 
 | ||||
| static bool fd_is_socket(int fd) | ||||
| { | ||||
|     int optval; | ||||
|     socklen_t optlen; | ||||
|     optlen = sizeof(optval); | ||||
|     return qemu_getsockopt(fd, | ||||
|                            SOL_SOCKET, | ||||
|                            SO_TYPE, | ||||
|                            (char *)&optval, | ||||
|                            &optlen) == 0; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| QIOChannel *qio_channel_new_fd(int fd, | ||||
|                                Error **errp) | ||||
| { | ||||
|  | ||||
							
								
								
									
										1
									
								
								tests/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								tests/.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -86,6 +86,7 @@ test-thread-pool | ||||
| test-throttle | ||||
| test-timed-average | ||||
| test-uuid | ||||
| test-util-sockets | ||||
| test-visitor-serialization | ||||
| test-vmstate | ||||
| test-write-threshold | ||||
|  | ||||
| @ -146,6 +146,7 @@ ifneq (,$(findstring qemu-ga,$(TOOLS))) | ||||
| check-unit-$(CONFIG_LINUX) += tests/test-qga$(EXESUF) | ||||
| endif | ||||
| check-unit-y += tests/test-timed-average$(EXESUF) | ||||
| check-unit-y += tests/test-util-sockets$(EXESUF) | ||||
| check-unit-y += tests/test-io-task$(EXESUF) | ||||
| check-unit-y += tests/test-io-channel-socket$(EXESUF) | ||||
| check-unit-y += tests/test-io-channel-file$(EXESUF) | ||||
| @ -713,6 +714,8 @@ tests/test-crypto-tlscredsx509$(EXESUF): tests/test-crypto-tlscredsx509.o \ | ||||
| tests/test-crypto-tlssession.o-cflags := $(TASN1_CFLAGS) | ||||
| tests/test-crypto-tlssession$(EXESUF): tests/test-crypto-tlssession.o \ | ||||
| 	tests/crypto-tls-x509-helpers.o tests/pkix_asn1_tab.o $(test-crypto-obj-y) | ||||
| tests/test-util-sockets$(EXESUF): tests/test-util-sockets.o \ | ||||
| 	tests/socket-helpers.o $(test-util-obj-y) | ||||
| tests/test-io-task$(EXESUF): tests/test-io-task.o $(test-io-obj-y) | ||||
| tests/test-io-channel-socket$(EXESUF): tests/test-io-channel-socket.o \ | ||||
|         tests/io-channel-helpers.o tests/socket-helpers.o $(test-io-obj-y) | ||||
|  | ||||
							
								
								
									
										77
									
								
								tests/test-util-sockets.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								tests/test-util-sockets.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,77 @@ | ||||
| /*
 | ||||
|  * Tests for util/qemu-sockets.c | ||||
|  * | ||||
|  * Copyright 2018 Red Hat, Inc. | ||||
|  * | ||||
|  * This program is free software; you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation; either version 2 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  * | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  * GNU General Public License for more details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this library; if not, see <http://www.gnu.org/licenses/>.
 | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| #include "qemu/osdep.h" | ||||
| #include "qemu-common.h" | ||||
| #include "qemu/sockets.h" | ||||
| #include "qapi/error.h" | ||||
| #include "socket-helpers.h" | ||||
| 
 | ||||
| static void test_fd_is_socket_bad(void) | ||||
| { | ||||
|     char *tmp = g_strdup("qemu-test-util-sockets-XXXXXX"); | ||||
|     int fd = mkstemp(tmp); | ||||
|     if (fd != 0) { | ||||
|         unlink(tmp); | ||||
|     } | ||||
|     g_free(tmp); | ||||
| 
 | ||||
|     g_assert(fd >= 0); | ||||
| 
 | ||||
|     g_assert(!fd_is_socket(fd)); | ||||
|     close(fd); | ||||
| } | ||||
| 
 | ||||
| static void test_fd_is_socket_good(void) | ||||
| { | ||||
|     int fd = qemu_socket(PF_INET, SOCK_STREAM, 0); | ||||
| 
 | ||||
|     g_assert(fd >= 0); | ||||
| 
 | ||||
|     g_assert(fd_is_socket(fd)); | ||||
|     close(fd); | ||||
| } | ||||
| 
 | ||||
| int main(int argc, char **argv) | ||||
| { | ||||
|     bool has_ipv4, has_ipv6; | ||||
| 
 | ||||
|     socket_init(); | ||||
| 
 | ||||
|     g_test_init(&argc, &argv, NULL); | ||||
| 
 | ||||
|     /* We're creating actual IPv4/6 sockets, so we should
 | ||||
|      * check if the host running tests actually supports | ||||
|      * each protocol to avoid breaking tests on machines | ||||
|      * with either IPv4 or IPv6 disabled. | ||||
|      */ | ||||
|     if (socket_check_protocol_support(&has_ipv4, &has_ipv6) < 0) { | ||||
|         return 1; | ||||
|     } | ||||
| 
 | ||||
|     if (has_ipv4) { | ||||
|         g_test_add_func("/util/socket/is-socket/bad", | ||||
|                         test_fd_is_socket_bad); | ||||
|         g_test_add_func("/util/socket/is-socket/good", | ||||
|                         test_fd_is_socket_good); | ||||
|     } | ||||
| 
 | ||||
|     return g_test_run(); | ||||
| } | ||||
| @ -91,6 +91,14 @@ NetworkAddressFamily inet_netfamily(int family) | ||||
|     return NETWORK_ADDRESS_FAMILY_UNKNOWN; | ||||
| } | ||||
| 
 | ||||
| bool fd_is_socket(int fd) | ||||
| { | ||||
|     int optval; | ||||
|     socklen_t optlen = sizeof(optval); | ||||
|     return !qemu_getsockopt(fd, SOL_SOCKET, SO_TYPE, &optval, &optlen); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|  * Matrix we're trying to apply | ||||
|  * | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Daniel P. Berrange
						Daniel P. Berrange