annotate src/event/ngx_event_connect.h @ 6635:6acaa638fa07

Events: support for EPOLLEXCLUSIVE. This flag appeared in Linux 4.5 and is useful for avoiding thundering herd problem. The current Linux kernel implementation walks the list of exclusive waiters, and queues an event to each epfd, until it finds the first waiter that has threads blocked on it via epoll_wait().
author Valentin Bartenev <vbart@nginx.com>
date Fri, 15 Jul 2016 15:18:57 +0300
parents 1d0e03db9f8e
children e8d4c9e9682a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
441
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 419
diff changeset
1
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 419
diff changeset
2 /*
444
42d11f017717 nginx-0.1.0-2004-09-29-20:00:49 import; remove years from copyright
Igor Sysoev <igor@sysoev.ru>
parents: 441
diff changeset
3 * Copyright (C) Igor Sysoev
4412
d620f497c50f Copyright updated.
Maxim Konovalov <maxim@nginx.com>
parents: 3271
diff changeset
4 * Copyright (C) Nginx, Inc.
441
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 419
diff changeset
5 */
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 419
diff changeset
6
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 419
diff changeset
7
86
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
8 #ifndef _NGX_EVENT_CONNECT_H_INCLUDED_
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
9 #define _NGX_EVENT_CONNECT_H_INCLUDED_
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
10
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
11
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
12 #include <ngx_config.h>
119
cd54bcbaf3b5 nginx-0.0.1-2003-07-21-01:15:59 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
13 #include <ngx_core.h>
86
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
14 #include <ngx_event.h>
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
15
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
16
1284
be2b895d31e0 fix segfault when session was freed twice
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
17 #define NGX_PEER_KEEPALIVE 1
be2b895d31e0 fix segfault when session was freed twice
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
18 #define NGX_PEER_NEXT 2
be2b895d31e0 fix segfault when session was freed twice
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
19 #define NGX_PEER_FAILED 4
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
20
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
21
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
22 typedef struct ngx_peer_connection_s ngx_peer_connection_t;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
23
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
24 typedef ngx_int_t (*ngx_event_get_peer_pt)(ngx_peer_connection_t *pc,
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
25 void *data);
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
26 typedef void (*ngx_event_free_peer_pt)(ngx_peer_connection_t *pc, void *data,
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
27 ngx_uint_t state);
1284
be2b895d31e0 fix segfault when session was freed twice
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
28 #if (NGX_SSL)
be2b895d31e0 fix segfault when session was freed twice
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
29
be2b895d31e0 fix segfault when session was freed twice
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
30 typedef ngx_int_t (*ngx_event_set_peer_session_pt)(ngx_peer_connection_t *pc,
be2b895d31e0 fix segfault when session was freed twice
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
31 void *data);
be2b895d31e0 fix segfault when session was freed twice
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
32 typedef void (*ngx_event_save_peer_session_pt)(ngx_peer_connection_t *pc,
be2b895d31e0 fix segfault when session was freed twice
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
33 void *data);
be2b895d31e0 fix segfault when session was freed twice
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
34 #endif
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
35
119
cd54bcbaf3b5 nginx-0.0.1-2003-07-21-01:15:59 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
36
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
37 struct ngx_peer_connection_s {
1284
be2b895d31e0 fix segfault when session was freed twice
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
38 ngx_connection_t *connection;
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
39
1284
be2b895d31e0 fix segfault when session was freed twice
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
40 struct sockaddr *sockaddr;
be2b895d31e0 fix segfault when session was freed twice
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
41 socklen_t socklen;
be2b895d31e0 fix segfault when session was freed twice
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
42 ngx_str_t *name;
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
43
1284
be2b895d31e0 fix segfault when session was freed twice
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
44 ngx_uint_t tries;
5832
d09b689911ac Upstream: limited next_upstream time and tries (ticket #544).
Roman Arutyunyan <arut@nginx.com>
parents: 4412
diff changeset
45 ngx_msec_t start_time;
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
46
1284
be2b895d31e0 fix segfault when session was freed twice
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
47 ngx_event_get_peer_pt get;
be2b895d31e0 fix segfault when session was freed twice
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
48 ngx_event_free_peer_pt free;
be2b895d31e0 fix segfault when session was freed twice
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
49 void *data;
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
50
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
51 #if (NGX_SSL)
1284
be2b895d31e0 fix segfault when session was freed twice
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
52 ngx_event_set_peer_session_pt set_session;
be2b895d31e0 fix segfault when session was freed twice
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
53 ngx_event_save_peer_session_pt save_session;
377
41437e4fd9b4 nginx-0.0.7-2004-07-05-19:08:23 import
Igor Sysoev <igor@sysoev.ru>
parents: 288
diff changeset
54 #endif
120
b776ad95d96d nginx-0.0.1-2003-07-21-20:24:25 import
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
55
3271
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 3264
diff changeset
56 ngx_addr_t *local;
fcd98af88df3 proxy_bind, fastcgi_bind, and memcached_bind
Igor Sysoev <igor@sysoev.ru>
parents: 3264
diff changeset
57
6436
8f038068f4bc Stream: UDP proxy.
Roman Arutyunyan <arut@nginx.com>
parents: 6031
diff changeset
58 int type;
1284
be2b895d31e0 fix segfault when session was freed twice
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
59 int rcvbuf;
be2b895d31e0 fix segfault when session was freed twice
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
60
be2b895d31e0 fix segfault when session was freed twice
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
61 ngx_log_t *log;
124
842a78cebbb7 nginx-0.0.1-2003-08-01-18:56:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 121
diff changeset
62
1284
be2b895d31e0 fix segfault when session was freed twice
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
63 unsigned cached:1;
6530
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
64 #if (NGX_HAVE_TRANSPARENT_PROXY)
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
65 unsigned transparent:1;
1d0e03db9f8e Upstream: the "transparent" parameter of proxy_bind and friends.
Roman Arutyunyan <arut@nginx.com>
parents: 6436
diff changeset
66 #endif
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
67
1284
be2b895d31e0 fix segfault when session was freed twice
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
68 /* ngx_connection_log_error_e */
be2b895d31e0 fix segfault when session was freed twice
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
69 unsigned log_error:2;
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
70 };
86
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
71
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
72
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
73 ngx_int_t ngx_event_connect_peer(ngx_peer_connection_t *pc);
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
74 ngx_int_t ngx_event_get_peer(ngx_peer_connection_t *pc, void *data);
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 651
diff changeset
75
136
da00cde00e8a nginx-0.0.1-2003-10-02-09:39:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 124
diff changeset
76
86
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
77 #endif /* _NGX_EVENT_CONNECT_H_INCLUDED_ */