log the IP address of the connecting client.
[paraslash.git] / dccp_send.c
index 08b3069fcdbc0f554a5e0ca655930ddd109ab360..57e2a70ccb30b0cef8550fd288991ef005d30b1e 100644 (file)
@@ -64,14 +64,13 @@ static void dccp_post_select(__unused struct audio_format *af, fd_set *rfds,
 
        if (!FD_ISSET(listen_fd, rfds))
                return;
-       PARA_NOTICE_LOG("%s", "accepting...\n");
        dc = para_calloc(sizeof(struct dccp_client));
        ret = para_accept(listen_fd, &dc->addr, sizeof(struct sockaddr_in));
        if (ret < 0) {
                PARA_ERROR_LOG("%s", PARA_STRERROR(-ret));
                return;
        }
-       PARA_NOTICE_LOG("%s", "connection\n");
+       PARA_NOTICE_LOG("connection from %s\n", inet_ntoa(dc->addr.sin_addr));
        dc->fd = ret;
        list_add(&dc->node, &clients);
 }
@@ -122,7 +121,12 @@ static void dccp_send(__unused struct audio_format *af,
                return;
 
        list_for_each_entry_safe(dc, tmp, &clients, node) {
-               if (!_write_ok(dc->fd))
+               ret = write_ok(dc->fd);
+               if (ret < 0) {
+                       dccp_shutdown_client(dc);
+                       continue;
+               }
+               if (!ret)
                        continue;
                if (!dc->header_sent && af->get_header_info && current_chunk) {
                        header_buf = af->get_header_info(&header_len);
@@ -130,13 +134,22 @@ static void dccp_send(__unused struct audio_format *af,
                                continue; /* header not yet available */
                        ret = write(dc->fd, header_buf, header_len);
                        if (ret != header_len) {
+                               int err = errno;
+                               PARA_ERROR_LOG("header write: %d/%d (%s)\n",
+                                       ret, header_len, ret < 0?
+                                       strerror(err) : "");
+                               dccp_shutdown_client(dc);
+                               continue;
+                       }
+                       ret = write_ok(dc->fd);
+                       if (ret < 0) {
                                dccp_shutdown_client(dc);
                                continue;
                        }
-                       if (!_write_ok(dc->fd))
+                       if (!ret)
                                continue;
                }
-               PARA_DEBUG_LOG("writing %d bytes to fd %d\n", len, dc->fd);
+//             PARA_DEBUG_LOG("writing %d bytes to fd %d\n", len, dc->fd);
                ret = write(dc->fd, buf, len);
                if (ret != len)
                        dccp_shutdown_client(dc);
@@ -160,7 +173,7 @@ static char *dccp_info(void)
        free(buf);
        list_for_each_entry_safe(dc, tmp, &clients, node)
                num_clients++;
-       buf = make_message("%d connected clients\n", num_clients);
+       buf = make_message("dccp connected clients: %d\n", num_clients);
        return buf;
 }