diff --git a/CHANGELOG b/CHANGELOG index b8400536..4598effe 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -14,6 +14,10 @@ HISTORY ++ 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 31be589c..704a3e00 100644 --- a/src/api/api_lib.c +++ b/src/api/api_lib.c @@ -745,6 +745,11 @@ netconn_write_partly(struct netconn *conn, const void *dataptr, size_t size, 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 @@ netconn_write_partly(struct netconn *conn, const void *dataptr, size_t size, 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 {