Articolo su Ethernet shield client

Tra i bug-fix all'IDE di Arduino proposti su github, ho trovato una patch che sembra risolvere o perlomeno migliorare il comportamento del chip Wiznet. Tra le situazioni in cui il chip sembra freezarsi e una delle cause potrebbe essere che quando si trova nella condizione di lasciare una connessione, si mette nello stato di CLOSE_WAIT, quindi sta lì ad aspettate una risposta che di fatto non riceve perchè qualcosa è andato storto nella trasmissione precedente.

Questa cosa è tra quelle che succedono più frequentemente la patch proposta mira ad aggiungere alle condizioni per cui chiudere la connessione anche quella lo stato di CLOSE_WAIT. Quindi, come citavate qualche post fa, sembra essere l'implementazione di un workaround che migliora parecchio la situazione di freeze della Ethernet Shield.

Il lavoro da fare per applicare questa patch è davvero minimo perchè basta aprire il file EthernetClient.cpp che trovate nella directory della libreria Ethernet e nel metodo int EthernetClient::connect(IPAddress ip, uint16_t port) aggiungere la condizione || s == SnSR::CLOSE_WAIT all'interno del dell' if (s == SnSR::CLOSED || s == SnSR::FIN_WAIT)
quindi viene fuori così:

if (s == SnSR::CLOSED || s == SnSR::FIN_WAIT || s == SnSR::CLOSE_WAIT)

Se riceverà un buon numero di feedback positivi, questa patch verrà introdotta nella prossima release dell'IDE. A voi testarla, secondo me funziona!