diff options
author | Øyvind Harboe <oyvind.harboe@zylin.com> | 2010-09-27 08:26:31 +0200 |
---|---|---|
committer | Øyvind Harboe <oyvind.harboe@zylin.com> | 2010-10-01 10:21:33 +0200 |
commit | 5a41435e45ae18c0823780382c214fb7324dbe7d (patch) | |
tree | cc9aa3f6c884328dcb4fbc969a7ba45b09ed8282 /src/server/server.c | |
parent | a60a57d8ed1cb28de1eca0e2d6d78d70bd873663 (diff) |
server: split file descriptors in in/out fd's
pipes have different fd's for in/out. This makes the
code more orthogonal and prepares for adding pipes.
Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
Diffstat (limited to 'src/server/server.c')
-rw-r--r-- | src/server/server.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/src/server/server.c b/src/server/server.c index 3c85cd13..e67be13e 100644 --- a/src/server/server.c +++ b/src/server/server.c @@ -57,6 +57,7 @@ static int add_connection(struct service *service, struct command_context *cmd_c c = malloc(sizeof(struct connection)); c->fd = -1; + c->fd_out = -1; memset(&c->sin, 0, sizeof(c->sin)); c->cmd_ctx = copy_command_context(cmd_ctx); c->service = service; @@ -69,6 +70,7 @@ static int add_connection(struct service *service, struct command_context *cmd_c address_size = sizeof(c->sin); c->fd = accept(service->fd, (struct sockaddr *)&service->sin, &address_size); + c->fd_out = c->fd; /* This increases performance dramatically for e.g. GDB load which * does not have a sliding window protocol. */ @@ -90,6 +92,10 @@ static int add_connection(struct service *service, struct command_context *cmd_c else if (service->type == CONNECTION_PIPE) { c->fd = service->fd; + c->fd_out = fileno(stdout); + + /* do not check for new connections again on stdin */ + service->fd = -1; /* do not check for new connections again on stdin */ service->fd = -1; @@ -205,8 +211,7 @@ int add_service(char *name, enum connection_type type, unsigned short port, int } else if (type == CONNECTION_PIPE) { - /* use stdin */ - c->fd = STDIN_FILENO; + c->fd = fileno(stdin); #ifdef _WIN32 /* for win32 set stdin/stdout to binary mode */ @@ -384,7 +389,7 @@ int server_loop(struct command_context *command_context) } else { - if (service->type != CONNECTION_PIPE) + if (service->type == CONNECTION_TCP) { struct sockaddr_in sin; socklen_t address_size = sizeof(sin); |