static int io_multiplexing_out;
static int io_multiplexing_in;
+static int multiplex_in_fd;
+static int multiplex_out_fd;
static time_t last_io;
extern int verbose;
int tag, ret=0;
char line[1024];
- if (!io_multiplexing_in) return read(fd, buf, len);
+ if (!io_multiplexing_in || fd != multiplex_in_fd)
+ return read(fd, buf, len);
while (ret == 0) {
if (remaining) {
read_loop(fd, ibuf, 4);
tag = IVAL(ibuf, 0);
+
remaining = tag & 0xFFFFFF;
tag = tag >> 24;
static char *io_buffer;
static int io_buffer_count;
-static int io_out_fd;
void io_start_buffering(int fd)
{
if (io_buffer) return;
- io_out_fd = fd;
+ multiplex_out_fd = fd;
io_buffer = (char *)malloc(IO_BUFFER_SIZE+4);
if (!io_buffer) out_of_memory("writefd");
io_buffer_count = 0;
void io_flush(void)
{
- int fd = io_out_fd;
+ int fd = multiplex_out_fd;
if (!io_buffer_count) return;
if (io_multiplexing_out) {
/* setup for multiplexing an error stream with the data stream */
void io_start_multiplex_out(int fd)
{
+ multiplex_out_fd = fd;
+ io_flush();
io_start_buffering(fd);
io_multiplexing_out = 1;
}
/* setup for multiplexing an error stream with the data stream */
void io_start_multiplex_in(int fd)
{
+ multiplex_in_fd = fd;
+ io_flush();
if (read_buffer_len) {
fprintf(stderr,"ERROR: data in read buffer at mplx start\n");
exit_cleanup(1);
SIVAL(io_buffer-4, 0, ((MPLEX_BASE + f)<<24) + len);
memcpy(io_buffer, buf, len);
- writefd_unbuffered(io_out_fd, io_buffer-4, len+4);
+ writefd_unbuffered(multiplex_out_fd, io_buffer-4, len+4);
return 1;
}