@@ -46,6 +46,22 @@ void EthernetServer::begin(uint16_t port)
4646 begin ();
4747}
4848
49+ void EthernetServer::end (void )
50+ {
51+ /* Free client */
52+ for (int n = 0 ; n < MAX_CLIENT; n++) {
53+ if (_tcp_client[n] != NULL ) {
54+ EthernetClient client (_tcp_client[n]);
55+ client.stop ();
56+ _tcp_client[n] = NULL ;
57+ }
58+ }
59+ if (_tcp_server.pcb != NULL ) {
60+ tcp_close (_tcp_server.pcb );
61+ _tcp_server.pcb = NULL ;
62+ }
63+ }
64+
4965void EthernetServer::accept ()
5066{
5167 /* Free client if disconnected */
@@ -93,10 +109,10 @@ size_t EthernetServer::write(const uint8_t *buffer, size_t size)
93109
94110 accept ();
95111
96- for (int n = 0 ; n < MAX_CLIENT; n ++) {
97- if (_tcp_client[n ] != NULL ) {
98- if (_tcp_client[n ]->pcb != NULL ) {
99- EthernetClient client (_tcp_client[n ]);
112+ for (int i = 0 ; i < MAX_CLIENT; i ++) {
113+ if (_tcp_client[i ] != NULL ) {
114+ if (_tcp_client[i ]->pcb != NULL ) {
115+ EthernetClient client (_tcp_client[i ]);
100116 uint8_t s = client.status ();
101117 if (s == TCP_ACCEPTED) {
102118 n += client.write (buffer, size);
@@ -107,3 +123,9 @@ size_t EthernetServer::write(const uint8_t *buffer, size_t size)
107123
108124 return n;
109125}
126+
127+ EthernetServer::operator bool ()
128+ {
129+ // server is listening for incoming clients
130+ return ((_tcp_server.pcb != NULL ) && (_tcp_server.pcb ->state == LISTEN));
131+ }
0 commit comments