Mercurial > pidgin.yaz
diff src/network.c @ 12730:d5b8f4dc1622
[gaim-migrate @ 15074]
Update gaim_network_listen*() to have the socket type specified. This allows us to use the same functionality to listen on UDP sockets too. There are probably a couple things that should be updated to use this. I also updated SIMPLE to allow the connect port to be specified in the account options.
committer: Tailor Script <tailor@pidgin.im>
author | Daniel Atallah <daniel.atallah@gmail.com> |
---|---|
date | Thu, 05 Jan 2006 05:04:07 +0000 |
parents | fb3b7466e3d2 |
children | 8e3b85fe4a55 |
line wrap: on
line diff
--- a/src/network.c Thu Jan 05 04:32:25 2006 +0000 +++ b/src/network.c Thu Jan 05 05:04:07 2006 +0000 @@ -179,7 +179,7 @@ static int -gaim_network_do_listen(unsigned short port) +gaim_network_do_listen(unsigned short port, int socket_type) { int listenfd = -1; const int on = 1; @@ -196,7 +196,7 @@ memset(&hints, 0, sizeof(struct addrinfo)); hints.ai_flags = AI_PASSIVE; hints.ai_family = AF_UNSPEC; - hints.ai_socktype = SOCK_STREAM; + hints.ai_socktype = socket_type; errnum = getaddrinfo(NULL /* any IP */, serv, &hints, &res); if (errnum != 0) { #ifndef _WIN32 @@ -222,6 +222,8 @@ gaim_debug_warning("network", "setsockopt: %s\n", strerror(errno)); if (bind(listenfd, next->ai_addr, next->ai_addrlen) == 0) break; /* success */ + /* XXX - It is unclear to me (datallah) whether we need to be + using a new socket each time */ close(listenfd); } @@ -232,7 +234,7 @@ #else struct sockaddr_in sockin; - if ((listenfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { + if ((listenfd = socket(AF_INET, socket_type, 0)) < 0) { gaim_debug_warning("network", "socket: %s\n", strerror(errno)); return -1; } @@ -251,7 +253,7 @@ } #endif - if (listen(listenfd, 4) != 0) { + if (socket_type == SOCK_STREAM && listen(listenfd, 4) != 0) { gaim_debug_warning("network", "listen: %s\n", strerror(errno)); close(listenfd); return -1; @@ -259,13 +261,16 @@ fcntl(listenfd, F_SETFL, O_NONBLOCK); if ((controlInfo = gaim_upnp_discover()) != NULL) { + char *type_desc = (socket_type == SOCK_STREAM) ? "TCP" : "UDP"; if (!gaim_upnp_set_port_mapping(controlInfo, gaim_network_get_port_from_fd(listenfd), - "TCP")) { + type_desc)) { gaim_upnp_remove_port_mapping(controlInfo, - gaim_network_get_port_from_fd(listenfd), "TCP"); + gaim_network_get_port_from_fd(listenfd), + type_desc); gaim_upnp_set_port_mapping(controlInfo, - gaim_network_get_port_from_fd(listenfd), "TCP"); + gaim_network_get_port_from_fd(listenfd), + type_desc); } g_free(controlInfo->serviceType); @@ -278,15 +283,16 @@ } int -gaim_network_listen(unsigned short port) +gaim_network_listen(unsigned short port, int socket_type) { g_return_val_if_fail(port != 0, -1); - return gaim_network_do_listen(port); + return gaim_network_do_listen(port, socket_type); } int -gaim_network_listen_range(unsigned short start, unsigned short end) +gaim_network_listen_range(unsigned short start, unsigned short end, + int socket_type) { int ret = -1; @@ -299,7 +305,7 @@ } for (; start <= end; start++) { - ret = gaim_network_do_listen(start); + ret = gaim_network_do_listen(start, socket_type); if (ret >= 0) break; }