diff --git a/src/main/interlink.c b/src/main/interlink.c index 0ff85e74..e466a543 100644 --- a/src/main/interlink.c +++ b/src/main/interlink.c @@ -515,9 +515,25 @@ int init_interlink(void) { int fd = connect_to_af_unix(); + int pid; if (fd != -1) return fd; + pid = fork(); + + if (pid == -1) return -1; + if (pid > 0) { + int i; + + for (i = 1; i <= (MAX_BIND_TRIES+2); ++i) { + fd = connect_to_af_unix(); + + if (fd != -1) return fd; + elinks_usleep(BIND_TRIES_DELAY * i); + } + return -1; + } + close_terminal_pipes(); bind_to_af_unix(); return -1; } diff --git a/src/main/main.c b/src/main/main.c index cc0f4f13..71ac42ea 100644 --- a/src/main/main.c +++ b/src/main/main.c @@ -235,7 +235,7 @@ init(void) handle_trm(get_input_handle(), get_output_handle(), fd, fd, get_ctl_handle(), info.source, info.length, remote_session_flags); - } else { + } else if (get_cmd_opt_bool("no-connect")) { /* Setup a master terminal */ term = attach_terminal(get_input_handle(), get_output_handle(), get_ctl_handle(), info.source, info.length);