(ws) initialize maxWaitBetweenReconnectionRetries to a non zero value ; a zero value was causing spurious reconnections attempts

This commit is contained in:
Benjamin Sergeant 2021-03-22 21:10:03 -07:00
parent 1410797d6f
commit def0243d6d
4 changed files with 121 additions and 94 deletions

View File

@ -2,6 +2,10 @@
All changes to this project will be documented in this file. All changes to this project will be documented in this file.
## [11.1.2] - 2021-03-22
(ws) initialize maxWaitBetweenReconnectionRetries to a non zero value ; a zero value was causing spurious reconnections attempts
## [11.1.1] - 2021-03-20 ## [11.1.1] - 2021-03-20
(cmake) Library can be built as a static or a dynamic library, controlled with BUILD_SHARED_LIBS. Default to static library (cmake) Library can be built as a static or a dynamic library, controlled with BUILD_SHARED_LIBS. Default to static library

View File

@ -136,44 +136,57 @@ const char* inet_ntop(int af, const void* a0, char* s, socklen_t l)
int i, j, max, best; int i, j, max, best;
char buf[100]; char buf[100];
switch (af) { switch (af)
{
case AF_INET: case AF_INET:
if (snprintf(s, l, "%d.%d.%d.%d", a[0],a[1],a[2],a[3]) < l) if (snprintf(s, l, "%d.%d.%d.%d", a[0], a[1], a[2], a[3]) < l) return s;
return s;
break; break;
case AF_INET6: case AF_INET6:
if (memcmp(a, "\0\0\0\0\0\0\0\0\0\0\377\377", 12)) if (memcmp(a, "\0\0\0\0\0\0\0\0\0\0\377\377", 12))
snprintf(buf, sizeof buf, snprintf(buf,
sizeof buf,
"%x:%x:%x:%x:%x:%x:%x:%x", "%x:%x:%x:%x:%x:%x:%x:%x",
256*a[0]+a[1],256*a[2]+a[3], 256 * a[0] + a[1],
256*a[4]+a[5],256*a[6]+a[7], 256 * a[2] + a[3],
256*a[8]+a[9],256*a[10]+a[11], 256 * a[4] + a[5],
256*a[12]+a[13],256*a[14]+a[15]); 256 * a[6] + a[7],
256 * a[8] + a[9],
256 * a[10] + a[11],
256 * a[12] + a[13],
256 * a[14] + a[15]);
else else
snprintf(buf, sizeof buf, snprintf(buf,
sizeof buf,
"%x:%x:%x:%x:%x:%x:%d.%d.%d.%d", "%x:%x:%x:%x:%x:%x:%d.%d.%d.%d",
256*a[0]+a[1],256*a[2]+a[3], 256 * a[0] + a[1],
256*a[4]+a[5],256*a[6]+a[7], 256 * a[2] + a[3],
256*a[8]+a[9],256*a[10]+a[11], 256 * a[4] + a[5],
a[12],a[13],a[14],a[15]); 256 * a[6] + a[7],
256 * a[8] + a[9],
256 * a[10] + a[11],
a[12],
a[13],
a[14],
a[15]);
/* Replace longest /(^0|:)[:0]{2,}/ with "::" */ /* Replace longest /(^0|:)[:0]{2,}/ with "::" */
for (i=best=0, max=2; buf[i]; i++) { for (i = best = 0, max = 2; buf[i]; i++)
{
if (i && buf[i] != ':') continue; if (i && buf[i] != ':') continue;
j = strspn(buf + i, ":0"); j = strspn(buf + i, ":0");
if (j > max) best = i, max = j; if (j > max) best = i, max = j;
} }
if (max>3) { if (max > 3)
{
buf[best] = buf[best + 1] = ':'; buf[best] = buf[best + 1] = ':';
memmove(buf + best + 2, buf + best + max, i - best - max + 1); memmove(buf + best + 2, buf + best + max, i - best - max + 1);
} }
if (strlen(buf) < l) { if (strlen(buf) < l)
{
strcpy(s, buf); strcpy(s, buf);
return s; return s;
} }
break; break;
default: default: errno = EAFNOSUPPORT; return 0;
errno = EAFNOSUPPORT;
return 0;
} }
errno = ENOSPC; errno = ENOSPC;
return 0; return 0;
@ -193,8 +206,10 @@ int inet_pton(int af, const char* s, void* a0)
unsigned char* a = (unsigned char*) a0; unsigned char* a = (unsigned char*) a0;
int i, j, v, d, brk = -1, need_v4 = 0; int i, j, v, d, brk = -1, need_v4 = 0;
if (af==AF_INET) { if (af == AF_INET)
for (i=0; i<4; i++) { {
for (i = 0; i < 4; i++)
{
for (v = j = 0; j < 3 && isdigit(s[j]); j++) for (v = j = 0; j < 3 && isdigit(s[j]); j++)
v = 10 * v + s[j] - '0'; v = 10 * v + s[j] - '0';
if (j == 0 || (j > 1 && s[0] == '0') || v > 255) return 0; if (j == 0 || (j > 1 && s[0] == '0') || v > 255) return 0;
@ -204,15 +219,19 @@ int inet_pton(int af, const char* s, void* a0)
s += j + 1; s += j + 1;
} }
return 0; return 0;
} else if (af!=AF_INET6) { }
else if (af != AF_INET6)
{
errno = EAFNOSUPPORT; errno = EAFNOSUPPORT;
return -1; return -1;
} }
if (*s == ':' && *++s != ':') return 0; if (*s == ':' && *++s != ':') return 0;
for (i=0; ; i++) { for (i = 0;; i++)
if (s[0]==':' && brk<0) { {
if (s[0] == ':' && brk < 0)
{
brk = i; brk = i;
ip[i & 7] = 0; ip[i & 7] = 0;
if (!*++s) break; if (!*++s) break;
@ -225,7 +244,8 @@ int inet_pton(int af, const char* s, void* a0)
ip[i & 7] = v; ip[i & 7] = v;
if (!s[j] && (brk >= 0 || i == 7)) break; if (!s[j] && (brk >= 0 || i == 7)) break;
if (i == 7) return 0; if (i == 7) return 0;
if (s[j]!=':') { if (s[j] != ':')
{
if (s[j] != '.' || (i < 6 && brk < 0)) return 0; if (s[j] != '.' || (i < 6 && brk < 0)) return 0;
need_v4 = 1; need_v4 = 1;
i++; i++;
@ -233,11 +253,14 @@ int inet_pton(int af, const char* s, void* a0)
} }
s += j + 1; s += j + 1;
} }
if (brk>=0) { if (brk >= 0)
{
memmove(ip + brk + 7 - i, ip + brk, 2 * (i + 1 - brk)); memmove(ip + brk + 7 - i, ip + brk, 2 * (i + 1 - brk));
for (j=0; j<7-i; j++) ip[brk+j] = 0; for (j = 0; j < 7 - i; j++)
ip[brk + j] = 0;
} }
for (j=0; j<8; j++) { for (j = 0; j < 8; j++)
{
*a++ = ip[j] >> 8; *a++ = ip[j] >> 8;
*a++ = ip[j]; *a++ = ip[j];
} }

View File

@ -6,4 +6,4 @@
#pragma once #pragma once
#define IX_WEBSOCKET_VERSION "11.1.1" #define IX_WEBSOCKET_VERSION "11.1.2"

View File

@ -2487,7 +2487,7 @@ int main(int argc, char** argv)
int delayMs = -1; int delayMs = -1;
int count = 1; int count = 1;
int msgCount = 1000 * 1000; int msgCount = 1000 * 1000;
uint32_t maxWaitBetweenReconnectionRetries; uint32_t maxWaitBetweenReconnectionRetries = 10 * 1000; // 10 seconds
int pingIntervalSecs = 30; int pingIntervalSecs = 30;
int runCount = 1; int runCount = 1;