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 }