X-Git-Url: http://dxcluster.org/gitweb/gitweb.cgi?a=blobdiff_plain;f=src%2Fclient.c;h=7b98f66129bb717914495cdbc7b38305667ae300;hb=21eccb8b2261a8f75ab4a4ac1426b77664733069;hp=049d64f6a2fd9d833365b8d6340f3d2ac54cbace;hpb=ad126fcc09a303760f8a04cfec42ef43d9d3e66c;p=spider.git diff --git a/src/client.c b/src/client.c index 049d64f6..7b98f661 100644 --- a/src/client.c +++ b/src/client.c @@ -723,13 +723,8 @@ void process_node() void term_timeout(int i) { /* none of this is going to be reused so don't bother cleaning up properly */ - if (in && in->t_set) - tcsetattr(0, TCSANOW, &in->t); - if (node) { - shutdown(node->cnum, 3); - close(node->cnum); - } - exit(i); + tcflush(0, TCIOFLUSH); + kill(getpid(), 9); /* commit suicide */ } void terminate(int i) @@ -825,6 +820,7 @@ void connect_to_node() struct hostent *hp, *gethostbyname(); struct sockaddr_in server; int nodef; + int one = 1; sel_t *sp; struct linger lg; @@ -848,6 +844,9 @@ void connect_to_node() if (setsockopt(nodef, SOL_SOCKET, SO_LINGER, &lg, sizeof lg) < 0) { die("Error on SO_LINGER to %s port %d (%d)", node_addr, node_port, errno); } + if (setsockopt(nodef, SOL_SOCKET, SO_KEEPALIVE, &one, sizeof one) < 0) { + die("Error on SO_KEEPALIVE to %s port %d (%d)", node_addr, node_port, errno); + } node = fcb_new(nodef, MSG); node->sp = sel_open(nodef, node, "Msg System", fcb_handler, MSG, SEL_INPUT); @@ -915,8 +914,7 @@ main(int argc, char *argv[]) /* connect up stdin */ in = fcb_new(0, TEXT); in->sp = sel_open(0, in, "STDIN", fcb_handler, TEXT, SEL_INPUT); - if (tcgetattr(0, &in->t) < 0) { -/* echo = 0; */ + if (!isatty(0) || tcgetattr(0, &in->t) < 0) { in->echo = echo; in->t_set = 0; } else {