diff --git a/README.md b/README.md index 6e2262d..b87f2b2 100644 --- a/README.md +++ b/README.md @@ -66,4 +66,4 @@ Call `Ethernet::schedule()` performs an update of the LwIP stack.
## Wiki -You can find information at https://github.com/stm32duino/wiki/wiki/STM32Ethernet +You can find information at https://github.com/stm32duino/Arduino_Core_STM32/wiki/STM32Ethernet diff --git a/src/EthernetServer.cpp b/src/EthernetServer.cpp index 386ae9d..2082498 100644 --- a/src/EthernetServer.cpp +++ b/src/EthernetServer.cpp @@ -46,6 +46,22 @@ void EthernetServer::begin(uint16_t port) begin(); } +void EthernetServer::end(void) +{ + /* Free client */ + for (int n = 0; n < MAX_CLIENT; n++) { + if (_tcp_client[n] != NULL) { + EthernetClient client(_tcp_client[n]); + client.stop(); + _tcp_client[n] = NULL; + } + } + if (_tcp_server.pcb != NULL) { + tcp_close(_tcp_server.pcb); + _tcp_server.pcb = NULL; + } +} + void EthernetServer::accept() { /* Free client if disconnected */ @@ -93,10 +109,10 @@ size_t EthernetServer::write(const uint8_t *buffer, size_t size) accept(); - for (int n = 0; n < MAX_CLIENT; n++) { - if (_tcp_client[n] != NULL) { - if (_tcp_client[n]->pcb != NULL) { - EthernetClient client(_tcp_client[n]); + for (int i = 0; i < MAX_CLIENT; i++) { + if (_tcp_client[i] != NULL) { + if (_tcp_client[i]->pcb != NULL) { + EthernetClient client(_tcp_client[i]); uint8_t s = client.status(); if (s == TCP_ACCEPTED) { n += client.write(buffer, size); @@ -107,3 +123,9 @@ size_t EthernetServer::write(const uint8_t *buffer, size_t size) return n; } + +EthernetServer::operator bool() +{ + // server is listening for incoming clients + return ((_tcp_server.pcb != NULL) && (_tcp_server.pcb->state == LISTEN)); +} diff --git a/src/EthernetServer.h b/src/EthernetServer.h index 3a218d4..10c306c 100644 --- a/src/EthernetServer.h +++ b/src/EthernetServer.h @@ -18,8 +18,10 @@ class EthernetServer : EthernetClient available(); virtual void begin(); virtual void begin(uint16_t port); + void end(void); virtual size_t write(uint8_t); virtual size_t write(const uint8_t *buf, size_t size); + virtual operator bool(); using Print::write; };