1*20Sigor@sysoev.ru 2*20Sigor@sysoev.ru /* 3*20Sigor@sysoev.ru * Copyright (C) Igor Sysoev 4*20Sigor@sysoev.ru * Copyright (C) Valentin V. Bartenev 5*20Sigor@sysoev.ru * Copyright (C) NGINX, Inc. 6*20Sigor@sysoev.ru */ 7*20Sigor@sysoev.ru 8*20Sigor@sysoev.ru #include <nxt_main.h> 9*20Sigor@sysoev.ru #include <nxt_runtime.h> 10*20Sigor@sysoev.ru #include <nxt_master_process.h> 11*20Sigor@sysoev.ru 12*20Sigor@sysoev.ru 13*20Sigor@sysoev.ru static nxt_int_t nxt_router_listen_socket(nxt_task_t *task, nxt_runtime_t *rt); 14*20Sigor@sysoev.ru 15*20Sigor@sysoev.ru 16*20Sigor@sysoev.ru nxt_int_t 17*20Sigor@sysoev.ru nxt_router_start(nxt_task_t *task, nxt_runtime_t *rt) 18*20Sigor@sysoev.ru { 19*20Sigor@sysoev.ru if (nxt_router_listen_socket(task, rt) != NXT_OK) { 20*20Sigor@sysoev.ru return NXT_ERROR; 21*20Sigor@sysoev.ru } 22*20Sigor@sysoev.ru 23*20Sigor@sysoev.ru return NXT_OK; 24*20Sigor@sysoev.ru } 25*20Sigor@sysoev.ru 26*20Sigor@sysoev.ru 27*20Sigor@sysoev.ru static nxt_int_t 28*20Sigor@sysoev.ru nxt_router_listen_socket(nxt_task_t *task, nxt_runtime_t *rt) 29*20Sigor@sysoev.ru { 30*20Sigor@sysoev.ru nxt_sockaddr_t *sa; 31*20Sigor@sysoev.ru nxt_listen_socket_t *ls; 32*20Sigor@sysoev.ru 33*20Sigor@sysoev.ru sa = nxt_sockaddr_alloc(rt->mem_pool, sizeof(struct sockaddr_in), 34*20Sigor@sysoev.ru NXT_INET_ADDR_STR_LEN); 35*20Sigor@sysoev.ru if (sa == NULL) { 36*20Sigor@sysoev.ru return NXT_ERROR; 37*20Sigor@sysoev.ru } 38*20Sigor@sysoev.ru 39*20Sigor@sysoev.ru sa->type = SOCK_STREAM; 40*20Sigor@sysoev.ru sa->u.sockaddr_in.sin_family = AF_INET; 41*20Sigor@sysoev.ru sa->u.sockaddr_in.sin_port = htons(8000); 42*20Sigor@sysoev.ru 43*20Sigor@sysoev.ru nxt_sockaddr_text(sa); 44*20Sigor@sysoev.ru 45*20Sigor@sysoev.ru ls = nxt_runtime_listen_socket_add(rt, sa); 46*20Sigor@sysoev.ru if (ls == NULL) { 47*20Sigor@sysoev.ru return NXT_ERROR; 48*20Sigor@sysoev.ru } 49*20Sigor@sysoev.ru 50*20Sigor@sysoev.ru ls->read_after_accept = 1; 51*20Sigor@sysoev.ru 52*20Sigor@sysoev.ru ls->flags = NXT_NONBLOCK; 53*20Sigor@sysoev.ru 54*20Sigor@sysoev.ru #if 0 55*20Sigor@sysoev.ru /* STUB */ 56*20Sigor@sysoev.ru wq = nxt_mem_zalloc(cf->mem_pool, sizeof(nxt_work_queue_t)); 57*20Sigor@sysoev.ru if (wq == NULL) { 58*20Sigor@sysoev.ru return NXT_ERROR; 59*20Sigor@sysoev.ru } 60*20Sigor@sysoev.ru nxt_work_queue_name(wq, "listen"); 61*20Sigor@sysoev.ru /**/ 62*20Sigor@sysoev.ru 63*20Sigor@sysoev.ru ls->work_queue = wq; 64*20Sigor@sysoev.ru #endif 65*20Sigor@sysoev.ru ls->handler = nxt_stream_connection_init; 66*20Sigor@sysoev.ru 67*20Sigor@sysoev.ru /* 68*20Sigor@sysoev.ru * Connection memory pool chunk size is tunned to 69*20Sigor@sysoev.ru * allocate the most data in one mem_pool chunk. 70*20Sigor@sysoev.ru */ 71*20Sigor@sysoev.ru ls->mem_pool_size = nxt_listen_socket_pool_min_size(ls) 72*20Sigor@sysoev.ru + sizeof(nxt_event_conn_proxy_t) 73*20Sigor@sysoev.ru + sizeof(nxt_event_conn_t) 74*20Sigor@sysoev.ru + 4 * sizeof(nxt_buf_t); 75*20Sigor@sysoev.ru 76*20Sigor@sysoev.ru if (nxt_listen_socket_create(task, ls, 0) != NXT_OK) { 77*20Sigor@sysoev.ru return NXT_ERROR; 78*20Sigor@sysoev.ru } 79*20Sigor@sysoev.ru 80*20Sigor@sysoev.ru if (nxt_event_conn_listen(task, ls) != NXT_OK) { 81*20Sigor@sysoev.ru return NXT_ERROR; 82*20Sigor@sysoev.ru } 83*20Sigor@sysoev.ru 84*20Sigor@sysoev.ru return NXT_OK; 85*20Sigor@sysoev.ru } 86