+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_event.h>
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGINX_H_INCLUDED_
#define _NGINX_H_INCLUDED_
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_ARRAY_H_INCLUDED_
#define _NGX_ARRAY_H_INCLUDED_
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_BUF_H_INCLUDED_
#define _NGX_BUF_H_INCLUDED_
#include <ngx_core.h>
-#if 0
-/* the buf type */
-
-/* the buf's content is in memory */
-#define NGX_HUNK_IN_MEMORY 0x0001
-/* the buf's content can be changed */
-#define NGX_HUNK_TEMP 0x0002
-/* the buf's content is in cache and can not be changed */
-#define NGX_HUNK_MEMORY 0x0004
-#define NGX_HUNK_MMAP 0x0008
-
-/* the buf's content is recycled */
-#define NGX_HUNK_RECYCLED 0x0010
-
-/* the buf's content is in a file */
-#define NGX_HUNK_FILE 0x0020
-
-#define NGX_HUNK_STORAGE (NGX_HUNK_IN_MEMORY \
- |NGX_HUNK_TEMP|NGX_HUNK_MEMORY|NGX_HUNK_MMAP \
- |NGX_HUNK_RECYCLED|NGX_HUNK_FILE)
-
-/* the buf flags */
+typedef void * ngx_buf_tag_t;
-/* in thread state flush means to write the buf completely before return */
-/* in event state flush means to start to write the buf */
-#define NGX_HUNK_FLUSH 0x0100
-
-/* the last buf */
-#define NGX_HUNK_LAST 0x0200
-
-
-#define NGX_HUNK_PREREAD 0x2000
-#define NGX_HUNK_LAST_SHADOW 0x4000
-#define NGX_HUNK_TEMP_FILE 0x8000
-#endif
-
-
-typedef void * ngx_buf_tag_t;
-
-typedef struct ngx_buf_s ngx_buf_t;
+typedef struct ngx_buf_s ngx_buf_t;
struct ngx_buf_s {
u_char *pos;
ngx_buf_t *shadow;
- /* the buf's content can be changed */
+ /* the buf's content could be changed */
unsigned temporary:1;
/*
* the buf's content is in a memory cache or in a read only memory
- * and can not be changed
+ * and must not be changed
*/
unsigned memory:1;
- /* the buf's content is mmap()ed and can not be changed */
+ /* the buf's content is mmap()ed and must not be changed */
unsigned mmap:1;
+
unsigned recycled:1;
unsigned in_file:1;
unsigned flush:1;
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_HTTP_CONF_FILE_H_INCLUDED_
#define _NGX_HTTP_CONF_FILE_H_INCLUDED_
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_CONFIG_H_INCLUDED_
#define _NGX_CONFIG_H_INCLUDED_
#define INET_ADDRSTRLEN 16
#endif
+#define NGX_MAXHOSTNAMELEN 64
+/*
+#define NGX_MAXHOSTNAMELEN MAXHOSTNAMELEN
+*/
+
#endif /* _NGX_CONFIG_H_INCLUDED_ */
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_event.h>
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_CONNECTION_H_INCLUDED_
#define _NGX_CONNECTION_H_INCLUDED_
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_CORE_H_INCLUDED_
#define _NGX_CORE_H_INCLUDED_
#define CRLF "\x0d\x0a"
-
-#define NGX_MAXHOSTNAMELEN 64
-/*
-#define NGX_MAXHOSTNAMELEN MAXHOSTNAMELEN
-*/
-
-
#endif /* _NGX_CORE_H_INCLUDED_ */
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_CRC_H_INCLUDED_
#define _NGX_CRC_H_INCLUDED_
uint32_t sum;
for (sum = 0; len; len--) {
+
/*
* gcc 2.95.2 x86 and icc 7.1.006 compile that operator
- * into the single rol opcode.
+ * into the single "rol" opcode.
* msvc 6.0sp2 compiles it into four opcodes.
*/
sum = sum >> 1 | sum << 31;
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_event.h>
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_CYCLE_H_INCLUDED_
#define _NGX_CYCLE_H_INCLUDED_
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_FILE_H_INCLUDED_
#define _NGX_FILE_H_INCLUDED_
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_garbage_collector.h>
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_GARBAGE_COLLECTOR_H_INCLUDED_
#define _NGX_GARBAGE_COLLECTOR_H_INCLUDED_
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
+
#include <ngx_config.h>
#include <ngx_core.h>
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_INET_H_INCLUDED_
#define _NGX_INET_H_INCLUDED_
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_LIST_H_INCLUDED_
#define _NGX_LIST_H_INCLUDED_
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_LOG_H_INCLUDED_
#define _NGX_LOG_H_INCLUDED_
#define NGX_LOG_DEBUG_IMAP 0x200
/*
- * after the adding a new debug level do not forget to update
- * debug_levels[] in src/core/ngx_log.c
+ * do not forget to update debug_levels[] in src/core/ngx_log.c
+ * after the adding a new debug level
*/
#define NGX_LOG_DEBUG_FIRST NGX_LOG_DEBUG_CORE
#define NGX_LOG_DEBUG_ALL 0x7ffffff0
-/*
- "[%time] [%level] %pid#%tid: %message:(%errno)%errstr, while %action"
- " %peer and while processing %context"
-
- ----
- message = "recv() failed";
- errno = 32;
- action = "reading request headers from client";
- peer = "192.168.1.1";
- context = "URL /"
-
- "[2002/08/20 12:00:00] [error] 412#3: recv() failed (32: Broken pipe)"
- " while reading request headers from client 192.168.1.1"
- " and while processing URL /"
-
- ----
- message = "recv() failed";
- errno = 32;
- ngx_http_proxy_error_context_t:
- action = "reading headers from server %s for client %s and "
- "while processing %s"
- backend = "127.0.0.1";
- peer = "192.168.1.1";
- context = "URL /"
-
- "[2002/08/20 12:00:00] [error] 412#3: recv() failed (32: Broken pipe)"
- " while reading headers from backend 127.0.0.1"
- " for client 192.168.1.1 and while processing URL /"
-
- ----
- "[alert] 412#3: ngx_alloc: malloc() 102400 bytes failed (12: Cannot "
- "allocate memory) while reading request headers from client 192.168.1.1"
- " and while processing URL /"
-
-
- OLD:
- "... while ", action = "reading client request headers"
- "... while reading client request headers"
- "... while ", action = "reading client request headers"
- context: pop3 user account
- "... while reading client command for 'john_doe'"
-*/
-
-
typedef size_t (*ngx_log_handler_pt) (void *ctx, char *buf, size_t len);
ngx_log_handler_pt handler;
};
-#define MAX_ERROR_STR 2048
+#define MAX_ERROR_STR 2048
/*********************************/
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_event.h>
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_PALLOC_H_INCLUDED_
#define _NGX_PALLOC_H_INCLUDED_
/*
* NGX_MAX_ALLOC_FROM_POOL should be (ngx_page_size - 1), i.e. 4095 on x86.
- * On FreeBSD 5.x it allows to use zero copy send.
+ * On FreeBSD 5.x it allows to use the zero copy sending.
* On Windows NT it decreases a number of locked pages in a kernel.
*/
#define NGX_MAX_ALLOC_FROM_POOL (ngx_pagesize - 1)
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_PARSE_H_INCLUDED_
#define _NGX_PARSE_H_INCLUDED_
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_RADIX_TREE_H_INCLUDED_
#define _NGX_RADIX_TREE_H_INCLUDED_
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_RBTREE_H_INCLUDED_
#define _NGX_RBTREE_H_INCLUDED_
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_REGEX_H_INCLUDED_
#define _NGX_REGEX_H_INCLUDED_
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
-void *ngx_slab_alloc(ngx_slab_pool_t *pool, size_t size)
-{
+void *ngx_slab_alloc(ngx_slab_pool_t *pool, size_t size)
+{
return NULL;
}
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_SLAB_H_INCLUDED_
#define _NGX_SLAB_H_INCLUDED_
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_STRING_H_INCLUDED_
#define _NGX_STRING_H_INCLUDED_
#if (WIN32)
#define ngx_strncasecmp(s1, s2, n) \
- strnicmp((const char *) s1, (const char *) s2, n)
+ strnicmp((const char *) s1, (const char *) s2, n)
#define ngx_strcasecmp(s1, s2) \
- stricmp((const char *) s1, (const char *) s2)
+ stricmp((const char *) s1, (const char *) s2)
-#define ngx_snprintf _snprintf
-#define ngx_vsnprintf _vsnprintf
+#define ngx_snprintf _snprintf
+#define ngx_vsnprintf _vsnprintf
#else
#define ngx_strncasecmp(s1, s2, n) \
- strncasecmp((const char *) s1, (const char *) s2, n)
+ strncasecmp((const char *) s1, (const char *) s2, n)
#define ngx_strcasecmp(s1, s2) \
- strcasecmp((const char *) s1, (const char *) s2)
+ strcasecmp((const char *) s1, (const char *) s2)
-#define ngx_snprintf snprintf
-#define ngx_vsnprintf vsnprintf
+#define ngx_snprintf snprintf
+#define ngx_vsnprintf vsnprintf
#endif
#define ngx_strncmp(s1, s2, n) \
- strncmp((const char *) s1, (const char *) s2, n)
+ strncmp((const char *) s1, (const char *) s2, n)
/* msvc and icc compile strcmp() to inline loop */
-#define ngx_strcmp(s1, s2) strcmp((const char *) s1, (const char *) s2)
+#define ngx_strcmp(s1, s2) strcmp((const char *) s1, (const char *) s2)
-#define ngx_strstr(s1, s2) strstr((const char *) s1, (const char *) s2)
-#define ngx_strlen(s) strlen((const char *) s)
+#define ngx_strstr(s1, s2) strstr((const char *) s1, (const char *) s2)
+#define ngx_strlen(s) strlen((const char *) s)
/*
- * msvc and icc compile memset() to inline "rep stos"
- * while ZeroMemory and bzero are calls.
- *
- * icc can also inline mov's of a zeroed register for small blocks.
+ * msvc and icc compile memset() to the inline "rep stos"
+ * while ZeroMemory() and bzero() are the calls.
+ * icc may also inline several mov's of a zeroed register for small blocks.
*/
#define ngx_memzero(buf, n) memset(buf, 0, n)
-/* msvc and icc compile memcpy() to inline "rep movs" */
+/* msvc and icc compile memcpy() to the inline "rep movs" */
#define ngx_memcpy(dst, src, n) memcpy(dst, src, n)
#define ngx_cpymem(dst, src, n) ((u_char *) memcpy(dst, src, n)) + n
-/* msvc and icc compile memcmp() to inline loop */
+/* msvc and icc compile memcmp() to the inline loop */
#define ngx_memcmp memcmp
u_char *ngx_cpystrn(u_char *dst, u_char *src, size_t n);
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_TABLE_H_INCLUDED_
#define _NGX_TABLE_H_INCLUDED_
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
/*
- * In the threaded mode only one thread updates cached time and strings
+ * In the threaded mode only one thread updates the cached time and strings
* and these operations are protected by the mutex. The reading of the cached
* time and strings is not protected by the mutex. To avoid the race
* conditions for non-atomic values we use the NGX_TIME_SLOTS slots to store
mon += 2;
if (yday >= 306) {
+
/*
* there is no "yday" in Win32 SYSTEMTIME
*
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_TIMES_H_INCLUDED_
#define _NGX_TIMES_H_INCLUDED_
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_event.h>
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_AIO_MODULE_H_INCLUDED_
#define _NGX_AIO_MODULE_H_INCLUDED_
/*
- * Copyright (C) 2002-2004 Igor Sysoev, http://sysoev.ru/en/
+ * Copyright (C) 2002-2004 Igor Sysoev
*/
/*
- * Copyright (C) 2002-2004 Igor Sysoev, http://sysoev.ru/en/
+ * Copyright (C) 2002-2004 Igor Sysoev
*/
/*
- * Copyright (C) 2002-2004 Igor Sysoev, http://sysoev.ru/en/
+ * Copyright (C) 2002-2004 Igor Sysoev
*/
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_IOCP_MODULE_H_INCLUDED_
#define _NGX_IOCP_MODULE_H_INCLUDED_
/*
- * Copyright (C) 2002-2004 Igor Sysoev, http://sysoev.ru/en/
+ * Copyright (C) 2002-2004 Igor Sysoev
*/
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_KQUEUE_MODULE_H_INCLUDED_
#define _NGX_KQUEUE_MODULE_H_INCLUDED_
+++ /dev/null
-
-
- event = WSACreateEvent(void);
- WSAEventSelect(s, event, FD_ACCEPT);
-
-
-int ngx_overlapped_process_events(ngx_log_t *log)
-{
- if (acceptex)
- n = SleepEx(timer, 1);
- else
- n = WSAWaitForMultipleEvents(nevents, events, 0, timer, 1);
-
- if (n == WSA_WAIT_TIMEOUT)
- close some event;
-
- if (n == WSA_IO_COMPLETION)
- again
-
- /* try it with AcceptEx() on NT to detect connected sockets */
- if (!acceptex) {
- WSAEnumNetworkEvents(
- sockets[n - WSA_WAIT_EVENT_0],
- events[n - WSA_WAIT_EVENT_0],
- net_events);
-
- if (net_events.lNetworkEvents & FD_ACCEPT) {
- if (net_events.iErrorCode[FD_ACCEPT_BIT] != 0)
- accept error
- again
-
- ngx_event_accept(); OR post AcceptEx();
- }
- }
-}
-
-void CALLBACK overlapped_completion_procedure(DWORD error, DWORD nbytes,
- LPWSAOVERLAPPED overlapped, DWORD flags)
-{
- run event handler
-}
/*
- * Copyright (C) 2002-2004 Igor Sysoev, http://sysoev.ru/en/
+ * Copyright (C) 2002-2004 Igor Sysoev
*/
/*
- * Copyright (C) 2002-2004 Igor Sysoev, http://sysoev.ru/en/
+ * Copyright (C) 2002-2004 Igor Sysoev
*/
/*
- * Copyright (C) 2002-2004 Igor Sysoev, http://sysoev.ru/en/
+ * Copyright (C) 2002-2004 Igor Sysoev
*/
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_event.h>
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_EVENT_H_INCLUDED_
#define _NGX_EVENT_H_INCLUDED_
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_event.h>
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_event.h>
+++ /dev/null
-
-#include <ngx_config.h>
-#include <ngx_core.h>
-#include <ngx_errno.h>
-#include <ngx_log.h>
-#include <ngx_recv.h>
-#include <ngx_connection.h>
-#include <ngx_event.h>
-
-#if (HAVE_KQUEUE)
-#include <ngx_kqueue_module.h>
-#endif
-
-
-/*
- The data is ready - 3 syscalls:
- aio_read(), aio_error(), aio_return()
- The data is not ready - 4 (kqueue) or 5 syscalls:
- aio_read(), aio_error(), notifiction,
- aio_error(), aio_return()
- aio_cancel(), aio_error()
-*/
-
-ssize_t ngx_event_aio_read(ngx_connection_t *c, char *buf, size_t size)
-{
- int rc, first, canceled;
- ngx_event_t *ev;
-
- ev = c->read;
-
- canceled = 0;
-
- if (ev->timedout) {
- ngx_set_socket_errno(NGX_ETIMEDOUT);
- ngx_log_error(NGX_LOG_ERR, ev->log, 0, "aio_read() timed out");
-
- rc = aio_cancel(c->fd, &ev->aiocb);
- if (rc == -1) {
- ngx_log_error(NGX_LOG_CRIT, ev->log, ngx_errno,
- "aio_cancel() failed");
- return NGX_ERROR;
- }
-
- ngx_log_debug(ev->log, "aio_cancel: %d" _ rc);
-
- canceled = 1;
-
- ev->ready = 1;
- }
-
- first = 0;
-
- if (!ev->ready) {
- ngx_memzero(&ev->aiocb, sizeof(struct aiocb));
-
- ev->aiocb.aio_fildes = c->fd;
- ev->aiocb.aio_buf = buf;
- ev->aiocb.aio_nbytes = size;
-
-#if (HAVE_KQUEUE)
- ev->aiocb.aio_sigevent.sigev_notify_kqueue = kq;
- ev->aiocb.aio_sigevent.sigev_notify = SIGEV_KEVENT;
- ev->aiocb.aio_sigevent.sigev_value.sigval_ptr = ev;
-#endif
-
- if (aio_read(&ev->aiocb) == -1) {
- ngx_log_error(NGX_LOG_CRIT, ev->log, ngx_errno,
- "aio_read() failed");
- return NGX_ERROR;
- }
-
- ngx_log_debug(ev->log, "aio_read: OK");
-
- ev->active = 1;
- first = 1;
- }
-
- ev->ready = 0;
-
- rc = aio_error(&ev->aiocb);
- if (rc == -1) {
- ngx_log_error(NGX_LOG_CRIT, ev->log, ngx_errno, "aio_error() failed");
- return NGX_ERROR;
- }
-
- if (rc != 0) {
- if (rc == NGX_EINPROGRESS) {
- if (!first) {
- ngx_log_error(NGX_LOG_CRIT, ev->log, rc,
- "aio_read() still in progress");
- }
- return NGX_AGAIN;
- }
-
- if (rc == NGX_ECANCELED && canceled) {
- return NGX_ERROR;
- }
-
- ngx_log_error(NGX_LOG_CRIT, ev->log, rc, "aio_read() failed");
- return NGX_ERROR;
- }
-
- rc = aio_return(&ev->aiocb);
- if (rc == -1) {
- ngx_log_error(NGX_LOG_CRIT, ev->log, ngx_errno, "aio_return() failed");
-
- return NGX_ERROR;
- }
-
- ngx_log_debug(ev->log, "aio_read: %d" _ rc);
-
- return rc;
-}
+++ /dev/null
-
-#include <ngx_config.h>
-#include <ngx_core.h>
-#include <ngx_errno.h>
-#include <ngx_log.h>
-#include <ngx_recv.h>
-#include <ngx_connection.h>
-#include <ngx_event.h>
-
-#if (HAVE_KQUEUE)
-#include <ngx_kqueue_module.h>
-#endif
-
-
-/*
- The data is ready - 3 syscalls:
- aio_write(), aio_error(), aio_return()
- The data is not ready - 4 (kqueue) or 5 syscalls:
- aio_write(), aio_error(), notifiction,
- aio_error(), aio_return()
- aio_cancel(), aio_error()
-*/
-
-ssize_t ngx_event_aio_write(ngx_connection_t *c, char *buf, size_t size)
-{
- int rc, first, canceled;
- ngx_event_t *ev;
-
- ev = c->write;
-
- canceled = 0;
-
-ngx_log_debug(ev->log, "aio: ev->ready: %d" _ ev->ready);
-ngx_log_debug(ev->log, "aio: aiocb: %08x" _ &ev->aiocb);
-
- if (ev->timedout) {
- ngx_set_socket_errno(NGX_ETIMEDOUT);
- ngx_log_error(NGX_LOG_ERR, ev->log, 0, "aio_write() timed out");
-
- rc = aio_cancel(c->fd, &ev->aiocb);
- if (rc == -1) {
- ngx_log_error(NGX_LOG_CRIT, ev->log, ngx_errno,
- "aio_cancel() failed");
- return NGX_ERROR;
- }
-
- ngx_log_debug(ev->log, "aio_cancel: %d" _ rc);
-
- canceled = 1;
-
- ev->ready = 1;
- }
-
- first = 0;
-
- if (!ev->ready) {
- ngx_memzero(&ev->aiocb, sizeof(struct aiocb));
-
- ev->aiocb.aio_fildes = c->fd;
- ev->aiocb.aio_buf = buf;
- ev->aiocb.aio_nbytes = size;
-
-#if (HAVE_KQUEUE)
- ev->aiocb.aio_sigevent.sigev_notify_kqueue = kq;
- ev->aiocb.aio_sigevent.sigev_notify = SIGEV_KEVENT;
- ev->aiocb.aio_sigevent.sigev_value.sigval_ptr = ev;
-#endif
-
- if (aio_write(&ev->aiocb) == -1) {
- ngx_log_error(NGX_LOG_CRIT, ev->log, ngx_errno,
- "aio_write() failed");
- return NGX_ERROR;
- }
-
- ngx_log_debug(ev->log, "aio_write: OK");
-
- ev->active = 1;
- first = 1;
- }
-
- ev->ready = 0;
-
- rc = aio_error(&ev->aiocb);
- if (rc == -1) {
- ngx_log_error(NGX_LOG_CRIT, ev->log, ngx_errno, "aio_error() failed");
- return NGX_ERROR;
- }
-
- if (rc != 0) {
- if (rc == NGX_EINPROGRESS) {
- if (!first) {
- ngx_log_error(NGX_LOG_CRIT, ev->log, rc,
- "aio_write() still in progress");
- }
- return NGX_AGAIN;
- }
-
- if (rc == NGX_ECANCELED && canceled) {
- return NGX_ERROR;
- }
-
- ngx_log_error(NGX_LOG_CRIT, ev->log, rc, "aio_write() failed");
- return NGX_ERROR;
- }
-
- rc = aio_return(&ev->aiocb);
- if (rc == -1) {
- ngx_log_error(NGX_LOG_CRIT, ev->log, ngx_errno, "aio_return() failed");
-
- return NGX_ERROR;
- }
-
- ngx_log_debug(ev->log, "aio_write: %d" _ rc);
-
- return rc;
-}
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_event.h>
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_EVENT_BUSY_LOCK_H_INCLUDED_
#define _NGX_EVENT_BUSY_LOCK_H_INCLUDED_
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_event.h>
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_EVENT_CONNECT_H_INCLUDED_
#define _NGX_EVENT_CONNECT_H_INCLUDED_
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_event.h>
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_event.h>
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_event.h>
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_EVENT_OPENSSL_H_INCLUDED_
#define _NGX_EVENT_OPENSSL_H_INCLUDED_
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_event.h>
#if 0
b->type &= ~(NGX_HUNK_TEMP|NGX_HUNK_IN_MEMORY|NGX_HUNK_RECYCLED);
#endif
- b->temporary = 0;
- b->recycled = 0;
+ b->in_file = 0;
+ b->temp_file = 0;
+ b->flush = 0;
+ b->zerocopy_busy = 0;
+ b->last_shadow = 0;
+
b->shadow = NULL;
b = next;
}
|NGX_HUNK_LAST_SHADOW);
#endif
- b->temporary = 0;
- b->recycled = 0;
- b->last_shadow = 0;
+ b->in_file = 0;
+ b->temp_file = 0;
+ b->flush = 0;
+ b->zerocopy_busy = 0;
b->shadow = NULL;
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_EVENT_PIPE_H_INCLUDED_
#define _NGX_EVENT_PIPE_H_INCLUDED_
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_event.h>
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_EVENT_POSTED_H_INCLUDED_
#define _NGX_EVENT_POSTED_H_INCLUDED_
+++ /dev/null
-
-#include <ngx_config.h>
-#include <ngx_core.h>
-#include <ngx_errno.h>
-#include <ngx_log.h>
-#include <ngx_recv.h>
-#include <ngx_connection.h>
-
-ssize_t ngx_event_recv_core(ngx_connection_t *c, char *buf, size_t size)
-{
- ssize_t n;
- ngx_err_t err;
- ngx_event_t *ev;
-
- ev = c->read;
-
-/* DEBUG */
-#if (HAVE_KQUEUE)
- if (ngx_event_flags & NGX_HAVE_KQUEUE_EVENT) {
- ngx_log_debug(c->log, "ngx_event_recv: eof:%d, avail:%d, err:%d" _
- ev->eof _ ev->available _ ev->error);
- }
-#endif
-
-#if (USE_KQUEUE)
-
- if (ev->eof && ev->available == 0) {
-
- if (ev->error == 0) {
- return 0;
- }
-
- ngx_set_socket_errno(ev->error);
- err = ev->error;
- n = -1;
-
- } else {
- n = ngx_recv(c->fd, buf, size, 0);
-
- if (n == -1) {
- err = ngx_socket_errno;
- }
- }
-
- if (n == -1) {
- ev->ready = 0;
-
- if (err == NGX_ECONNRESET && ev->ignore_econnreset) {
- return 0;
- }
-
- if (err == NGX_EAGAIN) {
- ngx_log_error(NGX_LOG_INFO, c->log, err, "recv() returned EAGAIN");
- return NGX_AGAIN;
- }
-
- ngx_log_error(NGX_LOG_ERR, c->log, err, "recv() failed");
- return NGX_ERROR;
- }
-
- ev->available -= n;
- if (ev->available == 0) {
- ev->ready = 0;
- }
-
- return n;
-
-#elif (HAVE_KQUEUE)
-
- if ((ngx_event_flags & NGX_HAVE_KQUEUE_EVENT)
- && ev->eof && ev->available == 0) {
-
- if (ev->error == 0) {
- return 0;
- }
-
- ngx_set_socket_errno(ev->error);
- err = ev->error;
- n = -1;
-
- } else {
- n = ngx_recv(c->fd, buf, size, 0);
-ngx_log_debug(c->log, "ngx_event_recv: read:%d:%d" _ n _ size);
-
- if (n == -1) {
- err = ngx_socket_errno;
- }
- }
-
- if (n == -1) {
- ev->ready = 0;
-
- if (err == NGX_ECONNRESET && ev->ignore_econnreset) {
- return 0;
- }
-
- if (err == NGX_EAGAIN) {
- ngx_log_error(NGX_LOG_INFO, c->log, err, "recv() returned EAGAIN");
- return NGX_AGAIN;
- }
-
- ngx_log_error(NGX_LOG_ERR, c->log, err, "recv() failed");
- return NGX_ERROR;
- }
-
- if (ngx_event_flags & NGX_HAVE_KQUEUE_EVENT) {
- ev->available -= n;
- if (ev->available == 0) {
- ev->ready = 0;
- }
-
- } else if ((size_t) n < size) {
- ev->ready = 0;
- }
-
- return n;
-
-#else /* not kqueue */
-
- n = ngx_recv(c->fd, buf, size, 0);
-
- if (n == -1) {
- err = ngx_socket_errno;
-
- ev->ready = 0;
-
- if (err == NGX_ECONNRESET && ev->ignore_econnreset) {
- return 0;
- }
-
- if (err == NGX_EAGAIN) {
- ngx_log_error(NGX_LOG_INFO, c->log, err, "recv() returned EAGAIN");
- return NGX_AGAIN;
- }
-
- ngx_log_error(NGX_LOG_ERR, c->log, err, "recv() failed");
- return NGX_ERROR;
- }
-
- if ((size_t) n < size) {
- ev->ready = 0;
- }
-
- return n;
-
-#endif
-}
+++ /dev/null
-
-volitile int ngx_last_posted_event;
-
-
-typedef struct {
- ngx_tid_t tid;
- ngx_cv_t cv;
-} ngx_thread_data_t;
-
-static ngx_thread_data_t *threead_data;
-
-
-
-
-
-{
-
- err = ngx_thread_cond_wait(ngx_thread_data_cv, ngx_thread_data_mutex);
-
- tid = ngx_thread_self();
-
- for (i = 0; i < thread_data_n; i++) {
- if (thread_data[i].tid == tid) {
- cv = thread_data[i].cv;
- break;
- }
- }
-
- if (i == thread_data_n) {
- error
- return
- }
-
-
- for ( ;; ) {
-
- err = ngx_thread_cond_wait(cv, ngx_posted_events_mutex);
- if (err) {
- ngx_log_error(NGX_ALERT, log, err,
- ngx_thread_cond_wait_n " failed, thread is exiting");
- return;
- }
-
- for ( ;; ) {
- ev = NULL;
-
- for (i = ngx_last_posted_event; i > 0; i--) {
- ev = ngx_posted_events[i];
-
- if (ev == NULL) {
- continue;
- }
-
- err = ngx_thread_mutex_trylock(ev->mutex);
-
- if (err == 0) {
- ngx_posted_events[i] = NULL;
-
- while (ngx_posted_events[ngx_last_posted_event] == NULL) {
- ngx_last_posted_event--;
- }
-
- break;
- }
-
- if (err == NGX_EBUSY) {
- ev = NULL;
- continue;
- }
-
- ngx_log_error(NGX_ALERT, log, err,
- ngx_thread_mutex_unlock_n " failed,
- thread is exiting");
-
- ngx_worker_thread_error();
- return;
- }
-
- err = ngx_thread_mutex_unlock(ngx_posted_events_mutex);
- if (err) {
- ngx_log_error(NGX_ALERT, log, err,
- ngx_thread_mutex_unlock_n
- " failed, thread exiting");
- return;
- }
-
- if (ev == NULL) {
- break;
- }
-
- ngx_event_handle_event(ev);
-
- err = ngx_thread_mutex_unlock(ev->mutex);
- if (err) {
- ngx_log_error(NGX_ALERT, log, err,
- ngx_thread_mutex_unlock_n
- " failed, thread exiting");
-
- ngx_worker_thread_error();
- return;
- }
-
- err = ngx_thread_mutex_lock(ngx_posted_events_mutex);
- if (err) {
- ngx_log_error(NGX_ALERT, log, err,
- ngx_thread_mutex_lock_n
- " failed, thread exiting");
- return;
- }
- }
-
- if (restart) {
- ngx_log_error(NGX_INFO, log, 0, "thread is exiting");
- return;
- }
- }
-}
-
-ngx_worker_thread_error()
-{
- ngx_err_t err;
-
- err = ngx_thread_mutex_unlock(ngx_posted_events_mutex);
- if (err) {
- ngx_log_error(NGX_ALERT, log, err,
- ngx_thread_mutex_unlock_n
- " failed, thread exiting");
- }
-}
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_event.h>
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_EVENT_TIMER_H_INCLUDED_
#define _NGX_EVENT_TIMER_H_INCLUDED_
+++ /dev/null
-
-#include <ngx_config.h>
-
-#include <ngx_core.h>
-#include <ngx_errno.h>
-#include <ngx_log.h>
-#include <ngx_connection.h>
-#include <ngx_event.h>
-
-
-ssize_t ngx_event_wsarecv(ngx_connection_t *c, char *buf, size_t size)
-{
- int rc;
- u_int flags;
- size_t bytes;
- ngx_err_t err;
- WSABUF wsabuf[1];
- ngx_event_t *ev;
- LPWSAOVERLAPPED_COMPLETION_ROUTINE handler;
-
- ev = c->read;
-
-/* DEBUG */ bytes = 0;
-
- if (ev->timedout) {
- ngx_set_socket_errno(NGX_ETIMEDOUT);
- ngx_log_error(NGX_LOG_ERR, ev->log, 0, "WSARecv() timed out");
-
- return NGX_ERROR;
- }
-
- if (ev->ready) {
- ev->ready = 0;
-
-#if (HAVE_IOCP) /* iocp */
-
- if (ngx_event_flags & NGX_HAVE_IOCP_EVENT) {
- if (ev->ovlp.error) {
- ngx_log_error(NGX_LOG_ERR, c->log, ev->ovlp.error,
- "WSARecv() failed");
- return NGX_ERROR;
- }
-
- return ev->available;
- }
-
-#endif
-
- if (WSAGetOverlappedResult(c->fd, (LPWSAOVERLAPPED) &ev->ovlp,
- &bytes, 0, NULL) == 0) {
- err = ngx_socket_errno;
- ngx_log_error(NGX_LOG_CRIT, ev->log, err,
- "WSARecv() or WSAGetOverlappedResult() failed");
-
- return NGX_ERROR;
- }
-
- return bytes;
- }
-
- ngx_memzero(&ev->ovlp, sizeof(WSAOVERLAPPED));
- wsabuf[0].buf = buf;
- wsabuf[0].len = size;
- flags = 0;
-
-#if 0
- handler = ev->handler;
-#else
- handler = NULL;
-#endif
-
- rc = WSARecv(c->fd, wsabuf, 1, &bytes, &flags,
- (LPWSAOVERLAPPED) &ev->ovlp, handler);
-
- ngx_log_debug(ev->log, "WSARecv: %d:%d" _ rc _ bytes);
-
- if (rc == -1) {
- err = ngx_socket_errno;
- if (err == WSA_IO_PENDING) {
- return NGX_AGAIN;
-
- } else {
- ngx_log_error(NGX_LOG_CRIT, ev->log, err, "WSARecv() failed");
- return NGX_ERROR;
- }
- }
-
-#if (HAVE_IOCP) /* iocp */
-
- if (ngx_event_flags & NGX_HAVE_IOCP_EVENT) {
- return NGX_AGAIN;
- }
-
-#endif
-
- return bytes;
-}
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_http.h>
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_http.h>
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_http.h>
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_http.h>
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_http.h>
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_http.h>
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_http.h>
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_http.h>
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_http.h>
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_http.h>
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_http.h>
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_HTTP_SSL_H_INCLUDED_
#define _NGX_HTTP_SSL_H_INCLUDED_
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_http.h>
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_http.h>
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_http.h>
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_http.h>
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_http.h>
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_HTTP_PROXY_HANDLER_H_INCLUDED_
#define _NGX_HTTP_PROXY_HANDLER_H_INCLUDED_
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_http.h>
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_http.h>
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_event.h>
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_event.h>
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_HTTP_H_INCLUDED_
#define _NGX_HTTP_H_INCLUDED_
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_http.h>
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_HTTP_BUSY_LOCK_H_INCLUDED_
#define _NGX_HTTP_BUSY_LOCK_H_INCLUDED_
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_http.h>
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_HTTP_CACHE_H_INCLUDED_
#define _NGX_HTTP_CACHE_H_INCLUDED_
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_HTTP_CONFIG_H_INCLUDED_
#define _NGX_HTTP_CONFIG_H_INCLUDED_
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_http.h>
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_event.h>
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_HTTP_CORE_H_INCLUDED_
#define _NGX_HTTP_CORE_H_INCLUDED_
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_http.h>
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_http.h>
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_http.h>
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_HTTP_LOG_HANDLER_H_INCLUDED_
#define _NGX_HTTP_LOG_HANDLER_H_INCLUDED_
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_http.h>
while (p < b->last && state < sw_done) {
ch = *p++;
- /* gcc 2.95.2 and vc 6.0 compile this switch as an jump table */
+ /* gcc 2.95.2 and msvc 6.0 compile this switch as an jump table */
switch (state) {
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_types.h>
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_event.h>
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_HTTP_REQUEST_H_INCLUDED_
#define _NGX_HTTP_REQUEST_H_INCLUDED_
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_event.h>
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_http.h>
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_HTTP_SCRIPT_H_INCLUDED_
#define _NGX_HTTP_SCRIPT_H_INCLUDED_
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_http.h>
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_event.h>
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_event.h>
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_IMAP_H_INCLUDED_
#define _NGX_IMAP_H_INCLUDED_
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_event.h>
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_event.h>
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_event.h>
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_AIO_H_INCLUDED_
#define _NGX_AIO_H_INCLUDED_
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_event.h>
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_event.h>
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_event.h>
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_event.h>
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_ALLOC_H_INCLUDED_
#define _NGX_ALLOC_H_INCLUDED_
* Linux has memalign() or posix_memalign()
* Solaris has memalign()
* FreeBSD has not memalign() or posix_memalign() but its malloc() alignes
- * allocations bigger than page size at page boundary.
+ * allocations bigger than page size at the page boundary.
*/
#if (HAVE_POSIX_MEMALIGN || HAVE_MEMALIGN)
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_ATOMIC_H_INCLUDED_
#define _NGX_ATOMIC_H_INCLUDED_
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_channel.h>
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_CHANNEL_H_INCLUDED_
#define _NGX_CHANNEL_H_INCLUDED_
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_ERRNO_H_INCLUDED_
#define _NGX_ERRNO_H_INCLUDED_
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_FILES_H_INCLUDED_
#define _NGX_FILES_H_INCLUDED_
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_FREEBSD_H_INCLUDED_
#define _NGX_FREEBSD_H_INCLUDED_
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_FREEBSD_CONFIG_H_INCLUDED_
#define _NGX_FREEBSD_CONFIG_H_INCLUDED_
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
-/* FreeBSD 3.4 at least */
+/* FreeBSD 3.0 at least */
char ngx_freebsd_kern_ostype[20];
char ngx_freebsd_kern_osrelease[20];
int ngx_freebsd_kern_osreldate;
int ngx_freebsd_hw_ncpu;
-int ngx_freebsd_machdep_hlt_logical_cpus;
int ngx_freebsd_net_inet_tcp_sendspace;
-int ngx_freebsd_sendfile_nbytes_bug;
-int ngx_freebsd_use_tcp_nopush;
+
+/* FreeBSD 4.9 */
+int ngx_freebsd_machdep_hlt_logical_cpus;
/* FreeBSD 5.0 */
int ngx_freebsd_kern_ipc_zero_copy_send;
+int ngx_freebsd_sendfile_nbytes_bug;
+int ngx_freebsd_use_tcp_nopush;
+
+
ngx_os_io_t ngx_os_io = {
ngx_unix_recv,
ngx_readv_chain,
/*
- * Copyright (C) 2002-2004 Igor Sysoev, http://sysoev.ru/en/
+ * Copyright (C) 2002-2004 Igor Sysoev
*/
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_FREEBSD_RFORK_THREAD_H_INCLUDED_
#define _NGX_FREEBSD_RFORK_THREAD_H_INCLUDED_
/*
- * Copyright (C) 2002-2004 Igor Sysoev, http://sysoev.ru/en/
+ * Copyright (C) 2002-2004 Igor Sysoev
*/
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_LINUX_H_INCLUDED_
#define _NGX_LINUX_H_INCLUDED_
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_LINUX_CONFIG_H_INCLUDED_
#define _NGX_LINUX_CONFIG_H_INCLUDED_
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
/*
- * Copyright (C) 2002-2004 Igor Sysoev, http://sysoev.ru/en/
+ * Copyright (C) 2002-2004 Igor Sysoev
*/
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_OS_H_INCLUDED_
#define _NGX_OS_H_INCLUDED_
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_POSIX_CONFIG_H_INCLUDED_
#define _NGX_POSIX_CONFIG_H_INCLUDED_
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_event.h>
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_PROCESS_H_INCLUDED_
#define _NGX_PROCESS_H_INCLUDED_
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_event.h>
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_PROCESS_CYCLE_H_INCLUDED_
#define _NGX_PROCESS_CYCLE_H_INCLUDED_
/*
- * Copyright (C) 2002-2004 Igor Sysoev, http://sysoev.ru/en/
+ * Copyright (C) 2002-2004 Igor Sysoev
*/
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_event.h>
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_event.h>
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_event.h>
+++ /dev/null
-
-#include <ngx_core.h>
-#include <ngx_types.h>
-#include <ngx_errno.h>
-#include <ngx_connection.h>
-#include <ngx_log.h>
-#include <ngx_sendv.h>
-
-ssize_t ngx_sendv(ngx_connection_t *c, ngx_iovec_t *iovec, int n)
-{
- ssize_t rc;
- ngx_err_t err;
-
- rc = writev(c->fd, iovec, n);
-
- if (rc == -1) {
- err = ngx_socket_errno;
- if (err == NGX_EAGAIN) {
- ngx_log_error(NGX_LOG_INFO, c->log, err, "sendv() eagain");
- return NGX_AGAIN;
- }
-
- ngx_log_error(NGX_LOG_ERR, c->log, err, "sendv() failed");
- return NGX_ERROR;
- }
-
- return rc;
-}
+++ /dev/null
-#ifndef _NGX_SENDV_H_INCLUDED_
-#define _NGX_SENDV_H_INCLUDED_
-
-
-#include <ngx_types.h>
-#include <ngx_connection.h>
-
-typedef struct iovec ngx_iovec_t;
-#define ngx_iov_base iov_base
-#define ngx_iov_len iov_len
-
-ssize_t ngx_sendv(ngx_connection_t *c, ngx_iovec_t *iovec, int n);
-
-
-#endif /* _NGX_SENDV_H_INCLUDED_ */
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_SHARED_H_INCLUDED_
#define _NGX_SHARED_H_INCLUDED_
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
/*
* ioctl(FIONBIO) sets a blocking mode with the single syscall
* while fcntl(F_SETFL, ~O_NONBLOCK) needs to learn before
- * a previous state using fcntl(F_GETFL).
+ * the previous state using fcntl(F_GETFL).
*
* ioctl() and fcntl() are syscalls on at least FreeBSD 2.x, Linux 2.2
* and Solaris 7.
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_SOCKET_H_INCLUDED_
#define _NGX_SOCKET_H_INCLUDED_
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_SOLARIS_H_INCLUDED_
#define _NGX_SOLARIS_H_INCLUDED_
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_SOLARIS_CONFIG_H_INCLUDED_
#define _NGX_SOLARIS_CONFIG_H_INCLUDED_
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
/*
- * Copyright (C) 2002-2004 Igor Sysoev, http://sysoev.ru/en/
+ * Copyright (C) 2002-2004 Igor Sysoev
*/
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_THREAD_H_INCLUDED_
#define _NGX_THREAD_H_INCLUDED_
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_TIME_H_INCLUDED_
#define _NGX_TIME_H_INCLUDED_
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_TYPES_H_INCLUDED_
#define _NGX_TYPES_H_INCLUDED_
+++ /dev/null
-
-#include <ngx_config.h>
-#include <ngx_core.h>
-
-
-#if 0
-/* STUB */
-ssize_t ngx_unix_recv(ngx_connection_t *c, char *buf, size_t size);
-ngx_chain_t *ngx_writev_chain(ngx_connection_t *c, ngx_chain_t *in);
-int ngx_posix_init(ngx_log_t *log);
-int ngx_posix_post_conf_init(ngx_log_t *log);
-/* */
-#endif
-
-
-ngx_os_io_t ngx_os_io = {
- ngx_unix_recv,
- ngx_readv_chain,
- NULL,
- ngx_writev_chain,
- NGX_HAVE_ZEROCOPY
-};
-
-
-int ngx_os_init(ngx_log_t *log)
-{
- return ngx_posix_init(log);
-}
-
-
-int ngx_os_post_conf_init(ngx_log_t *log)
-{
- return ngx_posix_post_conf_init(log);
-}
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_USER_H_INCLUDED_
#define _NGX_USER_H_INCLUDED_
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_event.h>
+++ /dev/null
-
-
-typedef struct {
- int lock;
-} ngx_mutex_t;
-
-
-static inline int ngx_spin_lock(ngx_mutex_t *m, int count)
-{
- int lock;
-
- __asm__ __volatile("
-
-get_lock:
- mov $1, %1
- xchg %1, %2
- cmp $0, %1
- jne spin_lock
-
-spin_lock:
- cmp $0, %3
- je failed
-
- dec %3
- rep nop
- cmp $0, %2
- jne spin_lock
-
- ": "=q" (lock), "m" (m->lock), "q" (count));
-}
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
+
#include <sys/syscall.h>
#include <machine/asm.h>
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_ALLOC_H_INCLUDED_
#define _NGX_ALLOC_H_INCLUDED_
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_ATOMIC_H_INCLUDED_
#define _NGX_ATOMIC_H_INCLUDED_
/*
- TODO:
- add WSA error messages for NT and 98
- test for English only messages
-*/
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
+/*
+ * TODO:
+ * add WSA error messages for NT and 98
+ * test for English only messages
+ */
#include <ngx_config.h>
#include <ngx_core.h>
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_ERRNO_H_INCLUDED_
#define _NGX_ERRNO_H_INCLUDED_
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_FILES_H_INCLUDED_
#define _NGX_FILES_H_INCLUDED_
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_OS_H_INCLUDED_
#define _NGX_OS_H_INCLUDED_
+++ /dev/null
-
-
-#include <ngx_config.h>
-
-#include <ngx_log.h>
-#include <ngx_os_thread.h>
-
-
-int ngx_create_os_thread(ngx_os_tid_t *tid, void *stack,
- ngx_thread_start_routine_t func, void *arg,
- ngx_log_t log)
-{
- ngx_os_tid_t id;
- int dummy; /* needed in Win9X only, in NT can be NULL */
-
- id = CreateThread(NULL, stack_size, func, arg, 0, &dummy);
-
- if (id == NULL) {
- ngx_log_error(NGX_LOG_ERR, log, err, "CreateThread() failed");
- return NGX_ERROR;
- }
-
- *tid = id;
-
- return NGX_OK;
-}
+++ /dev/null
-#ifndef _NGX_OS_THREAD_H_INCLUDED_
-#define _NGX_OS_THREAD_H_INCLUDED_
-
-
-#include <ngx_config.h>
-
-
-typedef HANDLE ngx_os_tid_t;
-typedef int ngx_tid_t;
-
-typedef LPTHREAD_START_ROUTINE ngx_thread_start_routine_t
-
-
-#endif /* _NGX_OS_THREAD_H_INCLUDED_ */
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_PROCESS_H_INCLUDED_
#define _NGX_PROCESS_H_INCLUDED_
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_event.h>
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_PROCESS_CYCLE_H_INCLUDED_
#define _NGX_PROCESS_CYCLE_H_INCLUDED_
+++ /dev/null
-#ifndef _NGX_RECV_H_INCLUDED_
-#define _NGX_RECV_H_INCLUDED_
-
-
-#include <errno.h>
-
-#define ngx_recv(fd, buf, size, flags) recv(fd, buf, size, flags)
-
-
-#endif /* _NGX_RECV_H_INCLUDED_ */
+++ /dev/null
-
-#include <ngx_config.h>
-#include <ngx_core.h>
-#include <ngx_types.h>
-#include <ngx_files.h>
-#include <ngx_socket.h>
-#include <ngx_errno.h>
-#include <ngx_log.h>
-#include <ngx_connection.h>
-#include <ngx_sendv.h>
-#include <ngx_sendfile.h>
-
-/*
- TODO:
- various flags
- TransmitPackets
-*/
-
-#if (HAVE_WIN32_TRANSMITFILE)
-
-int ngx_sendfile(ngx_connection_t *c,
- ngx_iovec_t *headers, int hdr_cnt,
- ngx_fd_t fd, off_t offset, size_t nbytes,
- ngx_iovec_t *trailers, int trl_cnt,
- off_t *sent, u_int flags)
-{
- int tfrc, rc;
- ngx_err_t tf_err, err;
- OVERLAPPED olp;
- TRANSMIT_FILE_BUFFERS tfb, *ptfb;
-
-#if 0
- ev = c->write;
-
- if (ev->timedout) {
- ngx_set_socket_errno(NGX_ETIMEDOUT);
- ngx_log_error(NGX_LOG_ERR, ev->log, 0, "TransmitFile() timed out");
-
- return NGX_ERROR;
- }
-
- if (ev->ready) {
- ev->ready = 0;
-
-#if (HAVE_IOCP) /* iocp */
-
- if (ngx_event_flags & NGX_HAVE_IOCP_EVENT) {
- if (ev->ovlp.error) {
- ngx_log_error(NGX_LOG_ERR, ev->log, 0, "TransmitFile() failed");
- return NGX_ERROR;
- }
-
- return ev->available;
- }
- }
-
-#endif
-
- /* TODO: WSAGetOverlappedResult stuff */
-
- }
-
-#endif
-
-
- tf_err = 0;
- err = 0;
-
- olp.Internal = 0;
- olp.InternalHigh = 0;
- olp.Offset = (DWORD) offset;
- olp.OffsetHigh = (DWORD) (offset >> 32);
- olp.hEvent = NULL;
-
- if (headers || trailers) {
- tfb.Head = headers->ngx_iov_base;
- tfb.HeadLength = headers->ngx_iov_len;
- tfb.Tail = trailers->ngx_iov_base;
- tfb.TailLength = trailers->ngx_iov_len;
- ptfb = &tfb;
-
- } else {
- ptfb = NULL;
- }
-
-#if 1
- flags = TF_DISCONNECT|TF_REUSE_SOCKET;
- tfrc = transmitfile(c->fd, NULL, 0, 0, &olp, NULL, flags);
-#else
- tfrc = TransmitFile(c->fd, fd, nbytes, 0, &olp, ptfb, flags);
-#endif
-
-#if 0
-#if 1
- tfrc = TransmitFile(c->fd, fd, nbytes, 0, &olp, ptfb, 0);
-#else
- tfrc = TransmitFile(c->fd, fd, nbytes, 0, NULL, ptfb, 0);
-#endif
-#endif
-
- if (tfrc == 0) {
- tf_err = ngx_socket_errno;
- ngx_log_error(NGX_LOG_NOTICE, c->log, tf_err,
- "ngx_sendfile: TransmitFile failed");
- if (tf_err == WSA_IO_PENDING) {
- return NGX_AGAIN;
- }
- }
-
- /* set sent */
-#if 0
- rc = WSAGetOverlappedResult(c->fd, &olp, (unsigned long *) sent, 0, NULL);
-#else
- *sent = olp.InternalHigh;
- rc = 1;
-#endif
-
- ngx_log_debug(c->log, "TransmitFile: %d, @%I64d %I64d:%d" _
- tfrc _ offset _ *sent _ nbytes);
-
- if (rc == 0) {
- err = ngx_socket_errno;
- ngx_log_error(NGX_LOG_ERR, c->log, err,
- "ngx_sendfile: WSAGetOverlappedResult failed");
- }
-
- if (tfrc == 0) {
- if (tf_err != NGX_EAGAIN) {
- ngx_log_error(NGX_LOG_ERR, c->log, tf_err,
- "ngx_sendfile: TransmitFile failed");
- return NGX_ERROR;
- }
-
- ngx_log_error(NGX_LOG_INFO, c->log, tf_err,
- "ngx_sendfile: TransmitFile sent only %I64d bytes",
- *sent);
- }
-
- if (rc == 0)
- return NGX_ERROR;
-
- return NGX_OK;
-}
-
-#endif
+++ /dev/null
-
-#include <ngx_config.h>
-
-#include <ngx_core.h>
-#include <ngx_types.h>
-#include <ngx_errno.h>
-#include <ngx_connection.h>
-#include <ngx_log.h>
-#include <ngx_sendv.h>
-
-#include <ngx_string.h>
-
-ssize_t ngx_sendv(ngx_connection_t *c, ngx_iovec_t *iovec, int n)
-{
- int rc;
- size_t sent;
- ngx_err_t err;
-
-#if 0
- /* STUB: WSABUF must be 4-byte aligned. Undocumented WSAEINVAL error */
- ngx_iovec_t iov[10];
- ngx_memcpy(iov, iovec, n * sizeof(ngx_iovec_t));
-#endif
-
- sent = 0;
-
- ngx_log_debug(c->log, "WSASend: %d, %d, %08x" _ c->fd _ n _ iovec);
-
- rc = WSASend(c->fd, iovec, n, &sent, 0, NULL, NULL);
-
- ngx_log_debug(c->log, "WSASend() done");
-
- if (rc == SOCKET_ERROR) {
- err = ngx_socket_errno;
-
- if (err == NGX_EAGAIN) {
- ngx_log_error(NGX_LOG_INFO, c->log, err, "WSASend() eagain");
- return NGX_AGAIN;
- }
-
- ngx_log_error(NGX_LOG_ERR, c->log, err, "WSASend() failed");
- return NGX_ERROR;
- }
-
- return sent;
-}
+++ /dev/null
-#ifndef _NGX_SENDV_H_INCLUDED_
-#define _NGX_SENDV_H_INCLUDED_
-
-
-#include <ngx_config.h>
-#include <ngx_connection.h>
-
-typedef WSABUF ngx_iovec_t;
-#define ngx_iov_base buf
-#define ngx_iov_len len
-
-ssize_t ngx_sendv(ngx_connection_t *c, ngx_iovec_t *iovec, int n);
-
-
-#endif /* _NGX_SENDV_H_INCLUDED_ */
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
+
#define NGX_SERVICE_CONTROL_SHUTDOWN 128
#define NGX_SERVICE_CONTROL_REOPEN 129
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_SHARED_H_INCLUDED_
#define _NGX_SHARED_H_INCLUDED_
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_SOCKET_H_INCLUDED_
#define _NGX_SOCKET_H_INCLUDED_
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_THREAD_H_INCLUDED_
#define _NGX_THREAD_H_INCLUDED_
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
/*
* A file time is a 64-bit value that represents the number
* of 100-nanosecond intervals that have elapsed since
- * 12:00 A.M. January 1, 1601 (UTC).
+ * January 1, 1601 12:00 A.M. UTC.
*
* Between January 1, 1970 (Epoch) and January 1, 1601 there were
* 134744 days,
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_TIME_H_INCLUDED_
#define _NGX_TIME_H_INCLUDED_
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_TYPES_H_INCLUDED_
#define _NGX_TYPES_H_INCLUDED_
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_USER_H_INCLUDED_
#define _NGX_USER_H_INCLUDED_
+
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#ifndef _NGX_WIN32_CONFIG_H_INCLUDED_
#define _NGX_WIN32_CONFIG_H_INCLUDED_
#define WIN32_LEAN_AND_MEAN
/*
- * we need to include windows.h explicity before winsock2.h because
- * the warning 4201 is enabled in windows.h
+ * we need to include <windows.h> explicity before <winsock2.h> because
+ * the warning 4201 is enabled in <windows.h>
*/
#include <windows.h>
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_event.h>
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_event.h>
+/*
+ * Copyright (C) 2002-2004 Igor Sysoev
+ */
+
+
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_event.h>