diff options
| author | Anton <anton@picapica> | 2016-10-21 16:35:50 +0400 |
|---|---|---|
| committer | Anton <anton@picapica> | 2016-10-21 16:35:50 +0400 |
| commit | abbfa4ccdcfc8633e5b30064f66af40b6b17cbd6 (patch) | |
| tree | 8ea8a2b02c4c6f9b3145aef19750e382b183e0f3 /PICA_client.c | |
| parent | 9164d6c7266f2ea66459d1971128ca6071e6a4a2 (diff) | |
| download | pica-pica-abbfa4ccdcfc8633e5b30064f66af40b6b17cbd6.tar.gz pica-pica-abbfa4ccdcfc8633e5b30064f66af40b6b17cbd6.zip | |
implemented closing listener connections
Diffstat (limited to 'PICA_client.c')
| -rw-r--r-- | PICA_client.c | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/PICA_client.c b/PICA_client.c index 4f218c3..85469c9 100644 --- a/PICA_client.c +++ b/PICA_client.c @@ -1972,11 +1972,18 @@ static int process_listener(struct PICA_listener *lst, fd_set *rfds, fd_set *wfd while(conn) { + struct PICA_listener_conn *kill_ptr = NULL; + if (process_listener_conn(conn, rfds, wfds) != PICA_OK) { - --- close listener conn + kill_ptr = conn; } conn = conn->next; + + if (kill_ptr) + { + listener_close_conn(kill_ptr); + } } return PICA_OK; @@ -2738,13 +2745,29 @@ void PICA_close_acc(struct PICA_acc *a) free(a); } +void listener_close_conn(struct PICA_listener_conn *c) +{ + SSL_free(c->ssl); + SHUTDOWN(c->sck); + CLOSE(c->sck); + + X509_free(c->peer_cert); + free(c); +} + void PICA_close_listener(struct PICA_listener *l) { CLOSE(l->sck_listener); free(l->public_addr_dns); - free(l); - -- close accepted connections + while(l->accepted_connections) + { + struct PICA_listener_conn *c = l->accepted_connections; + l->accepted_connections = c->next; + listener_close_conn(c); + } + + free(l); } #ifdef WIN32 |
