server: read/write now goes through connection fn's

depending on whether the connection is over a socket
or pipe, the read is done differently.

pipes can return -1 when writing 0 bytes, make 0 byte
writes a successful no-op. 0 byte writes falls out
naturally of tcl server code.

Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
This commit is contained in:
Øyvind Harboe
2010-09-27 09:24:51 +02:00
parent 5a41435e45
commit cb2dba2c12
5 changed files with 35 additions and 5 deletions

View File

@@ -513,6 +513,33 @@ int server_quit(void)
return ERROR_OK;
}
int connection_write(struct connection *connection, const void *data, int len)
{
if (len == 0)
{
/* successful no-op. Sockets and pipes behave differently here... */
return 0;
}
if (connection->service->type == CONNECTION_TCP)
{
return write_socket(connection->fd_out, data, len);
} else
{
return write(connection->fd_out, data, len);
}
}
int connection_read(struct connection *connection, void *data, int len)
{
if (connection->service->type == CONNECTION_TCP)
{
return read_socket(connection->fd, data, len);
} else
{
return read(connection->fd, data, len);
}
}
/* tell the server we want to shut down */
COMMAND_HANDLER(handle_shutdown_command)
{