]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - stat.c
introduce mark_fd_nonblock()
[paraslash.git] / stat.c
diff --git a/stat.c b/stat.c
index 9b73fcd9c9ce6e2e4d8e4ef7c0319ab5906cd728..7346f097e61e9933759563d64af7e7b2dedd3eb6 100644 (file)
--- a/stat.c
+++ b/stat.c
@@ -25,6 +25,7 @@
 #include "list.h"
 #include "error.h"
 #include "string.h"
+#include "fd.h"
 
 /** the maximal number of simultaneous connections */
 #define MAX_STAT_CLIENTS 50
@@ -135,20 +136,22 @@ int stat_client_add(int fd, long unsigned mask)
        return 1;
 }
 /**
- * write a message to all connected stat clients
+ * write a message to all connected status clients
  *
  * \param msg a \p NULL terminated buffer
+ * \param itemnum The number of the status item of \a msg
+ *
+ * On write errors, remove the status client from the client list and close its
+ * file descriptor.
  */
 void stat_client_write(char *msg, int itemnum)
 {
        struct stat_client *sc, *tmp;
-//     char *buf;
        ssize_t len;
        struct timeval tv = {0 , 0};
 
        if (!initialized)
                return;
-//     buf = make_message("%s\n", msg);
        len = strlen(msg);
        list_for_each_entry_safe(sc, tmp, &client_list, node) {
                int fd = sc->fd, ret;
@@ -159,10 +162,8 @@ void stat_client_write(char *msg, int itemnum)
                FD_ZERO(&wfds);
                FD_SET(fd, &wfds);
 //             PARA_DEBUG_LOG("%s: p=%lx\n", __func__, (long)p);
-               do
-                       ret = select(fd + 1, NULL, &wfds, NULL, &tv);
-               while (ret < 0 && errno == EINTR);
-               if (ret) {
+               ret = para_select(fd + 1, NULL, &wfds, &tv);
+               if (ret > 0) {
                        ret = write(fd, msg, len);
                        PARA_DEBUG_LOG("dumped %s to fd %d, ret = %d\n", msg, fd, ret);
                        if (ret == len )
@@ -177,7 +178,6 @@ void stat_client_write(char *msg, int itemnum)
                free(sc);
                dump_stat_client_list();
        }
-//     free(buf);
        PARA_DEBUG_LOG("%d client(s)\n", num_clients);
 }