Project homepage Mailing List  Warmcat.com  API Docs  Github Mirror 
{"schema":"libjg2-1", "vpath":"/git/", "avatar":"/git/avatar/", "alang":"", "gen_ut":1745632900, "reponame":"libwebsockets", "desc":"libwebsockets lightweight C networking library", "owner": { "name": "Andy Green", "email": "andy@warmcat.com", "md5": "c50933ca2aa61e0fe2c43d46bb6b59cb" },"url":"https://libwebsockets.org/repo/libwebsockets", "f":3, "items": [ {"schema":"libjg2-1", "cid":"597cf8bb917958770d52c6af86a9bcb0", "commit": {"type":"commit", "time": 1468457847, "time_ofs": 480, "oid_tree": { "oid": "78a2680c754398614c1b725486511d16a4e4bfc2", "alias": []}, "oid":{ "oid": "6ff571f854a0181f041db687cd87c546cd4752f1", "alias": []}, "msg": "windows detect client connection error", "sig_commit": { "git_time": { "time": 1468457847, "offset": 480 }, "name": "Andy Green", "email": "andy@warmcat.com", "md5": "c50933ca2aa61e0fe2c43d46bb6b59cb" }, "sig_author": { "git_time": { "time": 1467111680, "offset": 480 }, "name": "Andy Piper", "email": "andy@pushtechnology.com", "md5": "80025c9c8a1f344acce2d61252380672" }}, "body": "windows detect client connection error" , "diff": "diff --git a/lib/client-handshake.c b/lib/client-handshake.c\nindex acce53a..5c0d356 100644\n--- a/lib/client-handshake.c\n+++ b/lib/client-handshake.c\n@@ -207,7 +207,11 @@ lws_client_connect_2(struct lws *wsi)\n \t\t\t|| LWS_ERRNO \u003d\u003d WSAEINVAL\n #endif\n \t\t) {\n-\t\t\tlwsl_client(\u0022nonblocking connect retry\u005cn\u0022);\n+\t\t\tlwsl_client(\u0022nonblocking connect retry (errno \u003d %d)\u005cn\u0022,\n+\t\t\t\t LWS_ERRNO);\n+\n+\t\t\tif (lws_plat_check_connection_error(wsi))\n+\t\t\t\tgoto failed;\n \n \t\t\t/*\n \t\t\t * must do specifically a POLLOUT poll to hear\ndiff --git a/lib/lws-plat-mbed3.cpp b/lib/lws-plat-mbed3.cpp\nindex 8581695..8e91c90 100644\n--- a/lib/lws-plat-mbed3.cpp\n+++ b/lib/lws-plat-mbed3.cpp\n@@ -82,6 +82,12 @@ lws_plat_change_pollfd(struct lws_context *context,\n }\n \n extern \u0022C\u0022 LWS_VISIBLE int\n+lws_plat_check_connection_error(struct lws *wsi)\n+{\n+\treturn 0;\n+}\n+\n+extern \u0022C\u0022 LWS_VISIBLE int\n lws_ssl_capable_read_no_ssl(struct lws *wsi, unsigned char *buf, int len)\n {\n \tsocket_error_t err;\ndiff --git a/lib/lws-plat-unix.c b/lib/lws-plat-unix.c\nindex 0551ad6..248c2a6 100644\n--- a/lib/lws-plat-unix.c\n+++ b/lib/lws-plat-unix.c\n@@ -181,6 +181,12 @@ faked_service:\n }\n \n LWS_VISIBLE int\n+lws_plat_check_connection_error(struct lws *wsi)\n+{\n+\treturn 0;\n+}\n+\n+LWS_VISIBLE int\n lws_plat_service(struct lws_context *context, int timeout_ms)\n {\n \treturn lws_plat_service_tsi(context, timeout_ms, 0);\ndiff --git a/lib/lws-plat-win.c b/lib/lws-plat-win.c\nindex cb5d299..500f327 100644\n--- a/lib/lws-plat-win.c\n+++ b/lib/lws-plat-win.c\n@@ -285,7 +285,17 @@ lws_plat_service_tsi(struct lws_context *context, int timeout_ms, int tsi)\n \t\treturn -1;\n \t}\n \n-\tpfd-\u003erevents \u003d (short)networkevents.lNetworkEvents;\n+\tif ((networkevents.lNetworkEvents \u0026 FD_CONNECT) \u0026\u0026\n+\t networkevents.iErrorCode[FD_CONNECT_BIT] \u0026\u0026\n+\t networkevents.iErrorCode[FD_CONNECT_BIT] !\u003d LWS_EALREADY \u0026\u0026\n+\t networkevents.iErrorCode[FD_CONNECT_BIT] !\u003d LWS_EINPROGRESS \u0026\u0026\n+\t networkevents.iErrorCode[FD_CONNECT_BIT] !\u003d LWS_EWOULDBLOCK \u0026\u0026\n+\t networkevents.iErrorCode[FD_CONNECT_BIT] !\u003d WSAEINVAL) {\n+\t\tlwsl_debug(\u0022Unable to connect errno\u003d%d\u005cn\u0022,\n+\t\t\t networkevents.iErrorCode[FD_CONNECT_BIT]);\n+\t\tpfd-\u003erevents \u003d LWS_POLLHUP;\n+\t} else\n+\t\tpfd-\u003erevents \u003d (short)networkevents.lNetworkEvents;\n \n \tif (pfd-\u003erevents \u0026 LWS_POLLOUT) {\n \t\twsi \u003d wsi_from_fd(context, pfd-\u003efd);\n@@ -460,7 +470,7 @@ lws_plat_insert_socket_into_fds(struct lws_context *context, struct lws *wsi)\n \tpt-\u003efds[pt-\u003efds_count++].revents \u003d 0;\n \tpt-\u003eevents[pt-\u003efds_count] \u003d WSACreateEvent();\n \tWSAEventSelect(wsi-\u003esock, pt-\u003eevents[pt-\u003efds_count],\n-\t\t LWS_POLLIN | LWS_POLLHUP);\n+\t\t LWS_POLLIN | LWS_POLLHUP | FD_CONNECT);\n }\n \n LWS_VISIBLE void\n@@ -479,11 +489,28 @@ lws_plat_service_periodic(struct lws_context *context)\n }\n \n LWS_VISIBLE int\n+lws_plat_check_connection_error(struct lws *wsi)\n+{\n+\tint optVal;\n+\tint optLen \u003d sizeof(int);\n+\n+\tif (getsockopt(wsi-\u003esock, SOL_SOCKET, SO_ERROR,\n+\t\t (char*)\u0026optVal, \u0026optLen) !\u003d SOCKET_ERROR \u0026\u0026 optVal \u0026\u0026\n+\t optVal !\u003d LWS_EALREADY \u0026\u0026 optVal !\u003d LWS_EINPROGRESS \u0026\u0026\n+\t optVal !\u003d LWS_EWOULDBLOCK \u0026\u0026 optVal !\u003d WSAEINVAL) {\n+\t lwsl_debug(\u0022Connect failed SO_ERROR\u003d%d\u005cn\u0022, optVal);\n+\t return 1;\n+\t}\n+\n+\treturn 0;\n+}\n+\n+LWS_VISIBLE int\n lws_plat_change_pollfd(struct lws_context *context,\n \t\t struct lws *wsi, struct lws_pollfd *pfd)\n {\n \tstruct lws_context_per_thread *pt \u003d \u0026context-\u003ept[(int)wsi-\u003etsi];\n-\tlong networkevents \u003d LWS_POLLHUP;\n+\tlong networkevents \u003d LWS_POLLHUP | FD_CONNECT;\n \n \tif ((pfd-\u003eevents \u0026 LWS_POLLIN))\n \t\tnetworkevents |\u003d LWS_POLLIN;\ndiff --git a/lib/private-libwebsockets.h b/lib/private-libwebsockets.h\nindex 183f781..7456913 100644\n--- a/lib/private-libwebsockets.h\n+++ b/lib/private-libwebsockets.h\n@@ -1494,6 +1494,9 @@ void lws_http2_configure_if_upgraded(struct lws *wsi);\n LWS_EXTERN int\n lws_plat_set_socket_options(struct lws_vhost *vhost, lws_sockfd_type fd);\n \n+LWS_EXTERN int\n+lws_plat_check_connection_error(struct lws *wsi);\n+\n LWS_EXTERN int LWS_WARN_UNUSED_RESULT\n lws_header_table_attach(struct lws *wsi, int autoservice);\n \n","s":{"c":1745632900,"u": 10567}} ],"g": 11960,"chitpc": 0,"ehitpc": 0,"indexed":0 , "ab": 0, "si": 0, "db":0, "di":0, "sat":0, "lfc": "0000"}