summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordefanor <defanor@uberspace.net>2021-10-03 12:35:10 +0300
committerdefanor <defanor@uberspace.net>2021-10-03 12:35:10 +0300
commitf8a1ef1b37d8a6cf699f99c1bf6150eccd8c96d1 (patch)
tree87bab0078cab26d67c2ab4b25630124194b4ac71
parent804fe06083770b89ebcee85614ec52b30c251d87 (diff)
Fix IPv6 address handling
-rw-r--r--src/rexmpp_tcp.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/rexmpp_tcp.c b/src/rexmpp_tcp.c
index a4d5018..13e6e81 100644
--- a/src/rexmpp_tcp.c
+++ b/src/rexmpp_tcp.c
@@ -143,10 +143,12 @@ rexmpp_tcp_conn_init (rexmpp_t *s,
conn->connection_attempts++;
return REXMPP_CONN_IN_PROGRESS;
}
- struct sockaddr_in addr_v6;
+ struct sockaddr_in6 addr_v6;
if (inet_pton(AF_INET6, host, &addr_v6)) {
- addr_v6.sin_family = AF_INET6;
- addr_v6.sin_port = htons(port);
+ addr_v6.sin6_family = AF_INET6;
+ addr_v6.sin6_port = htons(port);
+ addr_v6.sin6_flowinfo = 0;
+ addr_v6.sin6_scope_id = 0;
conn->sockets[conn->connection_attempts] =
socket(AF_INET6, SOCK_STREAM, 0);
flags = fcntl(conn->sockets[conn->connection_attempts], F_GETFL, 0);
@@ -272,6 +274,8 @@ rexmpp_tcp_conn_proceed (rexmpp_t *s,
len);
addr_v6.sin6_family = AF_INET6;
addr_v6.sin6_port = htons(conn->port);
+ addr_v6.sin6_flowinfo = 0;
+ addr_v6.sin6_scope_id = 0;
domain = AF_INET6;
addr = (struct sockaddr*)&addr_v6;
addrlen = sizeof(addr_v6);