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 {