xref: /unit/src/nxt_listen_socket.h (revision 115)
10Sigor@sysoev.ru 
20Sigor@sysoev.ru /*
30Sigor@sysoev.ru  * Copyright (C) Igor Sysoev
40Sigor@sysoev.ru  * Copyright (C) NGINX, Inc.
50Sigor@sysoev.ru  */
60Sigor@sysoev.ru 
70Sigor@sysoev.ru #ifndef _NXT_LISTEN_SOCKET_H_INCLUDED_
80Sigor@sysoev.ru #define _NXT_LISTEN_SOCKET_H_INCLUDED_
90Sigor@sysoev.ru 
100Sigor@sysoev.ru 
110Sigor@sysoev.ru typedef struct {
120Sigor@sysoev.ru     /* nxt_socket_t is int. */
130Sigor@sysoev.ru     nxt_socket_t              socket;
140Sigor@sysoev.ru     int                       backlog;
150Sigor@sysoev.ru 
160Sigor@sysoev.ru     nxt_work_queue_t          *work_queue;
170Sigor@sysoev.ru     nxt_work_handler_t        handler;
180Sigor@sysoev.ru 
190Sigor@sysoev.ru     nxt_sockaddr_t            *sockaddr;
200Sigor@sysoev.ru 
210Sigor@sysoev.ru     uint8_t                   flags;
220Sigor@sysoev.ru     uint8_t                   read_after_accept;   /* 1 bit */
230Sigor@sysoev.ru 
240Sigor@sysoev.ru #if (NXT_SSLTLS)
250Sigor@sysoev.ru     uint8_t                   ssltls;              /* 1 bit */
260Sigor@sysoev.ru #endif
270Sigor@sysoev.ru #if (NXT_INET6 && defined IPV6_V6ONLY)
280Sigor@sysoev.ru     uint8_t                   ipv6only;            /* 2 bits */
290Sigor@sysoev.ru #endif
300Sigor@sysoev.ru 
3113Sigor@sysoev.ru     uint8_t                   socklen;
3213Sigor@sysoev.ru     uint8_t                   address_length;
330Sigor@sysoev.ru } nxt_listen_socket_t;
340Sigor@sysoev.ru 
350Sigor@sysoev.ru 
360Sigor@sysoev.ru #if (NXT_FREEBSD || NXT_MACOSX || NXT_OPENBSD)
370Sigor@sysoev.ru /*
380Sigor@sysoev.ru  * A backlog is limited by system-wide sysctl kern.ipc.somaxconn.
390Sigor@sysoev.ru  * This is supported by FreeBSD 2.2, OpenBSD 2.0, and MacOSX.
400Sigor@sysoev.ru  */
410Sigor@sysoev.ru #define NXT_LISTEN_BACKLOG    -1
420Sigor@sysoev.ru 
430Sigor@sysoev.ru #else
440Sigor@sysoev.ru /*
450Sigor@sysoev.ru  * Linux, Solaris, and NetBSD treat negative value as 0.
460Sigor@sysoev.ru  * 511 is a safe default.
470Sigor@sysoev.ru  */
480Sigor@sysoev.ru #define NXT_LISTEN_BACKLOG    511
490Sigor@sysoev.ru #endif
500Sigor@sysoev.ru 
510Sigor@sysoev.ru 
52*115Sigor@sysoev.ru NXT_EXPORT nxt_socket_t nxt_listen_socket_create0(nxt_task_t *task,
53*115Sigor@sysoev.ru     nxt_sockaddr_t *sa, nxt_uint_t flags);
54*115Sigor@sysoev.ru NXT_EXPORT nxt_int_t nxt_listen_socket(nxt_task_t *task, nxt_socket_t s,
55*115Sigor@sysoev.ru     int backlog);
56*115Sigor@sysoev.ru 
5713Sigor@sysoev.ru NXT_EXPORT nxt_int_t nxt_listen_socket_create(nxt_task_t *task,
5813Sigor@sysoev.ru     nxt_listen_socket_t *ls, nxt_bool_t bind_test);
5913Sigor@sysoev.ru NXT_EXPORT nxt_int_t nxt_listen_socket_update(nxt_task_t *task,
6013Sigor@sysoev.ru     nxt_listen_socket_t *ls, nxt_listen_socket_t *prev);
610Sigor@sysoev.ru NXT_EXPORT size_t nxt_listen_socket_pool_min_size(nxt_listen_socket_t *ls);
620Sigor@sysoev.ru 
630Sigor@sysoev.ru 
640Sigor@sysoev.ru #endif /* _NXT_LISTEN_SOCKET_H_INCLUDED_ */
65