Igor Sysoev | 6de5c2c | 2002-08-06 16:39:45 +0000 | [diff] [blame] | 1 | |
| 2 | #include <ngx_config.h> |
Igor Sysoev | 016b852 | 2002-08-29 16:59:54 +0000 | [diff] [blame] | 3 | #include <ngx_core.h> |
Igor Sysoev | 6de5c2c | 2002-08-06 16:39:45 +0000 | [diff] [blame] | 4 | #include <ngx_types.h> |
| 5 | #include <ngx_connection.h> |
Igor Sysoev | fcce8d5 | 2003-01-23 18:47:54 +0000 | [diff] [blame] | 6 | #include <ngx_event.h> |
| 7 | #include <ngx_event_timer.h> |
Igor Sysoev | 6de5c2c | 2002-08-06 16:39:45 +0000 | [diff] [blame] | 8 | #include <ngx_event_close.h> |
| 9 | |
| 10 | |
Igor Sysoev | 0ad17c0 | 2002-08-26 15:18:19 +0000 | [diff] [blame] | 11 | int ngx_event_close_connection(ngx_event_t *ev) |
Igor Sysoev | 6de5c2c | 2002-08-06 16:39:45 +0000 | [diff] [blame] | 12 | { |
| 13 | int rc; |
Igor Sysoev | 016b852 | 2002-08-29 16:59:54 +0000 | [diff] [blame] | 14 | ngx_connection_t *c = (ngx_connection_t *) ev->data; |
Igor Sysoev | 6de5c2c | 2002-08-06 16:39:45 +0000 | [diff] [blame] | 15 | |
Igor Sysoev | 42feecb | 2002-12-15 06:25:09 +0000 | [diff] [blame] | 16 | ngx_log_debug(c->log, "CLOSE: %d" _ c->fd); |
| 17 | |
Igor Sysoev | 016b852 | 2002-08-29 16:59:54 +0000 | [diff] [blame] | 18 | ngx_assert((c->fd != -1), return NGX_ERROR, c->log, |
Igor Sysoev | 6de5c2c | 2002-08-06 16:39:45 +0000 | [diff] [blame] | 19 | "ngx_event_close: already closed"); |
| 20 | |
Igor Sysoev | 016b852 | 2002-08-29 16:59:54 +0000 | [diff] [blame] | 21 | ngx_destroy_pool(c->pool); |
| 22 | |
Igor Sysoev | 0d2bda5 | 2002-12-24 07:09:57 +0000 | [diff] [blame] | 23 | ngx_del_timer(c->read); |
| 24 | ngx_del_timer(c->write); |
| 25 | |
Igor Sysoev | 42feecb | 2002-12-15 06:25:09 +0000 | [diff] [blame] | 26 | ngx_del_event(c->read, NGX_READ_EVENT, NGX_CLOSE_EVENT); |
| 27 | ngx_del_event(c->write, NGX_WRITE_EVENT, NGX_CLOSE_EVENT); |
| 28 | |
Igor Sysoev | 016b852 | 2002-08-29 16:59:54 +0000 | [diff] [blame] | 29 | if ((rc = ngx_close_socket(c->fd)) == -1) |
Igor Sysoev | 7300977 | 2003-02-06 17:21:13 +0000 | [diff] [blame^] | 30 | ngx_log_error(NGX_LOG_ALERT, c->log, ngx_socket_errno, |
Igor Sysoev | 6de5c2c | 2002-08-06 16:39:45 +0000 | [diff] [blame] | 31 | "ngx_event_close: close failed"); |
| 32 | |
Igor Sysoev | 016b852 | 2002-08-29 16:59:54 +0000 | [diff] [blame] | 33 | c->fd = -1; |
Igor Sysoev | 6de5c2c | 2002-08-06 16:39:45 +0000 | [diff] [blame] | 34 | |
| 35 | return rc; |
| 36 | } |