The return value of EthernetClient::write should be the return value of Ethernet::socketSend:
  
  
    
        
          |  | if (Ethernet.socketSend(sockindex, buf, size)) return size; | 
    
   
 
Otherwise if the buffer to be sent is larger than W5100.SSIZE it will only send W5100.SSIZE number of characters,
https://github.com/arduino-libraries/Ethernet/blob/master/src/socket.cpp#L428
yet EthernetClient::write still returns 'size'.
A better way to implement EthernetClient::write is to add a loop until the whole content is sent.