Subject: Support to IPv6 on Windows
This commit is contained in:
parent
2e8c0256c0
commit
5a473e0dc3
4 changed files with 27 additions and 13 deletions
|
@ -313,19 +313,14 @@ if (LWS_WITH_SQLITE3)
|
|||
endif()
|
||||
|
||||
|
||||
# FIXME: This must be runtime-only option.
|
||||
# The base dir where the test-apps look for the SSL certs.
|
||||
set(LWS_OPENSSL_CLIENT_CERTS ../share CACHE PATH "Server SSL certificate directory")
|
||||
if (WIN32)
|
||||
set(LWS_OPENSSL_CLIENT_CERTS . CACHE PATH "Client SSL certificate directory")
|
||||
|
||||
if (LWS_IPV6)
|
||||
set(LWS_IPV6 OFF)
|
||||
message(WARNING "IPv6 does not currently work on Windows!")
|
||||
endif()
|
||||
if (LWS_UNIX_SOCK)
|
||||
if (LWS_UNIX_SOCK)
|
||||
set(LWS_UNIX_SOCK OFF)
|
||||
message(WARNING "Windows does not support UNIX domain sockets")
|
||||
message(WARNING "Windows does not support UNIX domain sockets")
|
||||
endif()
|
||||
else()
|
||||
set(LWS_OPENSSL_CLIENT_CERTS /etc/pki/tls/certs/ CACHE PATH "Client SSL certificate directory")
|
||||
|
|
|
@ -101,6 +101,8 @@ lws_client_connect_2(struct lws *wsi)
|
|||
memcpy(&server_addr6.sin6_addr,
|
||||
&((struct sockaddr_in6 *)result->ai_addr)->sin6_addr,
|
||||
sizeof(struct in6_addr));
|
||||
server_addr6.sin6_scope_id = ((struct sockaddr_in6 *)result->ai_addr)->sin6_scope_id;
|
||||
server_addr6.sin6_flowinfo = ((struct sockaddr_in6 *)result->ai_addr)->sin6_flowinfo;
|
||||
break;
|
||||
default:
|
||||
lwsl_err("Unknown address family\n");
|
||||
|
|
|
@ -1769,10 +1769,10 @@ lws_socket_bind(struct lws_vhost *vhost, lws_sockfd_type sockfd, int port,
|
|||
#endif
|
||||
struct sockaddr_in serv_addr4;
|
||||
#ifndef LWS_PLAT_OPTEE
|
||||
socklen_t len = sizeof(struct sockaddr);
|
||||
socklen_t len = sizeof(struct sockaddr_storage);
|
||||
#endif
|
||||
int n;
|
||||
struct sockaddr_in sin;
|
||||
struct sockaddr_storage sin;
|
||||
struct sockaddr *v;
|
||||
|
||||
#ifdef LWS_USE_UNIX_SOCK
|
||||
|
@ -1804,6 +1804,7 @@ lws_socket_bind(struct lws_vhost *vhost, lws_sockfd_type sockfd, int port,
|
|||
return -1;
|
||||
}
|
||||
|
||||
#ifndef WIN32
|
||||
if (iface) {
|
||||
struct ifaddrs *addrs, *addr;
|
||||
char ip[NI_MAXHOST];
|
||||
|
@ -1835,6 +1836,7 @@ lws_socket_bind(struct lws_vhost *vhost, lws_sockfd_type sockfd, int port,
|
|||
}
|
||||
freeifaddrs(addrs);
|
||||
}
|
||||
#endif
|
||||
|
||||
serv_addr6.sin6_family = AF_INET6;
|
||||
serv_addr6.sin6_port = htons(port);
|
||||
|
@ -1877,7 +1879,13 @@ lws_socket_bind(struct lws_vhost *vhost, lws_sockfd_type sockfd, int port,
|
|||
lwsl_warn("getsockname: %s\n", strerror(LWS_ERRNO));
|
||||
else
|
||||
#endif
|
||||
port = ntohs(sin.sin_port);
|
||||
#if defined(LWS_USE_IPV6)
|
||||
port = (sin.ss_family == AF_INET6) ?
|
||||
ntohs(((struct sockaddr_in6 *) &sin)->sin6_port) :
|
||||
ntohs(((struct sockaddr_in *) &sin)->sin_port);
|
||||
#else
|
||||
port = ntohs(((struct sockaddr_in *) &sin)->sin_port);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
return port;
|
||||
|
|
15
lib/server.c
15
lib/server.c
|
@ -2004,7 +2004,7 @@ lws_server_socket_service(struct lws_context *context, struct lws *wsi,
|
|||
lws_sockfd_type accept_fd = LWS_SOCK_INVALID;
|
||||
struct allocated_headers *ah;
|
||||
#if LWS_POSIX
|
||||
struct sockaddr_in cli_addr;
|
||||
struct sockaddr_storage cli_addr;
|
||||
socklen_t clilen;
|
||||
#endif
|
||||
int n, len;
|
||||
|
@ -2251,8 +2251,17 @@ try_pollout:
|
|||
|
||||
lws_plat_set_socket_options(wsi->vhost, accept_fd);
|
||||
|
||||
lwsl_debug("accepted new conn port %u on fd=%d\n",
|
||||
ntohs(cli_addr.sin_port), accept_fd);
|
||||
#if defined(LWS_USE_IPV6)
|
||||
lwsl_debug("accepted new conn port %u on fd=%d\n",
|
||||
((cli_addr.ss_family == AF_INET6) ?
|
||||
ntohs(((struct sockaddr_in6 *) &cli_addr)->sin6_port) :
|
||||
ntohs(((struct sockaddr_in *) &cli_addr)->sin_port)),
|
||||
accept_fd);
|
||||
#else
|
||||
lwsl_debug("accepted new conn port %u on fd=%d\n",
|
||||
ntohs(((struct sockaddr_in *) &cli_addr)->sin_port),
|
||||
accept_fd);
|
||||
#endif
|
||||
|
||||
#else
|
||||
/* not very beautiful... */
|
||||
|
|
Loading…
Add table
Reference in a new issue