Skip to content

Commit fe702d1

Browse files
committed
EthernetServer - added end(), begin(port) and ctor without parameters
1 parent 39103da commit fe702d1

File tree

3 files changed

+42
-1
lines changed

3 files changed

+42
-1
lines changed

docs/api.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -884,11 +884,12 @@ Tells the server to begin listening for incoming connections.
884884

885885
```
886886
server.begin()
887+
server.begin(port)
887888
888889
```
889890

890891
#### Parameters
891-
None
892+
- port (optional): the port to listen on (int)
892893

893894
#### Returns
894895
None

src/Ethernet.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,10 +255,13 @@ class EthernetServer : public Server {
255255
private:
256256
uint16_t _port;
257257
public:
258+
EthernetServer() : _port(80) { }
258259
EthernetServer(uint16_t port) : _port(port) { }
259260
EthernetClient available();
260261
EthernetClient accept();
261262
virtual void begin();
263+
void begin(uint16_t port);
264+
void end(uint16_t timeout = 5000);
262265
virtual size_t write(uint8_t);
263266
virtual size_t write(const uint8_t *buf, size_t size);
264267
virtual operator bool();

src/EthernetServer.cpp

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,43 @@ void EthernetServer::begin()
3737
}
3838
}
3939

40+
void EthernetServer::begin(uint16_t port)
41+
{
42+
end();
43+
_port = port;
44+
begin();
45+
}
46+
47+
void EthernetServer::end(uint16_t timeout)
48+
{
49+
for (uint8_t i=0; i < MAX_SOCK_NUM; i++) {
50+
if (server_port[i] == _port) {
51+
Ethernet.socketDisconnect(i);
52+
}
53+
}
54+
unsigned long start = millis();
55+
bool allClosed = false;
56+
while (!allClosed && millis() - start < timeout) {
57+
allClosed = true;
58+
for (uint8_t i=0; i < MAX_SOCK_NUM; i++) {
59+
if (server_port[i] == _port) {
60+
if (Ethernet.socketStatus(i) == SnSR::CLOSED) {
61+
server_port[i] = 0;
62+
} else {
63+
allClosed = false;
64+
}
65+
}
66+
}
67+
delay(1);
68+
}
69+
for (uint8_t i=0; i < MAX_SOCK_NUM; i++) {
70+
if (server_port[i] == _port) {
71+
Ethernet.socketClose(i);
72+
server_port[i] = 0;
73+
}
74+
}
75+
}
76+
4077
EthernetClient EthernetServer::available()
4178
{
4279
bool listening = false;

0 commit comments

Comments
 (0)