fixed bug #49725 (send-timeout: netwonn_write() can return ERR_OK without all bytes being written)
diff --git a/CHANGELOG b/CHANGELOG
index b840053..4598eff 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -14,6 +14,10 @@
 
   ++ Bugfixes:
 
+  2016-11-28: Simon Goldschmidt
+  * api_lib.c: fixed bug #49725 (send-timeout: netwonn_write() can return
+    ERR_OK without all bytes being written)
+
   2016-11-28: Ambroz Bizjak
   * tcpi_in.c: fixed bug #49717 (window size in received SYN and SYN-ACK
     assumed scaled)
diff --git a/src/api/api_lib.c b/src/api/api_lib.c
index 31be589..704a3e0 100644
--- a/src/api/api_lib.c
+++ b/src/api/api_lib.c
@@ -745,6 +745,11 @@
     return ERR_OK;
   }
   dontblock = netconn_is_nonblocking(conn) || (apiflags & NETCONN_DONTBLOCK);
+#if LWIP_SO_SNDTIMEO
+  if (conn->send_timeout != 0) {
+     dontblock = 1;
+  }
+#endif /* LWIP_SO_SNDTIMEO */
   if (dontblock && !bytes_written) {
     /* This implies netconn_write() cannot be used for non-blocking send, since
        it has no way to return the number of bytes written. */
@@ -772,11 +777,7 @@
      non-blocking version here. */
   err = netconn_apimsg(lwip_netconn_do_write, &API_MSG_VAR_REF(msg));
   if ((err == ERR_OK) && (bytes_written != NULL)) {
-    if (dontblock
-#if LWIP_SO_SNDTIMEO
-        || (conn->send_timeout != 0)
-#endif /* LWIP_SO_SNDTIMEO */
-       ) {
+    if (dontblock) {
       /* nonblocking write: maybe the data has been sent partly */
       *bytes_written = API_MSG_VAR_REF(msg).msg.w.len;
     } else {