summaryrefslogtreecommitdiff
path: root/src/clients.c
diff options
context:
space:
mode:
authorChristian Pointner <equinox@spreadspace.org>2010-11-30 00:18:18 +0000
committerChristian Pointner <equinox@spreadspace.org>2010-11-30 00:18:18 +0000
commitcbd494dcb3c512940f77358263938cbf1883bd00 (patch)
tree10c4fb47fd504067c5040dafcada6b572851de0e /src/clients.c
parentadded new option to manpage (diff)
only recv if buffer is not full
git-svn-id: https://svn.spreadspace.org/tcpproxy/trunk@17 e61f0598-a718-4e21-a8f0-0aadfa62ad6b
Diffstat (limited to 'src/clients.c')
-rw-r--r--src/clients.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/clients.c b/src/clients.c
index 7179961..2433e62 100644
--- a/src/clients.c
+++ b/src/clients.c
@@ -161,10 +161,14 @@ void clients_read_fds(clients_t* list, fd_set* set, int* max_fd)
while(tmp) {
client_t* c = (client_t*)tmp->data_;
if(c) {
- FD_SET(c->fd_[0], set);
- FD_SET(c->fd_[1], set);
- *max_fd = *max_fd > c->fd_[0] ? *max_fd : c->fd_[0];
- *max_fd = *max_fd > c->fd_[1] ? *max_fd : c->fd_[1];
+ if(c->write_buf_len_[1] < BUFFER_LENGTH) {
+ FD_SET(c->fd_[0], set);
+ *max_fd = *max_fd > c->fd_[0] ? *max_fd : c->fd_[0];
+ }
+ if(c->write_buf_len_[0] < BUFFER_LENGTH) {
+ FD_SET(c->fd_[1], set);
+ *max_fd = *max_fd > c->fd_[1] ? *max_fd : c->fd_[1];
+ }
}
tmp = tmp->next_;
}
@@ -213,7 +217,6 @@ int clients_read(clients_t* list, fd_set* set)
}
else continue;
- // TODO: what when buffer is full?
int len = recv(c->fd_[in], &(c->write_buf_[out][c->write_buf_len_[out]]), BUFFER_LENGTH - c->write_buf_len_[out], 0);
if(len < 0) {
log_printf(INFO, "Error on recv(): %s, removing client %d", strerror(errno), c->fd_[0]);