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