aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2003-07-23 13:10:12 +0000
committerIgor Sysoev <igor@sysoev.ru>2003-07-23 13:10:12 +0000
commit3a081188dc70608b9970eca5ad28c134e4f60f0b (patch)
treee077511d81d0c922e0582f69f24676d3c664e72f /src
parent72f2e367705393703e1159c2db6435e90b593a26 (diff)
downloadnginx-3a081188dc70608b9970eca5ad28c134e4f60f0b.tar.gz
nginx-3a081188dc70608b9970eca5ad28c134e4f60f0b.zip
nginx-0.0.1-2003-07-23-17:10:12 import
Diffstat (limited to 'src')
-rw-r--r--src/event/ngx_event_connect.c60
1 files changed, 36 insertions, 24 deletions
diff --git a/src/event/ngx_event_connect.c b/src/event/ngx_event_connect.c
index 70e864b78..be47c0adb 100644
--- a/src/event/ngx_event_connect.c
+++ b/src/event/ngx_event_connect.c
@@ -1,11 +1,17 @@
#include <ngx_event_connect.h>
+/* AF_INET only */
int ngx_event_connect_peer(ngx_peer_connecttion_t *pc)
{
- time_t now;
- ngx_socket_t s;
+ time_t now;
+ ngx_peer_r *peer;
+ ngx_socket_t s;
+ struct sockaddr_in *addr;
+
+
+ now = ngx_time();
/* ngx_lock_mutex(pc->peers->mutex); */
@@ -22,12 +28,8 @@ int ngx_event_connect_peer(ngx_peer_connecttion_t *pc)
return NGX_OK;
}
- /* ngx_unlock_mutex(pc->peers->mutex); */
-
pc->cached = 0;
- now = ngx_time();
-
if (pc->peers->number > 1) {
/* there are several peers */
@@ -36,24 +38,11 @@ int ngx_event_connect_peer(ngx_peer_connecttion_t *pc)
/* it's a first try - get a current peer */
- /* Here is the race condition when the peers are shared between
- the threads or the processes but it should not be serious */
-
pc->cur_peer = pc->peers->current++;
if (cp->peers->current >= cp->peers->number) {
pc->peers->current = 0;
}
-
- /* the end of the race condition */
-
-#if (NGX_MULTITHREADED || NGX_MULTIPROCESSED)
- /* eliminate the sequences of the race condition */
-
- if (pc->cur_peer >= pc->peers->number) {
- pc->cur_peer = 0;
- }
-#endif
}
if (pc->peers->max_fails > 0) {
@@ -63,17 +52,12 @@ int ngx_event_connect_peer(ngx_peer_connecttion_t *pc)
for ( ;; ) {
peer = &pc->peers->peers[pc->cur_peer];
- /* Here is the race condition when the peers are shared between
- the threads or the processes but it should not be serious */
-
if (peer->fails <= pc->peers->max_fails
|| (now - peer->accessed > pc->peers->fail_timeout))
{
break;
}
- /* the end of the race condition */
-
pc->cur_peer++;
if (pc->cur_peer >= pc->peers->number) {
@@ -83,12 +67,15 @@ int ngx_event_connect_peer(ngx_peer_connecttion_t *pc)
pc->tries--;
if (pc->tries == 0) {
+ /* ngx_unlock_mutex(pc->peers->mutex); */
return NGX_ERROR;
}
}
}
}
+ /* ngx_unlock_mutex(pc->peers->mutex); */
+
pc->addr_port_text = peer->addr_port_text;
s = ngx_socket(AF_INET, SOCK_STREAM, IPPROTO_IP, 0);
@@ -175,4 +162,29 @@ int ngx_event_connect_peer(ngx_peer_connecttion_t *pc)
}
}
+ addr = p->sockaddr;
+
+ addr->sin_family = AF_INET;
+ addr->sin_addr.s_addr = peer->addr;
+ addr->sin_port = htons(peer->port);
+
+ rc = connect(s, p->sockaddr, sizeof(struct sockaddr_in));
+
+ if (rc == -1) {
+ err = ngx_socket_errno;
+ if (err != NGX_EINPROGRESS) {
+ ngx_log_error(NGX_LOG_CRIT, pc->log, err, "connect() failed");
+
+ if (ngx_close_socket(s) == -1) {
+ ngx_log_error(NGX_LOG_ALERT, pc->log, ngx_socket_errno,
+ ngx_close_socket_n " failed");
+ }
+
+ return NGX_CONNECT_ERROR;
+ }
+ }
+
+ c->data = ???;
+
+
}