diff --git a/tcp.c b/tcp.c index c77c808c..4cf0b9d0 100644 --- a/tcp.c +++ b/tcp.c @@ -372,6 +372,7 @@ tcp_disconnect(tcp_session_t *ses, int err) ses->tcp_name, ses->tcp_peer_txt, strerror(err)); close(dispatch_delfd(ses->tcp_dispatch_handle)); + ses->tcp_dispatch_handle = NULL; if(ses->tcp_server != NULL) { free(ses->tcp_name); @@ -681,3 +682,18 @@ tcp_create_server(int port, size_t session_size, const char *name, s->tcp_server_name = strdup(name); } + +/** + * + */ +void +tcp_destroy_client(tcp_session_t *ses) +{ + if(ses->tcp_dispatch_handle != NULL) + tcp_disconnect(ses, 0); + + dtimer_disarm(&ses->tcp_timer); + free(ses->tcp_name); + free(ses->tcp_hostname); + free(ses); +} diff --git a/tcp.h b/tcp.h index ab175e4c..ef95a8f4 100644 --- a/tcp.h +++ b/tcp.h @@ -115,4 +115,6 @@ void tcp_output_queue(tcp_session_t *ses, tcp_queue_t *dst, tcp_queue_t *src); void *tcp_create_client(const char *hostname, int port, size_t session_size, const char *name, tcp_callback_t *cb); +void tcp_destroy_client(tcp_session_t *ses); + #endif /* TCP_H_ */