summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBelgin Știrbu <belginstirbu@hotmail.com>2022-04-15 11:13:22 -0500
committerBelgin Știrbu <belginstirbu@hotmail.com>2022-04-15 11:13:22 -0500
commit4de3342dfcf1f1ccd25c627f67587569899f0890 (patch)
tree70b6f5ee24735a7c7cd3f0e24713b398bcde2066
parent7f5f333aa5591aff2ca1d93157a76836592cecc0 (diff)
downloadpidgin-4de3342dfcf1f1ccd25c627f67587569899f0890.tar.gz
Fix IRC file transfers on Windows
This might also fix some other things, like getsockname error #10014 Testing Done: Tested on Windows and Linux. Executed some file transfers over IRC and they worked. Bugs closed: PIDGIN-17175 Reviewed at https://reviews.imfreedom.org/r/1382/
-rw-r--r--libpurple/network.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/libpurple/network.c b/libpurple/network.c
index 08b07c2975..57bc4fa280 100644
--- a/libpurple/network.c
+++ b/libpurple/network.c
@@ -441,6 +441,14 @@ purple_network_do_listen(unsigned short port, int socket_family, int socket_type
* XXX - Try IPv6 addresses first?
*/
for (next = res; next != NULL; next = next->ai_next) {
+#if _WIN32
+ /*
+ * On Windows, the address family for the transport
+ * address should always be set to AF_INET.
+ */
+ if(next->ai_family != AF_INET)
+ continue;
+#endif
listenfd = socket(next->ai_family, next->ai_socktype, next->ai_protocol);
if (listenfd < 0)
continue;
@@ -598,7 +606,7 @@ void purple_network_listen_cancel(PurpleNetworkListenData *listen_data)
unsigned short
purple_network_get_port_from_fd(int fd)
{
- struct sockaddr_in addr;
+ common_sockaddr_t addr;
socklen_t len;
g_return_val_if_fail(fd >= 0, 0);
@@ -609,7 +617,7 @@ purple_network_get_port_from_fd(int fd)
return 0;
}
- return ntohs(addr.sin_port);
+ return ntohs(addr.in.sin_port);
}
#ifdef _WIN32