I firewall di rete e gateway cloud (AWS NAT Gateway, Azure) chiudono silenziosamente le connessioni TCP inattive da più di pochi minuti; senza l'invio periodico di sonde 'KeepAlive' con 'net.Dialer.KeepAlive', le scritture successive vanno in timeout.
TCP_KEEPALIVE_DROP
→
La chiamata a 'net.Dial' fallisce perché nessun processo sul server o porta di destinazione ha aperto un socket TCP in stato LISTEN o a causa del blocco del firewall.
ECONNREFUSED_DIAL
→
L'istanza predefinita 'http.DefaultClient' (utilizzata da 'http.Get' e 'http.Post') non imposta alcun timeout di rete; se il server remoto non risponde o cade in stato di stallo, la connessione e la goroutine rimangono congelate all'infinito; occorre istanziare un client custom con '&http.Client{Timeout: 10 * time.Second}'.
HTTP_DEFAULT_CLIENT_NO_TIMEOUT
→
Dimenticare l'istruzione 'defer resp.Body.Close()' dopo una richiesta con 'http.Get' o client HTTP impedisce il riutilizzo della connessione TCP nel pool di keep-alive causando l'esaurimento dei file descriptor.
HTTP_BODY_LEAK
→
La chiamata a 'net.Listen' o 'http.ListenAndServe' fallisce all'avvio perché la porta di rete specificata è già occupata da un'altra istanza dell'applicazione o da un altro servizio in esecuzione.
EADDRINUSE_NET
→
L'errore compare quando il server remoto invia un pacchetto TCP RST chiudendo bruscamente il socket, tipicamente a causa di crash del processo remoto o timeout forzato.
ECONNRESET_TCP
→
La negoziazione TLS fallisce perché il server o client remoto richiede algoritmi crittografici obsoleti (come TLS 1.0/1.1 o cipher CBC) disabilitati di default nelle versioni recenti di Go.
TLS_HANDSHAKE_NO_MUTUAL_CIPHER
→
Il client HTTP di Go rifiuta la connessione HTTPS perché la catena del certificato SSL/TLS del server è autofirmata o emessa da una CA aziendale interna non presente nel root pool di sistema.
TLS_UNKNOWN_AUTHORITY
→