mirror of
https://github.com/warmcat/libwebsockets.git
synced 2025-03-09 00:00:04 +01:00
log: cherrypick common errno to be strings
Pick some common errno constants for the platform and provide strings for them. Replace numeric errno logging with the new api for client. Replace any usage of strerror() in network code with the new api. For constrained devices, this should give a small saving on .rodata. Leave some usages in daemonize.c and unix plat where the size isn't going to matter.
This commit is contained in:
parent
c2ac541f43
commit
3f4800b88f
6 changed files with 145 additions and 48 deletions
|
@ -841,11 +841,13 @@ lws_create_adopt_udp(struct lws_vhost *vhost, const char *ads, int port,
|
|||
n = getaddrinfo(ads, buf, &h, &r);
|
||||
if (n) {
|
||||
#if !defined(LWS_PLAT_FREERTOS)
|
||||
lwsl_info("%s: getaddrinfo error: %s\n", __func__,
|
||||
gai_strerror(n));
|
||||
lwsl_cx_info(vhost->context, "getaddrinfo error: %d", n);
|
||||
#else
|
||||
lwsl_info("%s: getaddrinfo error: %s\n", __func__,
|
||||
strerror(n));
|
||||
#if !defined(LWS_WITH_NO_LOGS)
|
||||
char t16[16];
|
||||
lwsl_cx_info(vhost->context, "getaddrinfo error: %s",
|
||||
lws_errno_describe(LWS_ERRNO, t16, sizeof(t16)));
|
||||
#endif
|
||||
#endif
|
||||
//freeaddrinfo(r);
|
||||
goto bail1;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* libwebsockets - small server side websockets and web server implementation
|
||||
*
|
||||
* Copyright (C) 2010 - 2020 Andy Green <andy@warmcat.com>
|
||||
* Copyright (C) 2010 - 2021 Andy Green <andy@warmcat.com>
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to
|
||||
|
@ -73,6 +73,9 @@ typedef enum {
|
|||
static lcccr_t
|
||||
lws_client_connect_check(struct lws *wsi)
|
||||
{
|
||||
#if !defined(LWS_WITH_NO_LOGS)
|
||||
char t16[16];
|
||||
#endif
|
||||
int en = 0;
|
||||
#if !defined(WIN32)
|
||||
int e;
|
||||
|
@ -88,15 +91,17 @@ lws_client_connect_check(struct lws *wsi)
|
|||
|
||||
#if !defined(WIN32)
|
||||
if (!getsockopt(wsi->desc.sockfd, SOL_SOCKET, SO_ERROR, &e, &sl)) {
|
||||
|
||||
en = LWS_ERRNO;
|
||||
if (!e) {
|
||||
lwsl_wsi_debug(wsi, "getsockopt: conn OK errno %d", en);
|
||||
lwsl_wsi_debug(wsi, "getsockopt: conn OK errno %s",
|
||||
lws_errno_describe(en, t16, sizeof(t16)));
|
||||
|
||||
return LCCCR_CONNECTED;
|
||||
}
|
||||
|
||||
lwsl_wsi_notice(wsi, "getsockopt fd %d says e %d",
|
||||
wsi->desc.sockfd, e);
|
||||
lwsl_wsi_notice(wsi, "getsockopt fd %d says %s", wsi->desc.sockfd,
|
||||
lws_errno_describe(e, t16, sizeof(t16)));
|
||||
|
||||
return LCCCR_FAILED;
|
||||
}
|
||||
|
@ -120,12 +125,15 @@ lws_client_connect_check(struct lws *wsi)
|
|||
if (!en || en == WSAEINVAL ||
|
||||
en == WSAEWOULDBLOCK ||
|
||||
en == WSAEALREADY) {
|
||||
lwsl_wsi_debug(wsi, "errno %d", en);
|
||||
lwsl_wsi_debug(wsi, "%s",
|
||||
lws_errno_describe(en, t16, sizeof(t16)));
|
||||
|
||||
return LCCCR_CONTINUE;
|
||||
}
|
||||
#endif
|
||||
|
||||
lwsl_wsi_notice(wsi, "connect check take as FAILED: errno %d", en);
|
||||
lwsl_wsi_notice(wsi, "connect check FAILED: %s",
|
||||
lws_errno_describe(en, t16, sizeof(t16)));
|
||||
|
||||
return LCCCR_FAILED;
|
||||
}
|
||||
|
@ -148,14 +156,14 @@ lws_client_connect_3_connect(struct lws *wsi, const char *ads,
|
|||
const char *cce = "Unable to connect", *iface;
|
||||
const struct sockaddr *psa = NULL;
|
||||
uint16_t port = wsi->conn_port;
|
||||
char dcce[48], t16[16];
|
||||
lws_dns_sort_t *curr;
|
||||
ssize_t plen = 0;
|
||||
lws_dll2_t *d;
|
||||
char dcce[48];
|
||||
#if defined(LWS_WITH_SYS_FAULT_INJECTION)
|
||||
int cfail;
|
||||
#endif
|
||||
int m, af = 0;
|
||||
int m, af = 0, en;
|
||||
|
||||
/*
|
||||
* If we come here with result set, we need to convert getaddrinfo
|
||||
|
@ -221,7 +229,6 @@ lws_client_connect_3_connect(struct lws *wsi, const char *ads,
|
|||
|
||||
if (lwsi_state(wsi) == LRS_WAITING_CONNECT &&
|
||||
lws_socket_is_valid(wsi->desc.sockfd)) {
|
||||
|
||||
if (!wsi->dns_sorted_list.count &&
|
||||
!wsi->sul_connect_timeout.list.owner)
|
||||
/* no dns results and no ongoing timeout for one */
|
||||
|
@ -236,8 +243,9 @@ lws_client_connect_3_connect(struct lws *wsi, const char *ads,
|
|||
case LCCCR_CONTINUE:
|
||||
return NULL;
|
||||
default:
|
||||
lws_snprintf(dcce, sizeof(dcce), "conn fail: errno %d",
|
||||
LWS_ERRNO);
|
||||
en = LWS_ERRNO;
|
||||
lws_snprintf(dcce, sizeof(dcce), "conn fail: %s",
|
||||
lws_errno_describe(en, t16, sizeof(t16)));
|
||||
cce = dcce;
|
||||
lwsl_wsi_debug(wsi, "%s", dcce);
|
||||
lws_metrics_caliper_report(wsi->cal_conn, METRES_NOGO);
|
||||
|
@ -343,9 +351,11 @@ ads_known:
|
|||
}
|
||||
|
||||
if (!lws_socket_is_valid(wsi->desc.sockfd)) {
|
||||
en = LWS_ERRNO;
|
||||
|
||||
lws_snprintf(dcce, sizeof(dcce),
|
||||
"conn fail: skt creation: errno %d",
|
||||
LWS_ERRNO);
|
||||
"conn fail: skt creation: %s",
|
||||
lws_errno_describe(en, t16, sizeof(t16)));
|
||||
cce = dcce;
|
||||
lwsl_wsi_warn(wsi, "%s", dcce);
|
||||
goto try_next_dns_result;
|
||||
|
@ -357,9 +367,11 @@ ads_known:
|
|||
#else
|
||||
0)) {
|
||||
#endif
|
||||
en = LWS_ERRNO;
|
||||
|
||||
lws_snprintf(dcce, sizeof(dcce),
|
||||
"conn fail: skt options: errno %d",
|
||||
LWS_ERRNO);
|
||||
"conn fail: skt options: %s",
|
||||
lws_errno_describe(en, t16, sizeof(t16)));
|
||||
cce = dcce;
|
||||
lwsl_wsi_warn(wsi, "%s", dcce);
|
||||
goto try_next_dns_result_closesock;
|
||||
|
@ -517,8 +529,9 @@ ads_known:
|
|||
errno_copy = 999;
|
||||
#endif
|
||||
|
||||
lwsl_wsi_debug(wsi, "connect: fd %d errno: %d",
|
||||
wsi->desc.sockfd, errno_copy);
|
||||
lwsl_wsi_debug(wsi, "connect: fd %d, %s",
|
||||
wsi->desc.sockfd,
|
||||
lws_errno_describe(errno_copy, t16, sizeof(t16)));
|
||||
|
||||
if (errno_copy &&
|
||||
errno_copy != LWS_EALREADY &&
|
||||
|
@ -551,8 +564,9 @@ ads_known:
|
|||
sizeof(nads));
|
||||
|
||||
lws_snprintf(dcce, sizeof(dcce),
|
||||
"conn fail: errno %d: %s:%d",
|
||||
errno_copy, nads, port);
|
||||
"conn fail: %s: %s:%d",
|
||||
lws_errno_describe(errno_copy, t16, sizeof(t16)),
|
||||
nads, port);
|
||||
cce = dcce;
|
||||
|
||||
wsi->sa46_peer.sa4.sin_family = 0;
|
||||
|
@ -560,8 +574,8 @@ ads_known:
|
|||
#if defined(LWS_WITH_UNIX_SOCK)
|
||||
} else {
|
||||
lws_snprintf(dcce, sizeof(dcce),
|
||||
"conn fail: errno %d: UDS %s",
|
||||
errno_copy, ads);
|
||||
"conn fail: %s: UDS %s",
|
||||
lws_errno_describe(errno_copy, t16, sizeof(t16)), ads);
|
||||
cce = dcce;
|
||||
}
|
||||
#endif
|
||||
|
@ -618,8 +632,10 @@ conn_good:
|
|||
#endif
|
||||
if (getsockname((int)wsi->desc.sockfd,
|
||||
(struct sockaddr *)&wsi->sa46_local,
|
||||
&salen) == -1)
|
||||
lwsl_warn("getsockname: %s\n", strerror(LWS_ERRNO));
|
||||
&salen) == -1) {
|
||||
en = LWS_ERRNO;
|
||||
lwsl_warn("getsockname: %s\n", lws_errno_describe(en, t16, sizeof(t16)));
|
||||
}
|
||||
#if defined(_DEBUG)
|
||||
#if defined(LWS_WITH_UNIX_SOCK)
|
||||
if (wsi->unix_skt)
|
||||
|
|
|
@ -25,6 +25,62 @@
|
|||
#include "private-lib-core.h"
|
||||
#include <errno.h>
|
||||
|
||||
const char *
|
||||
lws_errno_describe(int en, char *result, size_t len)
|
||||
{
|
||||
#if !defined(WIN32)
|
||||
switch (en) {
|
||||
case EAGAIN:
|
||||
return "EAGAIN";
|
||||
case EALREADY:
|
||||
return "EALREADY";
|
||||
case EINPROGRESS:
|
||||
return "EINPROGRESS";
|
||||
case EINTR:
|
||||
return "EINTR";
|
||||
case EISCONN:
|
||||
return "EISCONN";
|
||||
case ENOTCONN:
|
||||
return "ENOTCONN";
|
||||
case EADDRINUSE:
|
||||
return "EADDRINUSE";
|
||||
case EHOSTUNREACH:
|
||||
return "EHOSTUNREACH";
|
||||
case ECONNREFUSED:
|
||||
return "ECONNREFUSED";
|
||||
default:
|
||||
break;
|
||||
}
|
||||
lws_snprintf(result, len, "errno %d", en);
|
||||
|
||||
return result;
|
||||
#else
|
||||
switch (en) {
|
||||
case WSAEISCONN:
|
||||
return "WSAEISCONN";
|
||||
case WSAEALREADY:
|
||||
return "WSAEALREADY";
|
||||
case WSAEINVAL:
|
||||
return "WSAEINVAL";
|
||||
case WSAENETUNREACH:
|
||||
return "WSAENETUNREACH";
|
||||
case WSAECONNABORTED:
|
||||
return "WSAECONNABORTED";
|
||||
case WSAECONNRESET:
|
||||
return "WSAECONNRESET";
|
||||
case WSAETIMEDOUT:
|
||||
return "WSAETIMEDOUT";
|
||||
case WSAECONNREFUSED:
|
||||
return "WSAECONNREFUSED";
|
||||
default:
|
||||
break;
|
||||
}
|
||||
lws_snprintf(result, len, "wsaerrno %d", en);
|
||||
|
||||
return result;
|
||||
#endif
|
||||
}
|
||||
|
||||
#if !defined(LWS_PLAT_FREERTOS) && !defined(LWS_PLAT_OPTEE)
|
||||
static int
|
||||
interface_to_sa(struct lws_vhost *vh, const char *ifname,
|
||||
|
@ -58,7 +114,11 @@ lws_get_addresses(struct lws_vhost *vh, void *ads, char *name,
|
|||
if (!lws_plat_inet_ntop(AF_INET6,
|
||||
&((struct sockaddr_in6 *)ads)->sin6_addr,
|
||||
rip, (socklen_t)rip_len)) {
|
||||
lwsl_vhost_err(vh, "inet_ntop: %s", strerror(LWS_ERRNO));
|
||||
#if !defined(LWS_WITH_NO_LOGS)
|
||||
char t16[16];
|
||||
lwsl_vhost_err(vh, "inet_ntop: %s",
|
||||
lws_errno_describe(LWS_ERRNO, t16, sizeof(t16)));
|
||||
#endif
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -132,8 +192,10 @@ lws_get_peer_simple_fd(lws_sockfd_type fd, char *name, size_t namelen)
|
|||
socklen_t len = sizeof(sa46);
|
||||
|
||||
if (getpeername(fd, (struct sockaddr *)&sa46, &len) < 0) {
|
||||
char t16[16];
|
||||
|
||||
lws_snprintf(name, namelen, "getpeername: %s",
|
||||
strerror(LWS_ERRNO));
|
||||
lws_errno_describe(LWS_ERRNO, t16, sizeof(t16)));
|
||||
return name;
|
||||
}
|
||||
|
||||
|
@ -177,7 +239,12 @@ lws_get_peer_addresses(struct lws *wsi, lws_sockfd_type fd, char *name,
|
|||
}
|
||||
|
||||
if (getpeername(fd, p, &len) < 0) {
|
||||
lwsl_wsi_warn(wsi, "getpeername: %s", strerror(LWS_ERRNO));
|
||||
#if !defined(LWS_WITH_NO_LOGS)
|
||||
char t16[16];
|
||||
|
||||
lwsl_wsi_warn(wsi, "getpeername: %s",
|
||||
lws_errno_describe(LWS_ERRNO, t16, sizeof(t16)));
|
||||
#endif
|
||||
goto bail;
|
||||
}
|
||||
|
||||
|
@ -318,17 +385,24 @@ lws_socket_bind(struct lws_vhost *vhost, struct lws *wsi,
|
|||
n = bind(sockfd, v, (socklen_t)n);
|
||||
#ifdef LWS_WITH_UNIX_SOCK
|
||||
if (n < 0 && af == AF_UNIX) {
|
||||
lwsl_wsi_err(wsi, "ERROR on binding fd %d to \"%s\" (%d %d)",
|
||||
sockfd, iface, n, LWS_ERRNO);
|
||||
|
||||
#if !defined(LWS_WITH_NO_LOGS)
|
||||
char t16[16];
|
||||
lwsl_wsi_err(wsi, "ERROR on binding fd %d to \"%s\" (%s)",
|
||||
sockfd, iface,
|
||||
lws_errno_describe(LWS_ERRNO, t16, sizeof(t16)));
|
||||
#endif
|
||||
return LWS_ITOSA_NOT_EXIST;
|
||||
} else
|
||||
#endif
|
||||
if (n < 0) {
|
||||
int _lws_errno = LWS_ERRNO;
|
||||
#if !defined(LWS_WITH_NO_LOGS)
|
||||
char t16[16];
|
||||
|
||||
lwsl_wsi_err(wsi, "ERROR on binding fd %d to port %d (%d %d)",
|
||||
sockfd, port, n, _lws_errno);
|
||||
lwsl_wsi_err(wsi, "ERROR on binding fd %d to port %d (%s)",
|
||||
sockfd, port,
|
||||
lws_errno_describe(_lws_errno, t16, sizeof(t16)));
|
||||
#endif
|
||||
|
||||
/* if something already listening, tell caller to fail permanently */
|
||||
|
||||
|
@ -376,9 +450,14 @@ lws_socket_bind(struct lws_vhost *vhost, struct lws *wsi,
|
|||
#endif
|
||||
|
||||
#ifndef LWS_PLAT_OPTEE
|
||||
if (getsockname(sockfd, (struct sockaddr *)psin, &len) == -1)
|
||||
lwsl_wsi_warn(wsi, "getsockname: %s", strerror(LWS_ERRNO));
|
||||
else
|
||||
if (getsockname(sockfd, (struct sockaddr *)psin, &len) == -1) {
|
||||
#if !defined(LWS_WITH_NO_LOGS)
|
||||
char t16[16];
|
||||
|
||||
lwsl_wsi_warn(wsi, "getsockname: %s",
|
||||
lws_errno_describe(LWS_ERRNO, t16, sizeof(t16)));
|
||||
#endif
|
||||
} else
|
||||
#endif
|
||||
#if defined(LWS_WITH_IPV6)
|
||||
port = (sin.ss_family == AF_INET6) ?
|
||||
|
|
|
@ -1399,6 +1399,9 @@ lws_sort_dns(struct lws *wsi, const struct addrinfo *result);
|
|||
int
|
||||
lws_broadcast(struct lws_context_per_thread *pt, int reason, void *in, size_t len);
|
||||
|
||||
const char *
|
||||
lws_errno_describe(int en, char *result, size_t len);
|
||||
|
||||
|
||||
#if defined(LWS_WITH_PEER_LIMITS)
|
||||
void
|
||||
|
|
|
@ -46,10 +46,7 @@
|
|||
#include <errno.h>
|
||||
#endif
|
||||
#include <signal.h>
|
||||
#if defined(LWS_AMAZON_RTOS)
|
||||
const char *
|
||||
gai_strerror(int);
|
||||
#else
|
||||
#if !defined(LWS_AMAZON_RTOS)
|
||||
#include <sys/socket.h>
|
||||
#endif
|
||||
|
||||
|
|
|
@ -31,7 +31,11 @@ extern int openssl_websocket_private_data_index,
|
|||
static char openssl_ex_indexes_acquired;
|
||||
#endif
|
||||
|
||||
char* lws_ssl_get_error_string(int status, int ret, char *buf, size_t len) {
|
||||
char *
|
||||
lws_ssl_get_error_string(int status, int ret, char *buf, size_t len)
|
||||
{
|
||||
char t16[16];
|
||||
|
||||
switch (status) {
|
||||
case SSL_ERROR_NONE:
|
||||
return lws_strncpy(buf, "SSL_ERROR_NONE", len);
|
||||
|
@ -53,12 +57,8 @@ char* lws_ssl_get_error_string(int status, int ret, char *buf, size_t len) {
|
|||
lws_snprintf(buf, len, "SSL_ERROR_SYSCALL: EOF");
|
||||
return buf;
|
||||
case -1:
|
||||
#ifndef LWS_PLAT_OPTEE
|
||||
lws_snprintf(buf, len, "SSL_ERROR_SYSCALL: %s",
|
||||
strerror(errno));
|
||||
#else
|
||||
lws_snprintf(buf, len, "SSL_ERROR_SYSCALL: %d", errno);
|
||||
#endif
|
||||
lws_errno_describe(LWS_ERRNO, t16, sizeof(t16)));
|
||||
return buf;
|
||||
default:
|
||||
return strncpy(buf, "SSL_ERROR_SYSCALL", len);
|
||||
|
|
Loading…
Add table
Reference in a new issue