mirror of
				https://github.com/godotengine/godot.git
				synced 2025-10-31 05:31:01 +00:00 
			
		
		
		
	Various coverity scan fixes for networking
Fix FreeBSD websocket compilation error
This commit is contained in:
		
							parent
							
								
									7d6f210ccb
								
							
						
					
					
						commit
						03bf783f3c
					
				
					 6 changed files with 42 additions and 14 deletions
				
			
		|  | @ -101,7 +101,7 @@ IP_Address IP_Unix::_resolve_hostname(const String &p_hostname, Type p_type) { | |||
| 		hints.ai_family = AF_UNSPEC; | ||||
| 		hints.ai_flags = AI_ADDRCONFIG; | ||||
| 	}; | ||||
| 	hints.ai_flags &= !AI_NUMERICHOST; | ||||
| 	hints.ai_flags &= ~AI_NUMERICHOST; | ||||
| 
 | ||||
| 	int s = getaddrinfo(p_hostname.utf8().get_data(), NULL, &hints, &result); | ||||
| 	if (s != 0) { | ||||
|  | @ -111,6 +111,8 @@ IP_Address IP_Unix::_resolve_hostname(const String &p_hostname, Type p_type) { | |||
| 
 | ||||
| 	if (result == NULL || result->ai_addr == NULL) { | ||||
| 		ERR_PRINT("Invalid response from getaddrinfo"); | ||||
| 		if (result) | ||||
| 			freeaddrinfo(result); | ||||
| 		return IP_Address(); | ||||
| 	}; | ||||
| 
 | ||||
|  |  | |||
|  | @ -124,11 +124,14 @@ void StreamPeerTCPPosix::set_socket(int p_sockfd, IP_Address p_host, int p_port, | |||
| 	sock_type = p_sock_type; | ||||
| 	sockfd = p_sockfd; | ||||
| #ifndef NO_FCNTL | ||||
| 	fcntl(sockfd, F_SETFL, O_NONBLOCK); | ||||
| 	if (fcntl(sockfd, F_SETFL, O_NONBLOCK) < 0) { | ||||
| 		WARN_PRINT("Error setting socket as non blocking"); | ||||
| 	} | ||||
| #else | ||||
| 	int bval = 1; | ||||
| 	ioctl(sockfd, FIONBIO, &bval); | ||||
| 
 | ||||
| 	if (ioctl(sockfd, FIONBIO, &bval) < 0) { | ||||
| 		WARN_PRINT("Error setting socket as non blocking"); | ||||
| 	} | ||||
| #endif | ||||
| 	status = STATUS_CONNECTING; | ||||
| 
 | ||||
|  | @ -150,10 +153,14 @@ Error StreamPeerTCPPosix::connect_to_host(const IP_Address &p_host, uint16_t p_p | |||
| 	}; | ||||
| 
 | ||||
| #ifndef NO_FCNTL | ||||
| 	fcntl(sockfd, F_SETFL, O_NONBLOCK); | ||||
| 	if (fcntl(sockfd, F_SETFL, O_NONBLOCK) < 0) { | ||||
| 		WARN_PRINT("Error setting socket as non blocking"); | ||||
| 	} | ||||
| #else | ||||
| 	int bval = 1; | ||||
| 	ioctl(sockfd, FIONBIO, &bval); | ||||
| 	if (ioctl(sockfd, FIONBIO, &bval) < 0) { | ||||
| 		WARN_PRINT("Error setting socket as non blocking"); | ||||
| 	} | ||||
| #endif | ||||
| 
 | ||||
| 	struct sockaddr_storage their_addr; | ||||
|  | @ -308,7 +315,9 @@ void StreamPeerTCPPosix::set_no_delay(bool p_enabled) { | |||
| 
 | ||||
| 	ERR_FAIL_COND(!is_connected_to_host()); | ||||
| 	int flag = p_enabled ? 1 : 0; | ||||
| 	setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, (char *)&flag, sizeof(int)); | ||||
| 	if (setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, (char *)&flag, sizeof(int)) < 0) { | ||||
| 		ERR_PRINT("Unable to set TCP no delay option"); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| bool StreamPeerTCPPosix::is_connected_to_host() const { | ||||
|  |  | |||
|  | @ -91,10 +91,14 @@ Error TCPServerPosix::listen(uint16_t p_port, const IP_Address &p_bind_address) | |||
| 	ERR_FAIL_COND_V(sockfd == -1, FAILED); | ||||
| 
 | ||||
| #ifndef NO_FCNTL | ||||
| 	fcntl(sockfd, F_SETFL, O_NONBLOCK); | ||||
| 	if (fcntl(sockfd, F_SETFL, O_NONBLOCK) < 0) { | ||||
| 		WARN_PRINT("Error setting socket as non blocking"); | ||||
| 	} | ||||
| #else | ||||
| 	int bval = 1; | ||||
| 	ioctl(sockfd, FIONBIO, &bval); | ||||
| 	if (ioctl(sockfd, FIONBIO, &bval) < 0) { | ||||
| 		WARN_PRINT("Error setting socket as non blocking"); | ||||
| 	} | ||||
| #endif | ||||
| 
 | ||||
| 	int reuse = 1; | ||||
|  | @ -113,6 +117,7 @@ Error TCPServerPosix::listen(uint16_t p_port, const IP_Address &p_bind_address) | |||
| 			ERR_FAIL_V(FAILED); | ||||
| 		}; | ||||
| 	} else { | ||||
| 		close(sockfd); | ||||
| 		return ERR_ALREADY_IN_USE; | ||||
| 	}; | ||||
| 
 | ||||
|  | @ -157,10 +162,14 @@ Ref<StreamPeerTCP> TCPServerPosix::take_connection() { | |||
| 	int fd = accept(listen_sockfd, (struct sockaddr *)&their_addr, &size); | ||||
| 	ERR_FAIL_COND_V(fd == -1, Ref<StreamPeerTCP>()); | ||||
| #ifndef NO_FCNTL | ||||
| 	fcntl(fd, F_SETFL, O_NONBLOCK); | ||||
| 	if (fcntl(fd, F_SETFL, O_NONBLOCK) < 0) { | ||||
| 		WARN_PRINT("Error setting socket as non blocking"); | ||||
| 	} | ||||
| #else | ||||
| 	int bval = 1; | ||||
| 	ioctl(fd, FIONBIO, &bval); | ||||
| 	if (ioctl(fd, FIONBIO, &bval) < 0) { | ||||
| 		WARN_PRINT("Error setting socket as non blocking"); | ||||
| 	} | ||||
| #endif | ||||
| 
 | ||||
| 	Ref<StreamPeerTCPPosix> conn = memnew(StreamPeerTCPPosix); | ||||
|  |  | |||
|  | @ -335,7 +335,9 @@ Error StreamPeerTCPWinsock::connect_to_host(const IP_Address &p_host, uint16_t p | |||
| void StreamPeerTCPWinsock::set_no_delay(bool p_enabled) { | ||||
| 	ERR_FAIL_COND(!is_connected_to_host()); | ||||
| 	int flag = p_enabled ? 1 : 0; | ||||
| 	setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, (char *)&flag, sizeof(int)); | ||||
| 	if (setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, (char *)&flag, sizeof(int)) != 0) { | ||||
| 		ERR_PRINT("Unable to set TCP no delay option"); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| int StreamPeerTCPWinsock::get_available_bytes() const { | ||||
|  |  | |||
|  | @ -105,6 +105,7 @@ Error TCPServerWinsock::listen(uint16_t p_port, const IP_Address &p_bind_address | |||
| 			ERR_FAIL_V(FAILED); | ||||
| 		}; | ||||
| 	} else { | ||||
| 		closesocket(sockfd); | ||||
| 		return ERR_ALREADY_IN_USE; | ||||
| 	}; | ||||
| 
 | ||||
|  |  | |||
|  | @ -35,6 +35,7 @@ | |||
| // Needed for socket_helpers on Android at least. UNIXes has it, just include if not windows
 | ||||
| #if !defined(WINDOWS_ENABLED) | ||||
| #include <netinet/in.h> | ||||
| #include <sys/socket.h> | ||||
| #endif | ||||
| 
 | ||||
| #include "drivers/unix/socket_helpers.h" | ||||
|  | @ -190,9 +191,11 @@ IP_Address LWSPeer::get_connected_host() const { | |||
| 	IP_Address ip; | ||||
| 	int port = 0; | ||||
| 
 | ||||
| 	socklen_t len; | ||||
| 	socklen_t len = 0; | ||||
| 	struct sockaddr_storage addr; | ||||
| 
 | ||||
| 	int fd = lws_get_socket_fd(wsi); | ||||
| 	ERR_FAIL_COND_V(fd == -1, IP_Address()); | ||||
| 
 | ||||
| 	int ret = getpeername(fd, (struct sockaddr *)&addr, &len); | ||||
| 	ERR_FAIL_COND_V(ret != 0, IP_Address()); | ||||
|  | @ -209,9 +212,11 @@ uint16_t LWSPeer::get_connected_port() const { | |||
| 	IP_Address ip; | ||||
| 	int port = 0; | ||||
| 
 | ||||
| 	socklen_t len; | ||||
| 	socklen_t len = 0; | ||||
| 	struct sockaddr_storage addr; | ||||
| 
 | ||||
| 	int fd = lws_get_socket_fd(wsi); | ||||
| 	ERR_FAIL_COND_V(fd == -1, 0); | ||||
| 
 | ||||
| 	int ret = getpeername(fd, (struct sockaddr *)&addr, &len); | ||||
| 	ERR_FAIL_COND_V(ret != 0, 0); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Fabio Alessandrelli
						Fabio Alessandrelli