diff --git a/repos/libports/ports/lwip.hash b/repos/libports/ports/lwip.hash index f9c9f06dc6..4a8dce138c 100644 --- a/repos/libports/ports/lwip.hash +++ b/repos/libports/ports/lwip.hash @@ -1 +1 @@ -cbf1fff1bec6b6033825f81d863bdcd1a6060ed5 +d84dafd43c71b0c325246801d7f2f5ee8ec7bbd9 diff --git a/repos/libports/ports/lwip.port b/repos/libports/ports/lwip.port index f42b86716c..dc6e6f0bea 100644 --- a/repos/libports/ports/lwip.port +++ b/repos/libports/ports/lwip.port @@ -16,7 +16,8 @@ PATCHES := $(addprefix src/lib/lwip/,window_scaling.patch \ sockets_c_errno.patch \ sol_socket_definition.patch \ remove_warnings.patch \ - api_msg.patch) + api_msg.patch \ + nonblocking_connect.patch) PATCH_OPT := -p1 -d src/lib/lwip diff --git a/repos/libports/src/lib/lwip/nonblocking_connect.patch b/repos/libports/src/lib/lwip/nonblocking_connect.patch new file mode 100644 index 0000000000..2d9eec21bb --- /dev/null +++ b/repos/libports/src/lib/lwip/nonblocking_connect.patch @@ -0,0 +1,26 @@ +Avoid assertion on nonblocking connect() + +From: Christian Prochaska + +When calling 'connect()' in nonblocking mode and the connection has been +established, don't call 'tcp_connect()' again, which would trigger an +assertion with the message 'tcp_connect: can only connect from state +CLOSED'. +--- + src/api/api_msg.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/src/api/api_msg.c b/src/api/api_msg.c +index c00222c..d05a5ae 100644 +--- a/src/api/api_msg.c ++++ b/src/api/api_msg.c +@@ -1008,7 +1008,8 @@ lwip_netconn_do_connect(struct api_msg_msg *msg) + #if LWIP_TCP + case NETCONN_TCP: + /* Prevent connect while doing any other action. */ +- if (msg->conn->state != NETCONN_NONE) { ++ if ((msg->conn->state != NETCONN_NONE) || ++ ((msg->conn->pcb.tcp->state == ESTABLISHED) && netconn_is_nonblocking(msg->conn))) { + msg->err = ERR_ISCONN; + } else { + setup_tcp(msg->conn);