summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--extmod/modlwip.c7
-rw-r--r--tests/extmod/usocket_tcp_basic.py17
2 files changed, 22 insertions, 2 deletions
diff --git a/extmod/modlwip.c b/extmod/modlwip.c
index 216e81749..1d557a6a8 100644
--- a/extmod/modlwip.c
+++ b/extmod/modlwip.c
@@ -757,8 +757,11 @@ STATIC mp_uint_t lwip_tcp_receive(lwip_socket_obj_t *socket, byte *buf, mp_uint_
return 0;
}
} else if (socket->state != STATE_CONNECTED) {
- assert(socket->state < 0);
- *_errno = error_lookup_table[-socket->state];
+ if (socket->state >= STATE_NEW) {
+ *_errno = MP_ENOTCONN;
+ } else {
+ *_errno = error_lookup_table[-socket->state];
+ }
return -1;
}
}
diff --git a/tests/extmod/usocket_tcp_basic.py b/tests/extmod/usocket_tcp_basic.py
new file mode 100644
index 000000000..368dfe3c9
--- /dev/null
+++ b/tests/extmod/usocket_tcp_basic.py
@@ -0,0 +1,17 @@
+# Test basic, stand-alone TCP socket functionality
+
+try:
+ import usocket as socket, uerrno as errno
+except ImportError:
+ try:
+ import socket, errno
+ except ImportError:
+ print("SKIP")
+ raise SystemExit
+
+# recv() on a fresh socket should raise ENOTCONN
+s = socket.socket()
+try:
+ s.recv(1)
+except OSError as er:
+ print("ENOTCONN:", er.args[0] == errno.ENOTCONN)