Server detaches from controlling terminal.
This commit is contained in:
@@ -30,7 +30,6 @@ my $pid = fork;
|
|||||||
die "$0: fork: $!\n" unless ( defined $pid );
|
die "$0: fork: $!\n" unless ( defined $pid );
|
||||||
if ( $pid == 0 ) { # child
|
if ( $pid == 0 ) { # child
|
||||||
close $pty;
|
close $pty;
|
||||||
open STDIN, "<&", $pty_slave->fileno() or die;
|
|
||||||
open STDOUT, ">&", $pty_slave->fileno() or die;
|
open STDOUT, ">&", $pty_slave->fileno() or die;
|
||||||
open STDERR, ">&", $pty_slave->fileno() or die;
|
open STDERR, ">&", $pty_slave->fileno() or die;
|
||||||
close $pty_slave;
|
close $pty_slave;
|
||||||
@@ -44,10 +43,9 @@ if ( $pid == 0 ) { # child
|
|||||||
chomp;
|
chomp;
|
||||||
if ( m{^MOSH CONNECT} ) {
|
if ( m{^MOSH CONNECT} ) {
|
||||||
if ( ( $port, $key ) = m{^MOSH CONNECT (\d+?) (.{22})} ) {
|
if ( ( $port, $key ) = m{^MOSH CONNECT (\d+?) (.{22})} ) {
|
||||||
print $pty "\n~."; # Tear down SSH connection
|
|
||||||
last LINE;
|
last LINE;
|
||||||
} else {
|
} else {
|
||||||
die "Bad MOSH CONNECT string\n";
|
die "Bad MOSH CONNECT string: $_\n";
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
print "$_\n";
|
print "$_\n";
|
||||||
|
|||||||
@@ -169,6 +169,16 @@ void serve( int host_fd, const char *desired_ip )
|
|||||||
printf( "MOSH CONNECT %d %s\n", network.port(), network.get_key().c_str() );
|
printf( "MOSH CONNECT %d %s\n", network.port(), network.get_key().c_str() );
|
||||||
fflush( stdout );
|
fflush( stdout );
|
||||||
|
|
||||||
|
/* detach from terminal */
|
||||||
|
pid_t the_pid = fork();
|
||||||
|
if ( the_pid < 0 ) {
|
||||||
|
perror( "fork" );
|
||||||
|
} else if ( the_pid > 0 ) {
|
||||||
|
_exit( 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
fprintf( stderr, "[mosh-server detached, pid=%d.]\n", (int)getpid() );
|
||||||
|
|
||||||
/* prepare to poll for events */
|
/* prepare to poll for events */
|
||||||
struct pollfd pollfds[ 3 ];
|
struct pollfd pollfds[ 3 ];
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user