mirror of
https://github.com/tmate-io/tmate.git
synced 2025-08-15 08:12:46 +02:00
Push stdout and stderr to clients more aggressively, and add an event to
continue if the send fails.
This commit is contained in:
44
server-fn.c
44
server-fn.c
@ -450,50 +450,6 @@ server_callback_identify(unused int fd, unused short events, void *data)
|
||||
server_clear_identify(c);
|
||||
}
|
||||
|
||||
/* Push stdout to client if possible. */
|
||||
void
|
||||
server_push_stdout(struct client *c)
|
||||
{
|
||||
struct msg_stdout_data data;
|
||||
size_t size;
|
||||
|
||||
size = EVBUFFER_LENGTH(c->stdout_data);
|
||||
if (size == 0)
|
||||
return;
|
||||
if (size > sizeof data.data)
|
||||
size = sizeof data.data;
|
||||
|
||||
memcpy(data.data, EVBUFFER_DATA(c->stdout_data), size);
|
||||
data.size = size;
|
||||
|
||||
if (proc_send(c->peer, MSG_STDOUT, -1, &data, sizeof data) == 0)
|
||||
evbuffer_drain(c->stdout_data, size);
|
||||
}
|
||||
|
||||
/* Push stderr to client if possible. */
|
||||
void
|
||||
server_push_stderr(struct client *c)
|
||||
{
|
||||
struct msg_stderr_data data;
|
||||
size_t size;
|
||||
|
||||
if (c->stderr_data == c->stdout_data) {
|
||||
server_push_stdout(c);
|
||||
return;
|
||||
}
|
||||
size = EVBUFFER_LENGTH(c->stderr_data);
|
||||
if (size == 0)
|
||||
return;
|
||||
if (size > sizeof data.data)
|
||||
size = sizeof data.data;
|
||||
|
||||
memcpy(data.data, EVBUFFER_DATA(c->stderr_data), size);
|
||||
data.size = size;
|
||||
|
||||
if (proc_send(c->peer, MSG_STDERR, -1, &data, sizeof data) == 0)
|
||||
evbuffer_drain(c->stderr_data, size);
|
||||
}
|
||||
|
||||
/* Set stdin callback. */
|
||||
int
|
||||
server_set_stdin_callback(struct client *c, void (*cb)(struct client *, int,
|
||||
|
Reference in New Issue
Block a user