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