--- /dev/null
+diff -urp lwip-2.0.3-orig/src/api/sockets.c src/api/sockets.c
+--- src/api/sockets.c 2018-03-20 13:07:37.161480805 +0100
++++ src/api/sockets.c 2018-03-19 18:01:08.206420575 +0100
+@@ -1290,6 +1290,46 @@ lwip_writev(int s, const struct iovec *i
+ return lwip_sendmsg(s, &msg, 0);\r
+ }\r
+ \r
++int lwip_getsock_status(int fd)\r
++{\r
++ int flags = 0;\r
++ struct lwip_sock *sock;\r
++\r
++ SYS_ARCH_DECL_PROTECT(lev);\r
++ SYS_ARCH_PROTECT(lev);\r
++ sock = tryget_socket(fd);\r
++ if (sock != NULL) {\r
++ void* lastdata = sock->lastdata;\r
++ s16_t rcvevent = sock->rcvevent;\r
++ u16_t sendevent = sock->sendevent;\r
++ u16_t errevent = sock->errevent;\r
++ SYS_ARCH_UNPROTECT(lev);\r
++\r
++ /* ... then examine it: */\r
++ /* See if netconn of this socket is ready for read */\r
++ if ((lastdata != NULL) || (rcvevent > 0)) {\r
++ flags |= LWIP_SOC_RD_READY;\r
++ LWIP_DEBUGF(SOCKETS_DEBUG, ("%s: lwip_fd=%d ready for reading\n",\r
++ __func__, fd));\r
++ }\r
++ /* See if netconn of this socket is ready for write */\r
++ if (sendevent != 0) {\r
++ flags |= LWIP_SOC_WR_READY;\r
++ LWIP_DEBUGF(SOCKETS_DEBUG, ("%s: lwip_fd=%d ready for writing\n",\r
++ __func__, fd));\r
++ }\r
++ /* See if netconn of this socket had an error */\r
++ if (errevent != 0) {\r
++ flags |= LWIP_SOC_EXCEPTION;\r
++ LWIP_DEBUGF(SOCKETS_DEBUG, ("%s: lwip_fd=%d ready for exception\n",\r
++ __func__, fd));\r
++ }\r
++ } else {\r
++ SYS_ARCH_UNPROTECT(lev);\r
++ }\r
++\r
++ return flags;\r
++}\r
+ /**\r
+ * Go through the readset and writeset lists and see which socket of the sockets\r
+ * set in the sets has events. On return, readset, writeset and exceptset have\r
+diff -urp src/include/lwip/sockets.h src/include/lwip/sockets.h
+--- src/include/lwip/sockets.h 2017-03-01 23:13:14.000000000 +0100
++++ src/include/lwip/sockets.h 2018-03-19 17:34:49.143047601 +0100
+@@ -419,6 +419,10 @@ typedef struct ip_mreq {
+ #define FD_ISSET(n,p) FDSETSAFEGET(n, (p)->fd_bits[((n)-LWIP_SOCKET_OFFSET)/8] & (1 << (((n)-LWIP_SOCKET_OFFSET) & 7)))\r
+ #define FD_ZERO(p) memset((void*)(p), 0, sizeof(*(p)))\r
+ \r
++#define LWIP_SOC_RD_READY 0x01\r
++#define LWIP_SOC_WR_READY 0x02\r
++#define LWIP_SOC_EXCEPTION 0x04\r
++\r
+ typedef struct fd_set\r
+ {\r
+ unsigned char fd_bits [(FD_SETSIZE+7)/8];\r