Mercurial > hg > nginx
diff 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 |
line wrap: on
line diff
--- a/src/event/ngx_event_connect.c +++ b/src/event/ngx_event_connect.c @@ -9,7 +9,7 @@ int ngx_event_connect_peer(ngx_peer_connection_t *pc) { - int rc, instance; + int rc, instance, event; time_t now; ngx_err_t err; ngx_peer_t *peer; @@ -175,9 +175,11 @@ int ngx_event_connect_peer(ngx_peer_conn } } + ngx_memzero(&addr, sizeof(struct sockaddr_in)); + addr.sin_family = AF_INET; addr.sin_addr.s_addr = peer->addr; - addr.sin_port = htons(peer->port); + addr.sin_port = peer->port; rc = connect(s, (struct sockaddr *) &addr, sizeof(struct sockaddr_in)); @@ -195,11 +197,37 @@ int ngx_event_connect_peer(ngx_peer_conn } } + /* TODO: epoll, aio, iocp */ + + if (ngx_event_flags & NGX_HAVE_CLEAR_EVENT) { /* kqueue */ + event = NGX_CLEAR_EVENT; + + } else { /* select, poll, /dev/poll */ + event = NGX_LEVEL_EVENT; + } + + if (rc == -1) { + + /* NGX_EINPROGRESS */ + + if (ngx_add_event(wev, NGX_WRITE_EVENT, event) != NGX_OK) { + return NGX_ERROR; + } + + return NGX_AGAIN; + } + + if (ngx_add_event(rev, NGX_READ_EVENT, event) != NGX_OK) { + return NGX_ERROR; + } + return NGX_OK; } void ngx_event_connect_peer_failed(ngx_peer_connection_t *pc) { + pc->tries--; + return; }