X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Funixsock.c;h=0b897482c9d956547d74be3f905f9d9941b157be;hb=6c134837a38a566a6ad78225ef5e5c3cc9b7d832;hp=be36abc8c8f9bbb339c6557b701e41f4c62a61cd;hpb=79c87aeda9172e219a842e393c6499c8bf37662a;p=collectd.git diff --git a/src/unixsock.c b/src/unixsock.c index be36abc8..0b897482 100644 --- a/src/unixsock.c +++ b/src/unixsock.c @@ -158,32 +158,45 @@ static int us_open_socket (void) static void *us_handle_client (void *arg) { - int fd; + int fdin; + int fdout; FILE *fhin, *fhout; - fd = *((int *) arg); + fdin = *((int *) arg); free (arg); arg = NULL; - DEBUG ("unixsock plugin: us_handle_client: Reading from fd #%i", fd); + DEBUG ("unixsock plugin: us_handle_client: Reading from fd #%i", fdin); - fhin = fdopen (fd, "r"); + fdout = dup (fdin); + if (fdout < 0) + { + char errbuf[1024]; + ERROR ("unixsock plugin: dup failed: %s", + sstrerror (errno, errbuf, sizeof (errbuf))); + close (fdin); + pthread_exit ((void *) 1); + } + + fhin = fdopen (fdin, "r"); if (fhin == NULL) { char errbuf[1024]; ERROR ("unixsock plugin: fdopen failed: %s", sstrerror (errno, errbuf, sizeof (errbuf))); - close (fd); + close (fdin); + close (fdout); pthread_exit ((void *) 1); } - fhout = fdopen (fd, "w"); + fhout = fdopen (fdout, "w"); if (fhout == NULL) { char errbuf[1024]; ERROR ("unixsock plugin: fdopen failed: %s", sstrerror (errno, errbuf, sizeof (errbuf))); - fclose (fhin); /* this closes fd as well */ + fclose (fhin); /* this closes fdin as well */ + close (fdout); pthread_exit ((void *) 1); } @@ -231,11 +244,12 @@ static void *us_handle_client (void *arg) fields_num = strsplit (buffer_copy, fields, sizeof (fields) / sizeof (fields[0])); - if (fields_num < 1) { - close (fd); - break; + fprintf (fhout, "-1 Internal error\n"); + fclose (fhin); + fclose (fhout); + pthread_exit ((void *) 1); } if (strcasecmp (fields[0], "getval") == 0)