blob: 6cad0427974ef4e9ca84c8d4f2c72887f521138a [file] [log] [blame]
Igor Sysoevd90282d2004-09-28 08:34:51 +00001
2/*
Igor Sysoevff8da912004-09-29 16:00:49 +00003 * Copyright (C) Igor Sysoev
Igor Sysoevd90282d2004-09-28 08:34:51 +00004 */
5
6
Igor Sysoev6b863e32003-05-12 15:52:24 +00007#ifndef _NGX_EVENT_CONNECT_H_INCLUDED_
8#define _NGX_EVENT_CONNECT_H_INCLUDED_
9
10
11#include <ngx_config.h>
Igor Sysoev890fc962003-07-20 21:15:59 +000012#include <ngx_core.h>
Igor Sysoev6b863e32003-05-12 15:52:24 +000013#include <ngx_event.h>
Igor Sysoev6b863e32003-05-12 15:52:24 +000014
15
Igor Sysoev8b0a3d22007-07-10 21:04:37 +000016#define NGX_PEER_KEEPALIVE 1
17#define NGX_PEER_NEXT 2
18#define NGX_PEER_FAILED 4
Igor Sysoev890fc962003-07-20 21:15:59 +000019
Igor Sysoev3d2fd182006-12-04 16:46:13 +000020
21typedef struct ngx_peer_connection_s ngx_peer_connection_t;
22
23typedef ngx_int_t (*ngx_event_get_peer_pt)(ngx_peer_connection_t *pc,
24 void *data);
Igor Sysoev3d2fd182006-12-04 16:46:13 +000025typedef void (*ngx_event_free_peer_pt)(ngx_peer_connection_t *pc, void *data,
26 ngx_uint_t state);
Igor Sysoev8b0a3d22007-07-10 21:04:37 +000027#if (NGX_SSL)
28
29typedef ngx_int_t (*ngx_event_set_peer_session_pt)(ngx_peer_connection_t *pc,
30 void *data);
31typedef void (*ngx_event_save_peer_session_pt)(ngx_peer_connection_t *pc,
32 void *data);
33#endif
Igor Sysoev3d2fd182006-12-04 16:46:13 +000034
35
36struct ngx_peer_connection_s {
Igor Sysoev8b0a3d22007-07-10 21:04:37 +000037 ngx_connection_t *connection;
Igor Sysoev3d2fd182006-12-04 16:46:13 +000038
Igor Sysoev8b0a3d22007-07-10 21:04:37 +000039 struct sockaddr *sockaddr;
40 socklen_t socklen;
41 ngx_str_t *name;
Igor Sysoev3d2fd182006-12-04 16:46:13 +000042
Igor Sysoev8b0a3d22007-07-10 21:04:37 +000043 ngx_uint_t tries;
Igor Sysoev3d2fd182006-12-04 16:46:13 +000044
Igor Sysoev8b0a3d22007-07-10 21:04:37 +000045 ngx_event_get_peer_pt get;
46 ngx_event_free_peer_pt free;
47 void *data;
Igor Sysoev3d2fd182006-12-04 16:46:13 +000048
49#if (NGX_SSL)
Igor Sysoev8b0a3d22007-07-10 21:04:37 +000050 ngx_event_set_peer_session_pt set_session;
51 ngx_event_save_peer_session_pt save_session;
Igor Sysoevf1be53b2004-07-05 15:08:23 +000052#endif
Igor Sysoev5b8d3882003-07-21 16:24:25 +000053
Igor Sysoev3d2fd182006-12-04 16:46:13 +000054#if (NGX_THREADS)
Igor Sysoev8b0a3d22007-07-10 21:04:37 +000055 ngx_atomic_t *lock;
Igor Sysoev3d2fd182006-12-04 16:46:13 +000056#endif
Igor Sysoev72f2e362003-07-22 19:53:10 +000057
Igor Sysoev8b0a3d22007-07-10 21:04:37 +000058 int rcvbuf;
Igor Sysoev04410502003-08-01 14:56:33 +000059
Igor Sysoev8b0a3d22007-07-10 21:04:37 +000060 ngx_log_t *log;
Igor Sysoev3d2fd182006-12-04 16:46:13 +000061
Igor Sysoev8b0a3d22007-07-10 21:04:37 +000062 unsigned cached:1;
63
64 /* ngx_connection_log_error_e */
65 unsigned log_error:2;
Igor Sysoev3d2fd182006-12-04 16:46:13 +000066};
Igor Sysoev6b863e32003-05-12 15:52:24 +000067
68
Igor Sysoev1b735832004-11-11 14:07:14 +000069ngx_int_t ngx_event_connect_peer(ngx_peer_connection_t *pc);
Igor Sysoev3d2fd182006-12-04 16:46:13 +000070ngx_int_t ngx_event_get_peer(ngx_peer_connection_t *pc, void *data);
71
Igor Sysoev87a01ea2003-10-02 05:39:37 +000072
73
Igor Sysoev6b863e32003-05-12 15:52:24 +000074#endif /* _NGX_EVENT_CONNECT_H_INCLUDED_ */