diff --git a/src/EthernetClient.cpp b/src/EthernetClient.cpp index e2406d7d..edf007ed 100644 --- a/src/EthernetClient.cpp +++ b/src/EthernetClient.cpp @@ -83,7 +83,16 @@ size_t EthernetClient::write(uint8_t b) size_t EthernetClient::write(const uint8_t *buf, size_t size) { if (sockindex >= MAX_SOCK_NUM) return 0; - if (Ethernet.socketSend(sockindex, buf, size)) return size; + //if (Ethernet.socketSend(sockindex, buf, size)) return size; + if(size==0) return 0; + size_t remain = size; + size_t sent = 0; + while(remain > 0) { + sent = Ethernet.socketSend(sockindex, buf+size-remain, remain); + if(sent==0) break; + remain -= sent; + } + if(sent!=0) return size; setWriteError(); return 0; } diff --git a/src/utility/w5100.h b/src/utility/w5100.h index 099556a6..13d3c885 100644 --- a/src/utility/w5100.h +++ b/src/utility/w5100.h @@ -412,10 +412,12 @@ class W5100Class { pinMode(ss_pin, OUTPUT); } inline static void setSS() { - GPOC = ss_pin_mask; + //GPOC = ss_pin_mask; + digitalWrite(ss_pin, LOW); } inline static void resetSS() { - GPOS = ss_pin_mask; + //GPOS = ss_pin_mask; + digitalWrite(ss_pin, HIGH); } #elif defined(__SAMD21G18A__)