aboutsummaryrefslogtreecommitdiff
path: root/networks/gnutls_buffered.c
diff options
context:
space:
mode:
authorTest_User <hax@andrewyu.org>2024-07-24 02:48:49 -0400
committerTest_User <hax@andrewyu.org>2024-07-24 02:48:49 -0400
commit09c0ec3bdf113dd507135237603bf0096e642172 (patch)
tree6d4b1d55e475d515af61456bc5aac332800f40a9 /networks/gnutls_buffered.c
parentae6d5cd81efaf533c46790bf5e39a6b563c24722 (diff)
downloadhaxircd-09c0ec3bdf113dd507135237603bf0096e642172.tar.gz
haxircd-09c0ec3bdf113dd507135237603bf0096e642172.zip
Probable outgoing IPv6 support
Diffstat (limited to 'networks/gnutls_buffered.c')
-rw-r--r--networks/gnutls_buffered.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/networks/gnutls_buffered.c b/networks/gnutls_buffered.c
index 0c113fa..2c23801 100644
--- a/networks/gnutls_buffered.c
+++ b/networks/gnutls_buffered.c
@@ -210,10 +210,12 @@ int gnutls_buffered_connect(void **handle, struct string address, struct string
mutex_init(&(gnutls_handle->mutex));
struct sockaddr sockaddr;
- if (resolve(address, port, &sockaddr) != 0)
+ socklen_t sockaddr_len;
+ int family;
+ if (resolve(address, port, &sockaddr, &sockaddr_len, &family) != 0)
goto gnutls_connect_destroy_mutex;
- int fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
+ int fd = socket(family, SOCK_STREAM, IPPROTO_TCP);
if (fd == -1)
goto gnutls_connect_destroy_mutex;
@@ -222,7 +224,7 @@ int gnutls_buffered_connect(void **handle, struct string address, struct string
int res;
do {
- res = connect(fd, &sockaddr, sizeof(sockaddr));
+ res = connect(fd, &sockaddr, sockaddr_len);
} while (res < 0 && errno == EINTR);
if (res < 0)
goto gnutls_connect_close;
@@ -287,12 +289,12 @@ int gnutls_buffered_connect(void **handle, struct string address, struct string
goto gnutls_connect_deinit_session;
} while (1);
- addr_out->data = malloc(sizeof(sockaddr));
+ addr_out->data = malloc(sockaddr_len);
if (!addr_out->data)
goto gnutls_connect_deinit_session;
- memcpy(addr_out->data, &sockaddr, sizeof(sockaddr));
- addr_out->len = sizeof(sockaddr);
+ memcpy(addr_out->data, &sockaddr, sockaddr_len);
+ addr_out->len = sockaddr_len;
return fd;