X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=send_common.c;h=cf1cd37b7863ec438af70e246ca41538d4638408;hb=72d73eb53316768a5a3527cf56afad7158d9ef4d;hp=92c9ab3b982aceed323f47c1c760493ab5a4f5b8;hpb=e8089cd5efad59a5eec689117acf563a38b8c6c7;p=paraslash.git diff --git a/send_common.c b/send_common.c index 92c9ab3b..cf1cd37b 100644 --- a/send_common.c +++ b/send_common.c @@ -110,20 +110,19 @@ static int queue_chunk_or_shutdown(struct sender_client *sc, * * \param fd The file descriptor. * \param cq The list of queued chunks. - * \param max_bytes_per_write Do not send more than this in one go. * * \return Negative on errors, zero if not everything was sent, one otherwise. */ -int send_queued_chunks(int fd, struct chunk_queue *cq, - size_t max_bytes_per_write) +int send_queued_chunks(int fd, struct chunk_queue *cq) { struct queued_chunk *qc; while ((qc = cq_peek(cq))) { const char *buf; size_t len; int ret; + cq_get(qc, &buf, &len); - ret = write_nonblock(fd, buf, len, max_bytes_per_write); + ret = write_nonblock(fd, buf, len); if (ret < 0) return ret; cq_update(cq, ret); @@ -139,7 +138,6 @@ int send_queued_chunks(int fd, struct chunk_queue *cq, * * \param sc The client. * \param ss The sender. - * \param max_bytes_per_write Split writes to chunks of at most that many bytes. * \param current_chunk The number of the chunk to write. * \param buf The data to write. * \param len The number of bytes of \a buf. @@ -150,9 +148,8 @@ int send_queued_chunks(int fd, struct chunk_queue *cq, * written, the remainder is put into the chunk queue for that client. */ void send_chunk(struct sender_client *sc, struct sender_status *ss, - size_t max_bytes_per_write, long unsigned current_chunk, - const char *buf, size_t len, const char *header_buf, - size_t header_len) + long unsigned current_chunk, const char *buf, size_t len, + const char *header_buf, size_t header_len) { int ret; @@ -164,7 +161,7 @@ void send_chunk(struct sender_client *sc, struct sender_status *ss, } } sc->header_sent = 1; - ret = send_queued_chunks(sc->fd, sc->cq, max_bytes_per_write); + ret = send_queued_chunks(sc->fd, sc->cq); if (ret < 0) { shutdown_client(sc, ss); goto out; @@ -175,7 +172,7 @@ void send_chunk(struct sender_client *sc, struct sender_status *ss, ret = queue_chunk_or_shutdown(sc, ss, buf, len); goto out; } - ret = write_nonblock(sc->fd, buf, len, max_bytes_per_write); + ret = write_nonblock(sc->fd, buf, len); if (ret < 0) { shutdown_client(sc, ss); goto out; @@ -348,15 +345,18 @@ void generic_com_off(struct sender_status *ss) * \sa \ref para_accept(), \ref mark_fd_nonblocking(), \ref acl_check_access(), * \ref cq_new(), \ref add_close_on_fork_list(). */ -struct sender_client *accept_sender_client(struct sender_status *ss) +struct sender_client *accept_sender_client(struct sender_status *ss, fd_set *rfds) { struct sender_client *sc; - int fd, ret = para_accept(ss->listen_fd, NULL, 0); - if (ret < 0) { + int fd, ret; + + if (ss->listen_fd < 0) + return NULL; + ret = para_accept(ss->listen_fd, rfds, NULL, 0, &fd); + if (ret < 0) PARA_ERROR_LOG("%s\n", para_strerror(-ret)); + if (ret <= 0) return NULL; - } - fd = ret; ret = -E_MAX_CLIENTS; if (ss->max_clients > 0 && ss->num_clients >= ss->max_clients) goto err_out; @@ -477,7 +477,7 @@ int parse_fec_url(const char *arg, struct sender_command_data *scd) goto out; } /* use default fec parameters. */ - scd->max_slice_bytes = 1490; + scd->max_slice_bytes = 0; scd->slices_per_group = 16; scd->data_slices_per_group = 14; ret = 0;