vendor/nginx/src/event/ngx_event_connect.c in nginxtra-1.8.1.12 vs vendor/nginx/src/event/ngx_event_connect.c in nginxtra-1.10.1.12
- old
+ new
@@ -12,11 +12,11 @@
ngx_int_t
ngx_event_connect_peer(ngx_peer_connection_t *pc)
{
- int rc;
+ int rc, type;
ngx_int_t event;
ngx_err_t err;
ngx_uint_t level;
ngx_socket_t s;
ngx_event_t *rev, *wev;
@@ -25,14 +25,17 @@
rc = pc->get(pc, pc->data);
if (rc != NGX_OK) {
return rc;
}
- s = ngx_socket(pc->sockaddr->sa_family, SOCK_STREAM, 0);
+ type = (pc->type ? pc->type : SOCK_STREAM);
- ngx_log_debug1(NGX_LOG_DEBUG_EVENT, pc->log, 0, "socket %d", s);
+ s = ngx_socket(pc->sockaddr->sa_family, type, 0);
+ ngx_log_debug2(NGX_LOG_DEBUG_EVENT, pc->log, 0, "%s socket %d",
+ (type == SOCK_STREAM) ? "stream" : "dgram", s);
+
if (s == (ngx_socket_t) -1) {
ngx_log_error(NGX_LOG_ALERT, pc->log, ngx_socket_errno,
ngx_socket_n " failed");
return NGX_ERROR;
}
@@ -47,10 +50,12 @@
}
return NGX_ERROR;
}
+ c->type = type;
+
if (pc->rcvbuf) {
if (setsockopt(s, SOL_SOCKET, SO_RCVBUF,
(const void *) &pc->rcvbuf, sizeof(int)) == -1)
{
ngx_log_error(NGX_LOG_ALERT, pc->log, ngx_socket_errno,
@@ -73,29 +78,35 @@
goto failed;
}
}
- c->recv = ngx_recv;
- c->send = ngx_send;
- c->recv_chain = ngx_recv_chain;
- c->send_chain = ngx_send_chain;
+ if (type == SOCK_STREAM) {
+ c->recv = ngx_recv;
+ c->send = ngx_send;
+ c->recv_chain = ngx_recv_chain;
+ c->send_chain = ngx_send_chain;
- c->sendfile = 1;
+ c->sendfile = 1;
- c->log_error = pc->log_error;
+ if (pc->sockaddr->sa_family == AF_UNIX) {
+ c->tcp_nopush = NGX_TCP_NOPUSH_DISABLED;
+ c->tcp_nodelay = NGX_TCP_NODELAY_DISABLED;
- if (pc->sockaddr->sa_family == AF_UNIX) {
- c->tcp_nopush = NGX_TCP_NOPUSH_DISABLED;
- c->tcp_nodelay = NGX_TCP_NODELAY_DISABLED;
-
#if (NGX_SOLARIS)
- /* Solaris's sendfilev() supports AF_NCA, AF_INET, and AF_INET6 */
- c->sendfile = 0;
+ /* Solaris's sendfilev() supports AF_NCA, AF_INET, and AF_INET6 */
+ c->sendfile = 0;
#endif
+ }
+
+ } else { /* type == SOCK_DGRAM */
+ c->recv = ngx_udp_recv;
+ c->send = ngx_send;
}
+ c->log_error = pc->log_error;
+
rev = c->read;
wev = c->write;
rev->log = pc->log;
wev->log = pc->log;
@@ -169,15 +180,13 @@
wev->ready = 1;
return NGX_OK;
}
- if (ngx_event_flags & NGX_USE_AIO_EVENT) {
+ if (ngx_event_flags & NGX_USE_IOCP_EVENT) {
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, pc->log, ngx_socket_errno,
"connect(): %d", rc);
-
- /* aio, iocp */
if (ngx_blocking(s) == -1) {
ngx_log_error(NGX_LOG_ALERT, pc->log, ngx_socket_errno,
ngx_blocking_n " failed");
goto failed;