diff --git a/lib/libwebsockets.c b/lib/libwebsockets.c index db855d24..3f5760b5 100644 --- a/lib/libwebsockets.c +++ b/lib/libwebsockets.c @@ -21,6 +21,10 @@ #include "private-libwebsockets.h" +#ifdef LWS_HAVE_SYS_TYPES_H +#include +#endif + int log_level = LLL_ERR | LLL_WARN | LLL_NOTICE; static void (*lwsl_emit)(int level, const char *line) = lwsl_emit_stderr; @@ -308,6 +312,9 @@ just_kill_connection: if (n) lwsl_debug("closing: shutdown ret %d\n", LWS_ERRNO); +// This causes problems with disconnection when the events are half closing connection +// FD_READ | FD_CLOSE (33) +#ifndef _WIN32_WCE /* libuv: no event available to guarantee completion */ if (!LWS_LIBUV_ENABLED(context)) { @@ -317,6 +324,7 @@ just_kill_connection: context->timeout_secs); return; } +#endif } #endif @@ -946,11 +954,13 @@ LWS_VISIBLE void lwsl_emit_stderr(int level, const char *line) #endif int n; +#ifndef _WIN32_WCE #ifdef WIN32 ptm = localtime(&o_now); #else if (localtime_r(&o_now, &tm)) ptm = &tm; +#endif #endif buf[0] = '\0'; for (n = 0; n < LLL_COUNT; n++) { diff --git a/lib/libwebsockets.h b/lib/libwebsockets.h index f6247475..fe152989 100644 --- a/lib/libwebsockets.h +++ b/lib/libwebsockets.h @@ -114,9 +114,18 @@ struct sockaddr_in; #include #include #include +#ifndef _WIN32_WCE #include +#else +#define _O_RDONLY 0x0000 +#define O_RDONLY _O_RDONLY +#endif +#ifdef _WIN32_WCE +#define strcasecmp _stricmp +#else #define strcasecmp stricmp +#endif #define getdtablesize() 30000 #define LWS_INLINE __inline diff --git a/lib/lws-plat-win.c b/lib/lws-plat-win.c index 6d731fc0..428ae7cd 100644 --- a/lib/lws-plat-win.c +++ b/lib/lws-plat-win.c @@ -271,7 +271,10 @@ lws_plat_set_socket_options(struct lws_context *context, lws_sockfd_type fd) u_long optl = 1; DWORD dwBytesRet; struct tcp_keepalive alive; + int protonbr; +#ifndef _WIN32_WCE struct protoent *tcp_proto; +#endif if (context->ka_time) { /* enable keepalive on this socket */ @@ -291,13 +294,18 @@ lws_plat_set_socket_options(struct lws_context *context, lws_sockfd_type fd) /* Disable Nagle */ optval = 1; +#ifndef _WIN32_WCE tcp_proto = getprotobyname("TCP"); if (!tcp_proto) { lwsl_err("getprotobyname() failed with error %d\n", LWS_ERRNO); return 1; } + protonbr = tcp_proto->p_proto; +#else + protonbr = 6; +#endif - setsockopt(fd, tcp_proto->p_proto, TCP_NODELAY, (const char *)&optval, optlen); + setsockopt(fd, protonbr, TCP_NODELAY, (const char *)&optval, optlen); /* We are nonblocking... */ ioctlsocket(fd, FIONBIO, &optl);