wince minor adaptations
authorOndraco <E9916442@ROZCZWHP2001135.euro.ad.etn.com>
Mon, 29 Feb 2016 23:33:56 +0000 (07:33 +0800)
committerAndy Green <andy.green@linaro.org>
Mon, 29 Feb 2016 23:33:56 +0000 (07:33 +0800)
https://github.com/warmcat/libwebsockets/issues/444

lib/libwebsockets.c
lib/libwebsockets.h
lib/lws-plat-win.c

index db855d2..3f5760b 100644 (file)
 
 #include "private-libwebsockets.h"
 
+#ifdef LWS_HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#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,12 +954,14 @@ 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++) {
                if (level != (1 << n))
index f624747..fe15298 100644 (file)
@@ -114,9 +114,18 @@ struct sockaddr_in;
 #include <stddef.h>
 #include <stdint.h>
 #include <basetsd.h>
+#ifndef _WIN32_WCE
 #include <fcntl.h>
+#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
index 6d731fc..428ae7c 100644 (file)
@@ -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);