Return to tcpf.c CVS log | Up to [local] / OpenXM_contrib2 / asir2000 / io |
version 1.16.2.1, 2000/11/08 08:31:55 | version 1.25, 2001/06/06 02:21:40 | ||
---|---|---|---|
|
|
||
* OF THE SOFTWARE HAS BEEN DEVELOPED BY A THIRD PARTY, THE THIRD PARTY | * OF THE SOFTWARE HAS BEEN DEVELOPED BY A THIRD PARTY, THE THIRD PARTY | ||
* DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, | * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, | ||
* PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. | * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. | ||
* $OpenXM: OpenXM_contrib2/asir2000/io/tcpf.c,v 1.16 2000/11/07 06:35:39 noro Exp $ | * $OpenXM: OpenXM_contrib2/asir2000/io/tcpf.c,v 1.24 2001/06/04 02:49:47 noro Exp $ | ||
*/ | */ | ||
#if INET | |||
#include "ca.h" | #include "ca.h" | ||
#include "parse.h" | #include "parse.h" | ||
#include "com.h" | #include "com.h" | ||
|
|
||
#if defined(VISUAL) | #if defined(VISUAL) | ||
#include <stdlib.h> | #include <stdlib.h> | ||
#include <winsock.h> | #include <winsock2.h> | ||
#include <process.h> | #include <process.h> | ||
#endif | #endif | ||
|
|
||
LIST *rp; | LIST *rp; | ||
{ | { | ||
int i,c; | int i,c; | ||
Q sid; | Q s_id; | ||
NODE t,n0,n; | NODE t,n0,n; | ||
LIST list,l; | LIST list,l; | ||
|
|
||
if ( (m_c_tab[i].m>=0) || (m_c_tab[i].c>=0) ) { | if ( (m_c_tab[i].m>=0) || (m_c_tab[i].c>=0) ) { | ||
c = m_c_tab[i].c; | c = m_c_tab[i].c; | ||
ox_get_serverinfo(c,&list); | ox_get_serverinfo(c,&list); | ||
STOQ(i,sid); | STOQ(i,s_id); | ||
t = mknode(2,sid,list); | t = mknode(2,s_id,list); | ||
MKLIST(l,t); | MKLIST(l,t); | ||
NEXTNODE(n0,n); | NEXTNODE(n0,n); | ||
BDY(n) = (pointer)l; | BDY(n) = (pointer)l; | ||
|
|
||
} | } | ||
/* | /* | ||
try_accept(sock) | try_accept(sock,port) | ||
*/ | */ | ||
void Ptry_accept(arg,rp) | void Ptry_accept(arg,rp) | ||
|
|
||
use_unix = 0; | use_unix = 0; | ||
else | else | ||
use_unix = 1; | use_unix = 1; | ||
s = try_accept(QTOS((Q)ARG0(arg))); | s = try_accept(use_unix,QTOS((Q)ARG0(arg))); | ||
STOQ(s,*rp); | STOQ(s,*rp); | ||
} | } | ||
|
|
||
cs = try_connect(use_unix,host,control_port_str); | cs = try_connect(use_unix,host,control_port_str); | ||
ss = try_connect(use_unix,host,server_port_str); | ss = try_connect(use_unix,host,server_port_str); | ||
} else { | } else { | ||
cs = try_accept(cs); | cs = try_accept(use_unix,cs); | ||
ss = try_accept(ss); | ss = try_accept(use_unix,ss); | ||
} | } | ||
} while ( cs < 0 || ss < 0 ); | } while ( cs < 0 || ss < 0 ); | ||
|
|
||
{ | { | ||
char cmd[BUFSIZ]; | char cmd[BUFSIZ]; | ||
char localhost[BUFSIZ]; | char localhost[BUFSIZ]; | ||
char *dname,*conn_str,*rsh; | char *dname,*conn_str,*rsh,*dname0; | ||
char dname_str[BUFSIZ]; | char dname_str[BUFSIZ]; | ||
char AsirExe[BUFSIZ]; | char AsirExe[BUFSIZ]; | ||
STRING rootdir; | STRING rootdir; | ||
char prog[BUFSIZ]; | char prog[BUFSIZ]; | ||
char *av[BUFSIZ]; | char *av[BUFSIZ]; | ||
dname = use_x ? (char *)getenv("DISPLAY") : 0; | dname0 = (char *)getenv("DISPLAY"); | ||
if ( !dname0 ) | |||
dname0 = "0"; | |||
dname = use_x ? dname0 : 0; | |||
conn_str = conn_to_serv ? "1" : "0"; | conn_str = conn_to_serv ? "1" : "0"; | ||
rsh = getenv("ASIR_RSH"); | rsh = getenv("ASIR_RSH"); | ||
if ( !rsh ) | if ( !rsh ) | ||
rsh = use_ssh ? "ssh" : RSH; | rsh = use_ssh ? "ssh" : RSH; | ||
if ( !use_unix && dname && strstr(rsh,"ssh") ) { | if ( !use_unix && strstr(rsh,"ssh") ) { | ||
/* | /* | ||
* if "ssh" is used to invoke a remote server, | * if "ssh" is used to invoke a remote server, | ||
* we should not specify "-display". | * we should not specify "-display". | ||
|
|
||
control_port_str,server_port_str,server,dname,0); | control_port_str,server_port_str,server,dname,0); | ||
else | else | ||
execlp(launcher,launcher,".",conn_str, | execlp(launcher,launcher,".",conn_str, | ||
control_port_str,server_port_str,server,"0",0); | control_port_str,server_port_str,server,dname0,"-nolog",0); | ||
} | } | ||
} else if ( conn_to_serv == 2 ) { | } else if ( conn_to_serv == 2 ) { | ||
/* special support for java */ | /* special support for java */ | ||
|
|
||
} else { | } else { | ||
if ( dname ) | if ( dname ) | ||
if ( use_ssh ) | if ( use_ssh ) | ||
sprintf(cmd, | sprintf(cmd, | ||
"%s -f -n %s \"xterm -name %s -title ox_launch:%s -geometry 60x10 -e %s %s %s %s %s %s %s >&/dev/null\">/dev/null", | "%s -f -n %s \"xterm -name %s -title ox_launch:%s -geometry 60x10 -e %s %s %s %s %s %s %s >&/dev/null\">/dev/null", | ||
rsh,host,OX_XTERM,host,launcher,localhost,conn_str, | rsh,host,OX_XTERM,host,launcher,localhost,conn_str, | ||
control_port_str,server_port_str,server,"1"); | control_port_str,server_port_str,server,"1"); | ||
else | else | ||
sprintf(cmd, | sprintf(cmd, | ||
"%s -n %s \"xterm -name %s -title ox_launch:%s -display %s -geometry 60x10 -e %s %s %s %s %s %s %s >&/dev/null&\">/dev/null", | "%s -n %s \"xterm -name %s -title ox_launch:%s -display %s -geometry 60x10 -e %s %s %s %s %s %s %s >&/dev/null&\">/dev/null", | ||
rsh,host,OX_XTERM,host,dname,launcher,localhost,conn_str, | rsh,host,OX_XTERM,host,dname,launcher,localhost,conn_str, | ||
control_port_str,server_port_str,server,dname); | control_port_str,server_port_str,server,dname); | ||
else | else | ||
sprintf(cmd, | if ( use_ssh ) | ||
"%s -n %s \"%s %s %s %s %s %s %s >&/dev/null&\">/dev/null", | sprintf(cmd, | ||
"%s -f -n %s \"%s %s %s %s %s %s %s %s>&/dev/null&\">/dev/null", | |||
rsh,host,launcher,localhost,conn_str, | rsh,host,launcher,localhost,conn_str, | ||
control_port_str,server_port_str,server,"0"); | control_port_str,server_port_str,server,"1","-nolog"); | ||
else | |||
sprintf(cmd, | |||
"%s -n %s \"%s %s %s %s %s %s %s %s>&/dev/null&\">/dev/null", | |||
rsh,host,launcher,localhost,conn_str, | |||
control_port_str,server_port_str,server,dname0,"-nolog"); | |||
system(cmd); | system(cmd); | ||
} | } | ||
#endif /* VISUAL */ | #endif /* VISUAL */ | ||
|
|
||
s = m_c_tab[index].m; | s = m_c_tab[index].m; | ||
ox_send_cmd(s,SM_shutdown); | ox_send_cmd(s,SM_shutdown); | ||
free_iofp(s); | free_iofp(s); | ||
#if !defined(VISUAL) | |||
s = m_c_tab[index].c; | |||
free_iofp(s); | |||
#endif | |||
#if !MPI && !defined(VISUAL) | #if !MPI && !defined(VISUAL) | ||
if ( m_c_tab[index].af_unix ) | if ( m_c_tab[index].af_unix ) | ||
wait(&status); | wait(&status); | ||
|
|
||
ox_send_cmd(m_c_tab[index].c,ui); | ox_send_cmd(m_c_tab[index].c,ui); | ||
*rp = 0; | *rp = 0; | ||
} | } | ||
#endif | |||
void shutdown_all() { | void shutdown_all() { | ||
int s; | int s; | ||
|
|
||
continue; | continue; | ||
s = m_c_tab[index].m; | s = m_c_tab[index].m; | ||
ox_send_cmd(s,SM_shutdown); | ox_send_cmd(s,SM_shutdown); | ||
#if defined(VISUAL) | |||
Sleep(1000); | |||
#endif | |||
free_iofp(s); | free_iofp(s); | ||
#if !defined(VISUAL) | |||
s = m_c_tab[index].c; | |||
free_iofp(s); | |||
#endif | |||
#if !MPI && !defined(VISUAL) | #if !MPI && !defined(VISUAL) | ||
if ( m_c_tab[index].af_unix ) | if ( m_c_tab[index].af_unix ) | ||
wait(&status); | wait(&status); |