|  | @@ -90,6 +90,8 @@
 | 
	
		
			
				|  |  |  #include <sys/time.h>
 | 
	
		
			
				|  |  |  #include <mach/clock.h>
 | 
	
		
			
				|  |  |  #include <mach/mach.h>
 | 
	
		
			
				|  |  | +#include <mach/mach_time.h>
 | 
	
		
			
				|  |  | +#include <assert.h>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  //clock_gettime is not implemented on OSX
 | 
	
		
			
				|  |  |  int clock_gettime(int clk_id, struct timespec* t) {
 | 
	
	
		
			
				|  | @@ -106,13 +108,17 @@ int clock_gettime(int clk_id, struct timespec* t) {
 | 
	
		
			
				|  |  |      } else if (clk_id == CLOCK_MONOTONIC) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          static uint64_t start_time = 0;
 | 
	
		
			
				|  |  | -        static mach_timebase_info_data_t timebase_ifo = {0};
 | 
	
		
			
				|  |  | +        static mach_timebase_info_data_t timebase_ifo = {0, 0};
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          uint64_t now = mach_absolute_time();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          if (start_time == 0) {
 | 
	
		
			
				|  |  |              kern_return_t mach_status = mach_timebase_info(&timebase_ifo);
 | 
	
		
			
				|  |  | +#if defined(DEBUG)
 | 
	
		
			
				|  |  |              assert(mach_status == KERN_SUCCESS);
 | 
	
		
			
				|  |  | +#else
 | 
	
		
			
				|  |  | +            (void)mach_status; // appease "unused variable" warning for release builds
 | 
	
		
			
				|  |  | +#endif
 | 
	
		
			
				|  |  |              start_time = now;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -1234,7 +1240,7 @@ static void sockaddr_to_string(char *buf, size_t len,
 | 
	
		
			
				|  |  |      /* Only Windows Vista (and newer) have inet_ntop() */
 | 
	
		
			
				|  |  |      mg_strlcpy(buf, inet_ntoa(usa->sin.sin_addr), len);
 | 
	
		
			
				|  |  |  #else
 | 
	
		
			
				|  |  | -    inet_ntop(usa->sa.sa_family, (void *) &usa->sin.sin_addr, buf, len);
 | 
	
		
			
				|  |  | +    inet_ntop(usa->sa.sa_family, (void *) &usa->sin.sin_addr, buf, (socklen_t)len);
 | 
	
		
			
				|  |  |  #endif
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -2482,7 +2488,7 @@ static int64_t push(FILE *fp, SOCKET sock, SSL *ssl, const char *buf, int64_t le
 | 
	
		
			
				|  |  |                  if (ferror(fp))
 | 
	
		
			
				|  |  |                      n = -1;
 | 
	
		
			
				|  |  |              } else {
 | 
	
		
			
				|  |  | -                n = send(sock, buf + sent, (size_t) k, MSG_NOSIGNAL);
 | 
	
		
			
				|  |  | +                n = (int)send(sock, buf + sent, (size_t) k, MSG_NOSIGNAL);
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          if (n <= 0)
 | 
	
	
		
			
				|  | @@ -2502,6 +2508,9 @@ static int pull(FILE *fp, struct mg_connection *conn, char *buf, int len)
 | 
	
		
			
				|  |  |      double timeout = -1;
 | 
	
		
			
				|  |  |      struct timespec start, now;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    memset(&start, 0, sizeof(start));
 | 
	
		
			
				|  |  | +    memset(&now, 0, sizeof(now));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      if (conn->ctx->config[REQUEST_TIMEOUT]) {
 | 
	
		
			
				|  |  |          timeout = atoi(conn->ctx->config[REQUEST_TIMEOUT]) / 1000.0;
 | 
	
		
			
				|  |  |      }
 | 
	
	
		
			
				|  | @@ -2515,13 +2524,13 @@ static int pull(FILE *fp, struct mg_connection *conn, char *buf, int len)
 | 
	
		
			
				|  |  |              CGI pipe, fread() may block until IO buffer is filled up. We cannot
 | 
	
		
			
				|  |  |              afford to block and must pass all read bytes immediately to the
 | 
	
		
			
				|  |  |              client. */
 | 
	
		
			
				|  |  | -            nread = read(fileno(fp), buf, (size_t) len);
 | 
	
		
			
				|  |  | +            nread = (int)read(fileno(fp), buf, (size_t) len);
 | 
	
		
			
				|  |  |  #ifndef NO_SSL
 | 
	
		
			
				|  |  |          } else if (conn->ssl != NULL) {
 | 
	
		
			
				|  |  |              nread = SSL_read(conn->ssl, buf, len);
 | 
	
		
			
				|  |  |  #endif
 | 
	
		
			
				|  |  |          } else {
 | 
	
		
			
				|  |  | -            nread = recv(conn->client.sock, buf, (size_t) len, 0);
 | 
	
		
			
				|  |  | +            nread = (int)recv(conn->client.sock, buf, (size_t) len, 0);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          if (conn->ctx->stop_flag) {
 | 
	
		
			
				|  |  |              return -1;
 | 
	
	
		
			
				|  | @@ -4383,7 +4392,7 @@ static int read_request(FILE *fp, struct mg_connection *conn,
 | 
	
		
			
				|  |  |                          char *buf, int bufsiz, int *nread)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |      int request_len, n = 0;
 | 
	
		
			
				|  |  | -    struct timespec last_action_time = {0};
 | 
	
		
			
				|  |  | +    struct timespec last_action_time = {0, 0};
 | 
	
		
			
				|  |  |      double request_timout;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      if (conn->ctx->config[REQUEST_TIMEOUT]) {
 | 
	
	
		
			
				|  | @@ -7474,6 +7483,18 @@ struct mg_connection *mg_connect_websocket_client(const char *host, int port, in
 | 
	
		
			
				|  |  |          conn = NULL;
 | 
	
		
			
				|  |  |          DEBUG_TRACE("%s", "Websocket client connect thread could not be started\r\n");
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | +#else
 | 
	
		
			
				|  |  | +    // Appease "unused parameter" warnings
 | 
	
		
			
				|  |  | +    (void)host;
 | 
	
		
			
				|  |  | +    (void)port;
 | 
	
		
			
				|  |  | +    (void)use_ssl;
 | 
	
		
			
				|  |  | +    (void)error_buffer;
 | 
	
		
			
				|  |  | +    (void)error_buffer_size;
 | 
	
		
			
				|  |  | +    (void)path;
 | 
	
		
			
				|  |  | +    (void)origin;
 | 
	
		
			
				|  |  | +    (void)user_data;
 | 
	
		
			
				|  |  | +    (void)data_func;
 | 
	
		
			
				|  |  | +    (void)close_func;
 | 
	
		
			
				|  |  |  #endif
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      return conn;
 |