@@ -46,6 +46,22 @@ void EthernetServer::begin(uint16_t port)
46
46
begin ();
47
47
}
48
48
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
+
49
65
void EthernetServer::accept ()
50
66
{
51
67
/* Free client if disconnected */
@@ -93,10 +109,10 @@ size_t EthernetServer::write(const uint8_t *buffer, size_t size)
93
109
94
110
accept ();
95
111
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 ]);
100
116
uint8_t s = client.status ();
101
117
if (s == TCP_ACCEPTED) {
102
118
n += client.write (buffer, size);
@@ -107,3 +123,9 @@ size_t EthernetServer::write(const uint8_t *buffer, size_t size)
107
123
108
124
return n;
109
125
}
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