Skip to content

Commit 95d8d8e

Browse files
committed
doesn't pick lowest numbered socket in available()
improved EthernetServer::available() such that it will not always pick the lowest numbered socket
1 parent 19a9e4d commit 95d8d8e

File tree

2 files changed

+10
-4
lines changed

2 files changed

+10
-4
lines changed

libraries/Ethernet/src/EthernetServer.cpp

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,17 +52,22 @@ EthernetClient EthernetServer::available()
5252
{
5353
accept();
5454

55-
for (int sock = 0; sock < MAX_SOCK_NUM; sock++) {
56-
EthernetClient client(sock);
57-
if (EthernetClass::_server_port[sock] == _port) {
55+
// increment _sock to avoid returning the same socket again
56+
_sock = (_sock + 1) % MAX_SOCK_NUM;
57+
58+
for (int i = 0; i < MAX_SOCK_NUM; i++) {
59+
EthernetClient client(_sock);
60+
if (EthernetClass::_server_port[_sock] == _port) {
5861
uint8_t s = client.status();
5962
if (s == SnSR::ESTABLISHED || s == SnSR::CLOSE_WAIT) {
6063
if (client.available()) {
61-
// XXX: don't always pick the lowest numbered socket.
64+
// doesn't always pick the lowest numbered socket, because of _sock +
65+
// 1 at the beginning
6266
return client;
6367
}
6468
}
6569
}
70+
_sock = (_sock + 1) % MAX_SOCK_NUM;
6671
}
6772

6873
return EthernetClient(MAX_SOCK_NUM);

libraries/Ethernet/src/EthernetServer.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ public Server {
1010
private:
1111
uint16_t _port;
1212
void accept();
13+
int _sock = -1;
1314
public:
1415
EthernetServer(uint16_t);
1516
EthernetClient available();

0 commit comments

Comments
 (0)