diff options
author | Nicholas Marriott <nicholas.marriott@gmail.com> | 2009-01-19 17:16:09 +0000 |
---|---|---|
committer | Nicholas Marriott <nicholas.marriott@gmail.com> | 2009-01-19 17:16:09 +0000 |
commit | 5f6a351df72f76f98ee1ed3494d025fe591fdb69 (patch) | |
tree | 263a4fcc0c99484d27bf868e7de753474603906a /client.c | |
parent | 95323a6a3612a155420dbb17b424db14cabcf06d (diff) | |
download | rtmux-5f6a351df72f76f98ee1ed3494d025fe591fdb69.tar.gz rtmux-5f6a351df72f76f98ee1ed3494d025fe591fdb69.tar.bz2 rtmux-5f6a351df72f76f98ee1ed3494d025fe591fdb69.zip |
Start the first client with a special socketpair so it is already known to the
server rather than playing silly games to get them synchronised before doing
anything.
Change attach-session to start the server.
Diffstat (limited to 'client.c')
-rw-r--r-- | client.c | 36 |
1 files changed, 17 insertions, 19 deletions
@@ -1,4 +1,4 @@ -/* $Id: client.c,v 1.40 2009-01-18 12:09:42 nicm Exp $ */ +/* $Id: client.c,v 1.41 2009-01-19 17:16:09 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> @@ -44,23 +44,20 @@ client_init( struct winsize ws; size_t size; int mode; - u_int retries; struct buffer *b; char *name; - retries = 0; -retry: if (stat(path, &sb) != 0) { if (start_server && errno == ENOENT) { - if (server_start(path) != 0) - goto no_start; - goto retry; + if ((cctx->srv_fd = server_start(path)) == -1) + goto start_failed; + goto server_started; } - goto fail; + goto not_found; } if (!S_ISSOCK(sb.st_mode)) { errno = ENOTSOCK; - goto fail; + goto not_found; } memset(&sa, 0, sizeof sa); @@ -68,7 +65,7 @@ retry: size = strlcpy(sa.sun_path, path, sizeof sa.sun_path); if (size >= sizeof sa.sun_path) { errno = ENAMETOOLONG; - goto fail; + goto not_found; } if ((cctx->srv_fd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) @@ -76,16 +73,17 @@ retry: if (connect( cctx->srv_fd, (struct sockaddr *) &sa, SUN_LEN(&sa)) == -1) { - if (start_server && errno == ECONNREFUSED && retries < 10) { - if (unlink(path) != 0) - goto fail; - if (server_start(path) != 0) - goto no_start; + if (errno == ECONNREFUSED) { + if (unlink(path) != 0 || !start_server) + goto not_found; + if ((cctx->srv_fd = server_start(path)) == -1) + goto start_failed; + goto server_started; } - retries++; - goto retry; + goto not_found; } +server_started: if ((mode = fcntl(cctx->srv_fd, F_GETFL)) == -1) fatal("fcntl"); if (fcntl(cctx->srv_fd, F_SETFL, mode|O_NONBLOCK) == -1) @@ -118,11 +116,11 @@ retry: return (0); -no_start: +start_failed: log_warnx("server failed to start"); return (1); -fail: +not_found: log_warn("server not found"); return (1); } |