#ifdef LWS_USE_IPV6
if (wsi->ipv6) {
+ if (n) {
+ /* lws_getaddrinfo46 failed, there is no usable result */
+ lwsl_notice("%s: lws_getaddrinfo46 failed %d\n",
+ __func__, n);
+ cce = "ipv6 lws_getaddrinfo46 failed";
+ goto oom4;
+ }
+
memset(&sa46, 0, sizeof(sa46));
sa46.sa6.sin6_family = AF_INET6;
#endif
#ifdef LWS_USE_IPV6
- if (wsi->ipv6) {
- sa46.sa6.sin6_port = htons(port);
+ if (wsi->ipv6)
wsi->desc.sockfd = socket(AF_INET6, SOCK_STREAM, 0);
- } else
+ else
#endif
- {
- sa46.sa4.sin_port = htons(port);
wsi->desc.sockfd = socket(AF_INET, SOCK_STREAM, 0);
- }
if (!lws_socket_is_valid(wsi->desc.sockfd)) {
lwsl_warn("Unable to open socket\n");
}
#ifdef LWS_USE_IPV6
- if (wsi->ipv6)
+ if (wsi->ipv6) {
+ sa46.sa6.sin6_port = htons(port);
n = sizeof(struct sockaddr_in6);
- else
+ } else
#endif
+ {
+ sa46.sa4.sin_port = htons(port);
n = sizeof(struct sockaddr);
+ }
if (connect(wsi->desc.sockfd, (const struct sockaddr *)&sa46, n) == -1 ||
LWS_ERRNO == LWS_EISCONN) {
}
wsi->redirects++;
-#ifdef LWS_OPENSSL_SUPPORT
- wsi->use_ssl = ssl;
-#else
- if (ssl) {
- lwsl_err("%s: not configured for ssl\n", __func__);
- return NULL;
- }
-#endif
-
p = lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_ORIGIN);
if (p)
strncpy(origin, p, sizeof(origin) - 1);
if (p)
strncpy(method, p, sizeof(iface) - 1);
- lwsl_debug("redirect ads='%s', port=%d, path='%s', ssl = %d\n",
+ lwsl_notice("redirect ads='%s', port=%d, path='%s', ssl = %d\n",
address, port, path, ssl);
/* close the connection by hand */
+#ifdef LWS_OPENSSL_SUPPORT
+ lws_ssl_close(wsi);
+#endif
+
#ifdef LWS_USE_LIBUV
if (LWS_LIBUV_ENABLED(wsi->context)) {
lwsl_debug("%s: lws_libuv_closehandle: wsi %p\n", __func__, wsi);
remove_wsi_socket_from_fds(wsi);
+#ifdef LWS_OPENSSL_SUPPORT
+ wsi->use_ssl = ssl;
+#else
+ if (ssl) {
+ lwsl_err("%s: not configured for ssl\n", __func__);
+ return NULL;
+ }
+#endif
+
wsi->desc.sockfd = LWS_SOCK_INVALID;
wsi->state = LWSS_CLIENT_UNCONNECTED;
wsi->protocol = NULL;