fd_util: add function close_socket()
Wrap close(), use closesocket() on WIN32/WinSock.
This commit is contained in:
		
							
								
								
									
										1
									
								
								NEWS
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								NEWS
									
									
									
									
									
								
							| @@ -9,6 +9,7 @@ ver 0.16.5 (2010/??/??) | |||||||
| * decoder: | * decoder: | ||||||
|   - ffmpeg: higher precision timestamps |   - ffmpeg: higher precision timestamps | ||||||
|   - ffmpeg: don't require key frame for seeking |   - ffmpeg: don't require key frame for seeking | ||||||
|  | * WIN32: close sockets properly | ||||||
|  |  | ||||||
|  |  | ||||||
| ver 0.16.4 (2011/09/01) | ver 0.16.4 (2011/09/01) | ||||||
|   | |||||||
| @@ -19,6 +19,7 @@ | |||||||
|  |  | ||||||
| #include "config.h" | #include "config.h" | ||||||
| #include "client_internal.h" | #include "client_internal.h" | ||||||
|  | #include "fd_util.h" | ||||||
| #include "fifo_buffer.h" | #include "fifo_buffer.h" | ||||||
| #include "socket_util.h" | #include "socket_util.h" | ||||||
| #include "permission.h" | #include "permission.h" | ||||||
| @@ -67,7 +68,7 @@ void client_new(int fd, const struct sockaddr *sa, size_t sa_length, int uid) | |||||||
| 			      progname, hostaddr); | 			      progname, hostaddr); | ||||||
|  |  | ||||||
| 			g_free(hostaddr); | 			g_free(hostaddr); | ||||||
| 			close(fd); | 			close_socket(fd); | ||||||
| 			return; | 			return; | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| @@ -77,7 +78,7 @@ void client_new(int fd, const struct sockaddr *sa, size_t sa_length, int uid) | |||||||
|  |  | ||||||
| 	if (client_list_is_full()) { | 	if (client_list_is_full()) { | ||||||
| 		g_warning("Max Connections Reached!"); | 		g_warning("Max Connections Reached!"); | ||||||
| 		close(fd); | 		close_socket(fd); | ||||||
| 		return; | 		return; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|   | |||||||
| @@ -304,3 +304,13 @@ inotify_init_cloexec(void) | |||||||
| } | } | ||||||
|  |  | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | int | ||||||
|  | close_socket(int fd) | ||||||
|  | { | ||||||
|  | #ifdef WIN32 | ||||||
|  | 	return closesocket(fd); | ||||||
|  | #else | ||||||
|  | 	return close(fd); | ||||||
|  | #endif | ||||||
|  | } | ||||||
|   | |||||||
| @@ -133,4 +133,10 @@ inotify_init_cloexec(void); | |||||||
|  |  | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * Portable wrapper for close(); use closesocket() on WIN32/WinSock. | ||||||
|  |  */ | ||||||
|  | int | ||||||
|  | close_socket(int fd); | ||||||
|  |  | ||||||
| #endif | #endif | ||||||
|   | |||||||
| @@ -201,7 +201,7 @@ httpd_listen_in_event(int fd, const struct sockaddr *address, | |||||||
| 			g_warning("libwrap refused connection (libwrap=%s) from %s", | 			g_warning("libwrap refused connection (libwrap=%s) from %s", | ||||||
| 			      progname, hostaddr); | 			      progname, hostaddr); | ||||||
| 			g_free(hostaddr); | 			g_free(hostaddr); | ||||||
| 			close(fd); | 			close_socket(fd); | ||||||
| 			g_mutex_unlock(httpd->mutex); | 			g_mutex_unlock(httpd->mutex); | ||||||
| 			return; | 			return; | ||||||
| 		} | 		} | ||||||
| @@ -222,7 +222,7 @@ httpd_listen_in_event(int fd, const struct sockaddr *address, | |||||||
| 		     httpd->clients_cnt < httpd->clients_max)) | 		     httpd->clients_cnt < httpd->clients_max)) | ||||||
| 			httpd_client_add(httpd, fd); | 			httpd_client_add(httpd, fd); | ||||||
| 		else | 		else | ||||||
| 			close(fd); | 			close_socket(fd); | ||||||
| 	} else if (fd < 0 && errno != EINTR) { | 	} else if (fd < 0 && errno != EINTR) { | ||||||
| 		g_warning("accept() failed: %s", g_strerror(errno)); | 		g_warning("accept() failed: %s", g_strerror(errno)); | ||||||
| 	} | 	} | ||||||
|   | |||||||
| @@ -253,7 +253,7 @@ server_socket_close(struct server_socket *ss) | |||||||
| 			continue; | 			continue; | ||||||
|  |  | ||||||
| 		g_source_remove(s->source_id); | 		g_source_remove(s->source_id); | ||||||
| 		close(s->fd); | 		close_socket(s->fd); | ||||||
| 		s->fd = -1; | 		s->fd = -1; | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|   | |||||||
| @@ -122,7 +122,7 @@ socket_bind_listen(int domain, int type, int protocol, | |||||||
| 	if (ret < 0) { | 	if (ret < 0) { | ||||||
| 		g_set_error(error, listen_quark(), errno, | 		g_set_error(error, listen_quark(), errno, | ||||||
| 			    "setsockopt() failed: %s", g_strerror(errno)); | 			    "setsockopt() failed: %s", g_strerror(errno)); | ||||||
| 		close(fd); | 		close_socket(fd); | ||||||
| 		return -1; | 		return -1; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| @@ -130,7 +130,7 @@ socket_bind_listen(int domain, int type, int protocol, | |||||||
| 	if (ret < 0) { | 	if (ret < 0) { | ||||||
| 		g_set_error(error, listen_quark(), errno, | 		g_set_error(error, listen_quark(), errno, | ||||||
| 			    "%s", g_strerror(errno)); | 			    "%s", g_strerror(errno)); | ||||||
| 		close(fd); | 		close_socket(fd); | ||||||
| 		return -1; | 		return -1; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| @@ -138,7 +138,7 @@ socket_bind_listen(int domain, int type, int protocol, | |||||||
| 	if (ret < 0) { | 	if (ret < 0) { | ||||||
| 		g_set_error(error, listen_quark(), errno, | 		g_set_error(error, listen_quark(), errno, | ||||||
| 			    "listen() failed: %s", g_strerror(errno)); | 			    "listen() failed: %s", g_strerror(errno)); | ||||||
| 		close(fd); | 		close_socket(fd); | ||||||
| 		return -1; | 		return -1; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Max Kellermann
					Max Kellermann