diff --git a/build/shared/revisions.txt b/build/shared/revisions.txt index c690d35e7..c24a1bd6a 100644 --- a/build/shared/revisions.txt +++ b/build/shared/revisions.txt @@ -4,6 +4,7 @@ ARDUINO 1.5.5 BETA [libraries] * avr: Fixed buffer overflow in File::doBuffer() (dreggy) * avr: Fixed timeout in Bridge::transfer() +* avr: Fixed behavior of EthernetClient::flush() ARDUINO 1.5.4 BETA 2013.09.10 diff --git a/libraries/Ethernet/arch/avr/utility/socket.cpp b/libraries/Ethernet/arch/avr/utility/socket.cpp index a9afb761c..5332981d2 100644 --- a/libraries/Ethernet/arch/avr/utility/socket.cpp +++ b/libraries/Ethernet/arch/avr/utility/socket.cpp @@ -310,6 +310,12 @@ uint16_t recvfrom(SOCKET s, uint8_t *buf, uint16_t len, uint8_t *addr, uint16_t return data_len; } +/** + * @brief Wait for buffered transmission to complete. + */ +void flush(SOCKET s) { + // TODO +} uint16_t igmpsend(SOCKET s, const uint8_t * buf, uint16_t len) { diff --git a/libraries/Ethernet/arch/sam/utility/socket.cpp b/libraries/Ethernet/arch/sam/utility/socket.cpp index a9afb761c..5332981d2 100644 --- a/libraries/Ethernet/arch/sam/utility/socket.cpp +++ b/libraries/Ethernet/arch/sam/utility/socket.cpp @@ -310,6 +310,12 @@ uint16_t recvfrom(SOCKET s, uint8_t *buf, uint16_t len, uint8_t *addr, uint16_t return data_len; } +/** + * @brief Wait for buffered transmission to complete. + */ +void flush(SOCKET s) { + // TODO +} uint16_t igmpsend(SOCKET s, const uint8_t * buf, uint16_t len) { diff --git a/libraries/Ethernet/src/EthernetClient.cpp b/libraries/Ethernet/src/EthernetClient.cpp index b5911c5ee..3a88d15f8 100644 --- a/libraries/Ethernet/src/EthernetClient.cpp +++ b/libraries/Ethernet/src/EthernetClient.cpp @@ -120,8 +120,7 @@ int EthernetClient::peek() { } void EthernetClient::flush() { - while (available()) - read(); + ::flush(_sock); } void EthernetClient::stop() { diff --git a/libraries/Ethernet/src/utility/socket.h b/libraries/Ethernet/src/utility/socket.h index 17f89c7af..682e84709 100644 --- a/libraries/Ethernet/src/utility/socket.h +++ b/libraries/Ethernet/src/utility/socket.h @@ -13,6 +13,7 @@ extern int16_t recv(SOCKET s, uint8_t * buf, int16_t len); // Receive data (TCP) extern uint16_t peek(SOCKET s, uint8_t *buf); extern uint16_t sendto(SOCKET s, const uint8_t * buf, uint16_t len, uint8_t * addr, uint16_t port); // Send data (UDP/IP RAW) extern uint16_t recvfrom(SOCKET s, uint8_t * buf, uint16_t len, uint8_t * addr, uint16_t *port); // Receive data (UDP/IP RAW) +extern void flush(SOCKET s); // Wait for transmission to complete extern uint16_t igmpsend(SOCKET s, const uint8_t * buf, uint16_t len);