From b95b2b8c5bcb40fdd73ac31ba2441534eaa40c9a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andreas=20=C3=96man?= <andreas@lonelycoder.com>
Date: Sat, 17 May 2008 07:31:08 +0000
Subject: [PATCH] Add support for destroying a TCP client

---
 tcp.c | 16 ++++++++++++++++
 tcp.h |  2 ++
 2 files changed, 18 insertions(+)

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_ */