Deleted
Added
nxt_conn_accept.c (150:09a7b87c743a) | nxt_conn_accept.c (312:c156aea91063) |
---|---|
1 2/* 3 * Copyright (C) Igor Sysoev 4 * Copyright (C) NGINX, Inc. 5 */ 6 7#include <nxt_main.h> 8 --- 103 unchanged lines hidden (view full) --- 112 goto fail; 113 } 114 115 c->remote = remote; 116 117 sa = ls->sockaddr; 118 remote->type = sa->type; 119 /* | 1 2/* 3 * Copyright (C) Igor Sysoev 4 * Copyright (C) NGINX, Inc. 5 */ 6 7#include <nxt_main.h> 8 --- 103 unchanged lines hidden (view full) --- 112 goto fail; 113 } 114 115 c->remote = remote; 116 117 sa = ls->sockaddr; 118 remote->type = sa->type; 119 /* |
120 * Set address family for unspecified Unix domain, 121 * because these sockaddr's are not be passed to accept(). | 120 * Set address family for unspecified Unix domain socket, 121 * because these sockaddr's are not updated by old BSD systems, 122 * see comment in nxt_conn_io_accept(). |
122 */ 123 remote->u.sockaddr.sa_family = sa->u.sockaddr.sa_family; 124 125 return c; 126 } 127 128 fail: 129 --- 14 unchanged lines hidden (view full) --- 144 145 lev->accept(task, lev, data); 146} 147 148 149void 150nxt_conn_io_accept(nxt_task_t *task, void *obj, void *data) 151{ | 123 */ 124 remote->u.sockaddr.sa_family = sa->u.sockaddr.sa_family; 125 126 return c; 127 } 128 129 fail: 130 --- 14 unchanged lines hidden (view full) --- 145 146 lev->accept(task, lev, data); 147} 148 149 150void 151nxt_conn_io_accept(nxt_task_t *task, void *obj, void *data) 152{ |
152 socklen_t len; | 153 socklen_t socklen; |
153 nxt_conn_t *c; 154 nxt_socket_t s; 155 struct sockaddr *sa; 156 nxt_listen_event_t *lev; 157 158 lev = obj; 159 c = lev->next; 160 161 lev->ready--; 162 lev->socket.read_ready = (lev->ready != 0); 163 | 154 nxt_conn_t *c; 155 nxt_socket_t s; 156 struct sockaddr *sa; 157 nxt_listen_event_t *lev; 158 159 lev = obj; 160 c = lev->next; 161 162 lev->ready--; 163 lev->socket.read_ready = (lev->ready != 0); 164 |
164 len = c->remote->socklen; | 165 sa = &c->remote->u.sockaddr; 166 socklen = c->remote->socklen; 167 /* 168 * The returned socklen is ignored here, because sockaddr_in and 169 * sockaddr_in6 socklens are not changed. As to unspecified sockaddr_un 170 * it is 3 byte length and already prepared, because old BSDs return zero 171 * socklen and do not update the sockaddr_un at all; Linux returns 2 byte 172 * socklen and updates only the sa_family part; other systems copy 3 bytes 173 * and truncate surplus zero part. Only bound sockaddr_un will be really 174 * truncated here. 175 */ 176 s = accept(lev->socket.fd, sa, &socklen); |
165 | 177 |
166 if (len >= sizeof(struct sockaddr)) { 167 sa = &c->remote->u.sockaddr; 168 169 } else { 170 sa = NULL; 171 len = 0; 172 } 173 174 s = accept(lev->socket.fd, sa, &len); 175 | |
176 if (s == -1) { 177 nxt_conn_accept_error(task, lev, "accept", nxt_socket_errno); 178 return; 179 } 180 181 c->socket.fd = s; 182 183#if (NXT_LINUX) --- 193 unchanged lines hidden --- | 178 if (s == -1) { 179 nxt_conn_accept_error(task, lev, "accept", nxt_socket_errno); 180 return; 181 } 182 183 c->socket.fd = s; 184 185#if (NXT_LINUX) --- 193 unchanged lines hidden --- |