From 983d8af8140f09fd3975d5deef64244102912550 Mon Sep 17 00:00:00 2001 From: amcewen Date: Sun, 2 Jan 2011 22:49:11 +0000 Subject: [PATCH] Final changes for the Client part of issue 416, which actually include the corrent return values. This should have been in the previous commit, but I'm still getting my head round git. --- libraries/Ethernet/Client.cpp | 2 +- libraries/Ethernet/utility/socket.cpp | 17 ++++++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/libraries/Ethernet/Client.cpp b/libraries/Ethernet/Client.cpp index 51cb5eb14..96d5c7eed 100644 --- a/libraries/Ethernet/Client.cpp +++ b/libraries/Ethernet/Client.cpp @@ -77,7 +77,7 @@ int Client::available() { int Client::read() { uint8_t b; - if ( recv(_sock, &b, 1) ) + if ( recv(_sock, &b, 1) > 0 ) { // recv worked return b; diff --git a/libraries/Ethernet/utility/socket.cpp b/libraries/Ethernet/utility/socket.cpp index 57cdf0d4c..cad54a5e3 100644 --- a/libraries/Ethernet/utility/socket.cpp +++ b/libraries/Ethernet/utility/socket.cpp @@ -148,7 +148,22 @@ uint16_t recv(SOCKET s, uint8_t *buf, uint16_t len) { // Check how much data is available uint16_t ret = W5100.getRXReceivedSize(s); - if (ret > len) + if ( ret == 0 ) + { + // No data available. + uint8_t status = W5100.readSnSR(s); + if ( s == SnSR::LISTEN || s == SnSR::CLOSED || s == SnSR::CLOSE_WAIT ) + { + // The remote end has closed its side of the connection, so this is the eof state + ret = 0; + } + else + { + // The connection is still up, but there's no data waiting to be read + ret = -1; + } + } + else if (ret > len) { ret = len; }