Mercurial > hg > nginx
comparison src/event/ngx_event_connect.c @ 121:b3655b21375a
nginx-0.0.1-2003-07-22-23:53:10 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Tue, 22 Jul 2003 19:53:10 +0000 |
parents | b776ad95d96d |
children | cd91e4a1ad0d |
comparison
equal
deleted
inserted
replaced
120:b776ad95d96d | 121:b3655b21375a |
---|---|
2 #include <ngx_event_connect.h> | 2 #include <ngx_event_connect.h> |
3 | 3 |
4 | 4 |
5 int ngx_event_connect_peer(ngx_peer_connecttion_t *pc) | 5 int ngx_event_connect_peer(ngx_peer_connecttion_t *pc) |
6 { | 6 { |
7 time_t now; | 7 time_t now; |
8 ngx_socket_t s; | |
8 | 9 |
9 /* TODO: cached connection */ | 10 /* ngx_lock_mutex(pc->peers->mutex); */ |
11 | |
12 if (pc->peers->last_cached) { | |
13 | |
14 /* cached connection */ | |
15 | |
16 pc->connection = pc->peers->cached[pc->peers->last_cached] | |
17 pc->peers->last_cached--; | |
18 | |
19 /* ngx_unlock_mutex(pc->peers->mutex); */ | |
20 | |
21 pc->cached = 1; | |
22 return NGX_OK; | |
23 } | |
24 | |
25 /* ngx_unlock_mutex(pc->peers->mutex); */ | |
26 | |
27 pc->cached = 0; | |
10 | 28 |
11 now = ngx_time(); | 29 now = ngx_time(); |
12 | 30 |
13 if (pc->peers->number > 1) { | 31 if (pc->peers->number > 1) { |
14 | 32 |
69 } | 87 } |
70 } | 88 } |
71 } | 89 } |
72 } | 90 } |
73 | 91 |
74 | 92 pc->addr_port_text = peer->addr_port_text; |
75 | |
76 | |
77 | 93 |
78 s = ngx_socket(AF_INET, SOCK_STREAM, IPPROTO_IP, 0); | 94 s = ngx_socket(AF_INET, SOCK_STREAM, IPPROTO_IP, 0); |
79 | 95 |
80 if (s == -1) { | 96 if (s == -1) { |
81 ngx_log_error(NGX_LOG_ALERT, cp->log, ngx_socket_errno, | 97 ngx_log_error(NGX_LOG_ALERT, pc->log, ngx_socket_errno, |
82 ngx_socket_n " failed"); | 98 ngx_socket_n " failed"); |
83 return NGX_ERROR; | 99 return NGX_ERROR; |
84 } | 100 } |
85 | 101 |
86 if (cp->rcvbuf) { | 102 if (pc->rcvbuf) { |
87 if (setsockopt(s, SOL_SOCKET, SO_RCVBUF, | 103 if (setsockopt(s, SOL_SOCKET, SO_RCVBUF, |
88 (const void *) &cp->rcvbuf, sizeof(int)) == -1) { | 104 (const void *) &pc->rcvbuf, sizeof(int)) == -1) { |
89 ngx_log_error(NGX_LOG_ALERT, cp->log, ngx_socket_errno, | 105 ngx_log_error(NGX_LOG_ALERT, pc->log, ngx_socket_errno, |
90 "setsockopt(SO_RCVBUF) failed"); | 106 "setsockopt(SO_RCVBUF) failed"); |
91 | 107 |
92 if (ngx_close_socket(s) == -1) { | 108 if (ngx_close_socket(s) == -1) { |
93 ngx_log_error(NGX_LOG_ALERT, cp->log, ngx_socket_errno, | 109 ngx_log_error(NGX_LOG_ALERT, pc->log, ngx_socket_errno, |
94 ngx_close_socket_n " failed"); | 110 ngx_close_socket_n " failed"); |
95 } | 111 } |
96 | 112 |
97 return NGX_ERROR; | 113 return NGX_ERROR; |
98 } | 114 } |
99 } | 115 } |
100 | 116 |
101 if (ngx_nonblocking(s) == -1) { | 117 if (ngx_nonblocking(s) == -1) { |
102 ngx_log_error(NGX_LOG_ALERT, cn->log, ngx_socket_errno, | 118 ngx_log_error(NGX_LOG_ALERT, pc->log, ngx_socket_errno, |
103 ngx_nonblocking_n " failed"); | 119 ngx_nonblocking_n " failed"); |
104 | 120 |
105 if (ngx_close_socket(s) == -1) { | 121 if (ngx_close_socket(s) == -1) { |
106 ngx_log_error(NGX_LOG_ALERT, cn->log, ngx_socket_errno, | 122 ngx_log_error(NGX_LOG_ALERT, pc->log, ngx_socket_errno, |
107 ngx_close_socket_n " failed"); | 123 ngx_close_socket_n " failed"); |
108 } | 124 } |
109 | 125 |
110 return NGX_ERROR; | 126 return NGX_ERROR; |
111 } | 127 } |
112 | 128 |
113 #if (WIN32) | 129 #if (WIN32) |
114 /* | 130 /* |
115 * Winsock assignes a socket number divisible by 4 | 131 * Winsock assignes a socket number divisible by 4 |
116 * so to find a connection we divide a socket number by 4. | 132 * so to find a connection we divide a socket number by 4. |
117 */ | 133 */ |
118 | 134 |
119 if (s % 4) { | 135 if (s % 4) { |
120 ngx_log_error(NGX_LOG_EMERG, cp->log, 0, | 136 ngx_log_error(NGX_LOG_EMERG, pc->log, 0, |
121 ngx_socket_n | 137 ngx_socket_n |
122 " created socket %d, not divisible by 4", s); | 138 " created socket %d, not divisible by 4", s); |
123 exit(1); | 139 exit(1); |
124 } | 140 } |
125 | 141 |
126 c = &ngx_cycle->connections[s / 4]; | 142 c = &ngx_cycle->connections[s / 4]; |
127 rev = &ngx_cycle->read_events[s / 4]; | 143 rev = &ngx_cycle->read_events[s / 4]; |
128 wev = &ngx_cycle->write_events[s / 4]; | 144 wev = &ngx_cycle->write_events[s / 4]; |
129 | 145 |
146 c->read = rev; | 162 c->read = rev; |
147 c->write = wev; | 163 c->write = wev; |
148 | 164 |
149 rev->instance = wev->instance = !instance; | 165 rev->instance = wev->instance = !instance; |
150 | 166 |
151 !!!!!!!!!!!!!!! | 167 rev->log = wev->log = c->log = pc->log; |
168 c->fd = s; | |
152 | 169 |
153 rev->log = wev->log = c->log = cn->log; | 170 pc->connection = c; |
154 c->fd = s; | 171 |
155 wev->close_handler = rev->close_handler = ngx_event_close_connection; | 172 if (ngx_add_conn) { |
173 if (ngx_add_conn(c) == NGX_ERROR) { | |
174 return NGX_ERROR; | |
175 } | |
176 } | |
177 | |
156 } | 178 } |