aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIOhannes m zmölnig <zmoelnig@users.sourceforge.net>2010-04-01 07:21:47 +0000
committerIOhannes m zmölnig <zmoelnig@users.sourceforge.net>2010-04-01 07:21:47 +0000
commit969d9523ffe3283fce547597835584f707c2043a (patch)
tree6eae46b5bdb60eb3afcf0ad33cea9950e2e05126
parent6a72fbae62a30d52915d055e06c1987d0041fbaa (diff)
iemnet__sender_destroy() now also closes the socket
svn path=/trunk/externals/iem/iemnet/; revision=13332
-rw-r--r--iemnet_sender.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/iemnet_sender.c b/iemnet_sender.c
index 0d6701c..a45ae10 100644
--- a/iemnet_sender.c
+++ b/iemnet_sender.c
@@ -95,6 +95,7 @@ int iemnet__sender_send(t_iemnet_sender*s, t_iemnet_chunk*c) {
}
void iemnet__sender_destroy(t_iemnet_sender*s) {
+ int sockfd=s->sockfd;
/* simple protection against recursive calls:
* s->keepsending is only set to "0" in here,
* so if it is false, we know that we are already being called
@@ -106,6 +107,11 @@ void iemnet__sender_destroy(t_iemnet_sender*s) {
queue_finish(s->queue);
DEBUG("queue finished");
s->sockfd = -1;
+
+ if(sockfd>=0) {
+ shutdown(sockfd, 2); /* needed on linux, since the recv won't shutdown on sys_closesocket() alone */
+ sys_closesocket(sockfd);
+ }
pthread_join(s->thread, NULL);
DEBUG("thread joined");
queue_destroy(s->queue);