Mercurial > hg > nginx
comparison src/event/ngx_event_connect.c @ 137:2a615b036870
nginx-0.0.1-2003-10-03-19:50:53 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Fri, 03 Oct 2003 15:50:53 +0000 |
parents | da00cde00e8a |
children | 54307053f185 |
comparison
equal
deleted
inserted
replaced
136:da00cde00e8a | 137:2a615b036870 |
---|---|
7 | 7 |
8 /* AF_INET only */ | 8 /* AF_INET only */ |
9 | 9 |
10 int ngx_event_connect_peer(ngx_peer_connection_t *pc) | 10 int ngx_event_connect_peer(ngx_peer_connection_t *pc) |
11 { | 11 { |
12 int rc, instance; | 12 int rc, instance, event; |
13 time_t now; | 13 time_t now; |
14 ngx_err_t err; | 14 ngx_err_t err; |
15 ngx_peer_t *peer; | 15 ngx_peer_t *peer; |
16 ngx_socket_t s; | 16 ngx_socket_t s; |
17 ngx_event_t *rev, *wev; | 17 ngx_event_t *rev, *wev; |
173 if (ngx_add_conn(c) == NGX_ERROR) { | 173 if (ngx_add_conn(c) == NGX_ERROR) { |
174 return NGX_ERROR; | 174 return NGX_ERROR; |
175 } | 175 } |
176 } | 176 } |
177 | 177 |
178 ngx_memzero(&addr, sizeof(struct sockaddr_in)); | |
179 | |
178 addr.sin_family = AF_INET; | 180 addr.sin_family = AF_INET; |
179 addr.sin_addr.s_addr = peer->addr; | 181 addr.sin_addr.s_addr = peer->addr; |
180 addr.sin_port = htons(peer->port); | 182 addr.sin_port = peer->port; |
181 | 183 |
182 rc = connect(s, (struct sockaddr *) &addr, sizeof(struct sockaddr_in)); | 184 rc = connect(s, (struct sockaddr *) &addr, sizeof(struct sockaddr_in)); |
183 | 185 |
184 if (rc == -1) { | 186 if (rc == -1) { |
185 err = ngx_socket_errno; | 187 err = ngx_socket_errno; |
193 | 195 |
194 return NGX_CONNECT_ERROR; | 196 return NGX_CONNECT_ERROR; |
195 } | 197 } |
196 } | 198 } |
197 | 199 |
200 /* TODO: epoll, aio, iocp */ | |
201 | |
202 if (ngx_event_flags & NGX_HAVE_CLEAR_EVENT) { /* kqueue */ | |
203 event = NGX_CLEAR_EVENT; | |
204 | |
205 } else { /* select, poll, /dev/poll */ | |
206 event = NGX_LEVEL_EVENT; | |
207 } | |
208 | |
209 if (rc == -1) { | |
210 | |
211 /* NGX_EINPROGRESS */ | |
212 | |
213 if (ngx_add_event(wev, NGX_WRITE_EVENT, event) != NGX_OK) { | |
214 return NGX_ERROR; | |
215 } | |
216 | |
217 return NGX_AGAIN; | |
218 } | |
219 | |
220 if (ngx_add_event(rev, NGX_READ_EVENT, event) != NGX_OK) { | |
221 return NGX_ERROR; | |
222 } | |
223 | |
198 return NGX_OK; | 224 return NGX_OK; |
199 } | 225 } |
200 | 226 |
201 | 227 |
202 void ngx_event_connect_peer_failed(ngx_peer_connection_t *pc) | 228 void ngx_event_connect_peer_failed(ngx_peer_connection_t *pc) |
203 { | 229 { |
230 pc->tries--; | |
231 | |
204 return; | 232 return; |
205 } | 233 } |