version 1.64, 2013/09/26 00:38:47 |
version 1.73, 2016/08/27 03:09:03 |
|
|
* 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.63 2013/06/13 18:40:31 ohara Exp $ |
* $OpenXM: OpenXM_contrib2/asir2000/io/tcpf.c,v 1.72 2016/08/24 01:33:53 noro Exp $ |
*/ |
*/ |
#include "ca.h" |
#include "ca.h" |
#include "parse.h" |
#include "parse.h" |
#include "com.h" |
#include "com.h" |
#include <signal.h> |
#include <signal.h> |
#include <string.h> |
#include <string.h> |
#if !defined(VISUAL) |
#if !defined(VISUAL) && !defined(__MINGW32__) |
#include <unistd.h> |
#include <unistd.h> |
#include <sys/types.h> |
#include <sys/types.h> |
#include <pwd.h> |
#include <pwd.h> |
|
|
#include "ox.h" |
#include "ox.h" |
|
|
#include <stdlib.h> |
#include <stdlib.h> |
#if defined(VISUAL) |
#if defined(VISUAL) || defined(__MINGW32__) |
#include <winsock2.h> |
#include <winsock2.h> |
#include <process.h> |
#include <process.h> |
#endif |
#endif |
Line 482 void Pregister_server(NODE arg,Q *rp) |
|
Line 482 void Pregister_server(NODE arg,Q *rp) |
|
STOQ(ind,*rp); |
STOQ(ind,*rp); |
} |
} |
|
|
#if !defined(VISUAL) |
#if !defined(VISUAL) && !defined(__MINGW32__) |
#include <sys/file.h> |
#include <sys/file.h> |
#include <sys/types.h> |
#include <sys/types.h> |
#include <sys/stat.h> |
#include <sys/stat.h> |
Line 566 void ox_launcher_101_generic(char *host,char *launcher |
|
Line 566 void ox_launcher_101_generic(char *host,char *launcher |
|
char control_port_str[BUFSIZ]; |
char control_port_str[BUFSIZ]; |
Obj obj; |
Obj obj; |
|
|
#if !defined(VISUAL) |
#if !defined(VISUAL) && !defined(__MINGW32__) |
if ( use_unix && !find_executable("xterm") ) use_x = 0; |
if ( use_unix && !find_executable("xterm") ) use_x = 0; |
#endif |
#endif |
control_port_str[0] = 0; |
control_port_str[0] = 0; |
Line 625 void ox_launch_generic(char *host,char *launcher,char |
|
Line 625 void ox_launch_generic(char *host,char *launcher,char |
|
STOQ(-1,*rp); |
STOQ(-1,*rp); |
return; |
return; |
} |
} |
#if !defined(VISUAL) |
#if !defined(VISUAL) && !defined(__MINGW32__) |
if ( use_unix && !find_executable("xterm") ) use_x = 0; |
if ( use_unix && !find_executable("xterm") ) use_x = 0; |
#endif |
#endif |
control_port_str[0] = 0; |
control_port_str[0] = 0; |
Line 686 void ox_launch_generic(char *host,char *launcher,char |
|
Line 686 void ox_launch_generic(char *host,char *launcher,char |
|
STOQ(ind,*rp); |
STOQ(ind,*rp); |
} |
} |
|
|
#if defined(__CYGWIN__) |
#if defined(__CYGWIN32__) |
static void bslash2slash(char *buf) |
static void bslash2slash(char *buf) |
{ |
{ |
char *p; |
char *p; |
Line 781 void spawn_server(char *host,char *launcher,char *serv |
|
Line 781 void spawn_server(char *host,char *launcher,char *serv |
|
STRING rootdir; |
STRING rootdir; |
char prog[BUFSIZ]; |
char prog[BUFSIZ]; |
char *av[BUFSIZ]; |
char *av[BUFSIZ]; |
#if !defined(VISUAL) |
#if !defined(VISUAL) && !defined(__MINGW32__) |
char cmd[BUFSIZ]; |
char cmd[BUFSIZ]; |
#endif |
#endif |
#if defined(__CYGWIN__) |
#if defined(__CYGWIN__) |
Line 809 void spawn_server(char *host,char *launcher,char *serv |
|
Line 809 void spawn_server(char *host,char *launcher,char *serv |
|
strcpy(localhost,asirhost); |
strcpy(localhost,asirhost); |
else |
else |
gethostname(localhost,BUFSIZ); |
gethostname(localhost,BUFSIZ); |
#if defined(VISUAL) |
#if defined(VISUAL) || defined(__MINGW32__) |
if ( !use_unix ) |
if ( !use_unix ) |
error("spawn_server : not implemented on Windows"); |
error("spawn_server : not implemented on Windows"); |
Pget_rootdir(&rootdir); |
Pget_rootdir(&rootdir); |
Line 830 void spawn_server(char *host,char *launcher,char *serv |
|
Line 830 void spawn_server(char *host,char *launcher,char *serv |
|
// printf("ox_launch 127.0.0.1 %s %s %s %s 0\n",conn_str,control_port_str,server_port_str,server); |
// printf("ox_launch 127.0.0.1 %s %s %s %s 0\n",conn_str,control_port_str,server_port_str,server); |
#else |
#else |
if ( use_unix || !host ) { |
if ( use_unix || !host ) { |
#if defined(__CYGWIN__) |
#if defined(__CYGWIN32__) |
get_launcher_path(win_launcher); |
get_launcher_path(win_launcher); |
if ( dname && strchr(dname,':') ) { |
if ( dname && strchr(dname,':') ) { |
if ( !fork() ) { |
if ( !fork() ) { |
Line 972 void ox_launch_main(int with_x,NODE arg,Obj *p) |
|
Line 972 void ox_launch_main(int with_x,NODE arg,Obj *p) |
|
|
|
void extend_mctab(int bound) |
void extend_mctab(int bound) |
{ |
{ |
int s,i,n; |
int i,n; |
struct m_c *t; |
struct m_c *t; |
if ( !m_c_tab ) { |
if ( !m_c_tab ) { |
n = (bound/INIT_TAB_SIZ + 1)*INIT_TAB_SIZ; |
n = (bound/INIT_TAB_SIZ + 1)*INIT_TAB_SIZ; |
Line 985 void extend_mctab(int bound) |
|
Line 985 void extend_mctab(int bound) |
|
}else if (bound >= m_c_s) { |
}else if (bound >= m_c_s) { |
n = (bound/INIT_TAB_SIZ + 1)*INIT_TAB_SIZ; |
n = (bound/INIT_TAB_SIZ + 1)*INIT_TAB_SIZ; |
t = (struct m_c *)MALLOC_ATOMIC(n*sizeof(struct m_c)); |
t = (struct m_c *)MALLOC_ATOMIC(n*sizeof(struct m_c)); |
bzero((void *)t,s); |
bzero((void *)t,n*sizeof(struct m_c)); |
bcopy((void *)m_c_tab,(void *)t,m_c_s*sizeof(struct m_c)); |
bcopy((void *)m_c_tab,(void *)t,m_c_s*sizeof(struct m_c)); |
for ( i = m_c_s; i < n; i++ ) { |
for ( i = m_c_s; i < n; i++ ) { |
t[i].af_unix = 0; |
t[i].af_unix = 0; |
Line 1032 int register_server(int af_unix,int m,int c,int ind) |
|
Line 1032 int register_server(int af_unix,int m,int c,int ind) |
|
#endif |
#endif |
if ( m_c_i == m_c_s ) { |
if ( m_c_i == m_c_s ) { |
s = (m_c_s+INIT_TAB_SIZ)*sizeof(struct m_c); |
s = (m_c_s+INIT_TAB_SIZ)*sizeof(struct m_c); |
t = (struct m_c *)MALLOC_ATOMIC(s); bzero((void *)m_c_tab,s); |
t = (struct m_c *)MALLOC_ATOMIC(s); |
bcopy((void *)m_c_tab,(void *)t,m_c_s*sizeof(struct m_c)); |
bcopy((void *)m_c_tab,(void *)t,m_c_s*sizeof(struct m_c)); |
for ( i = 0; i < INIT_TAB_SIZ; i++ ) { |
for ( i = 0; i < INIT_TAB_SIZ; i++ ) { |
m_c_tab[m_c_s+i].af_unix = 0; |
t[m_c_s+i].af_unix = 0; |
m_c_tab[m_c_s+i].m = m_c_tab[m_c_s+i].c = -1; |
t[m_c_s+i].m = m_c_tab[m_c_s+i].c = -1; |
} |
} |
m_c_s += INIT_TAB_SIZ; m_c_tab = t; |
m_c_s += INIT_TAB_SIZ; m_c_tab = t; |
} |
} |
Line 1097 void Pox_select(NODE arg,LIST *rp) |
|
Line 1097 void Pox_select(NODE arg,LIST *rp) |
|
} |
} |
|
|
n = select(FD_SETSIZE,&r,&w,&e,tvp); |
n = select(FD_SETSIZE,&r,&w,&e,tvp); |
#if defined(VISUAL) |
#if defined(VISUAL) || defined(__MINGW32__) |
for ( i = minfd, t = 0; n && i <= maxfd; i++ ) |
for ( i = minfd, t = 0; n && i <= maxfd; i++ ) |
#else |
#else |
for ( i = 0, t = 0; n && i < FD_SETSIZE; i++ ) |
for ( i = 0, t = 0; n && i < FD_SETSIZE; i++ ) |
Line 1450 void Pox_cmo_rpc(NODE arg,Obj *rp) |
|
Line 1450 void Pox_cmo_rpc(NODE arg,Obj *rp) |
|
*rp = 0; |
*rp = 0; |
} |
} |
|
|
|
int No_ox_reset; |
|
extern int ox_pari_stream, ox_pari_stream_initialized; |
|
|
void Pox_reset(NODE arg,Q *rp) |
void Pox_reset(NODE arg,Q *rp) |
{ |
{ |
USINT t; |
USINT t; |
int id,c,m; |
int id,c,m; |
Obj obj; |
Obj obj; |
|
NODE nd; |
|
Q q; |
int index = QTOS((Q)ARG0(arg)); |
int index = QTOS((Q)ARG0(arg)); |
|
|
valid_mctab_index(index); |
valid_mctab_index(index); |
m = m_c_tab[index].m; |
m = m_c_tab[index].m; |
c = m_c_tab[index].c; |
c = m_c_tab[index].c; |
if ( m >= 0 ) { |
if ( m >= 0 ) { |
if ( argc(arg) == 1 ) { |
if ( no_ox_reset(c) == 1 ) { |
|
STOQ(index,q); |
|
nd = mknode(1,q); |
|
switch ( No_ox_reset ) { |
|
case 1: |
|
fprintf(stderr,"The server does not implenent OX reset protocol.\n"); |
|
fprintf(stderr,"The server is terminated.\n"); |
|
Pox_shutdown(nd,rp); |
|
if ( index == ox_pari_stream ) ox_pari_stream_initialized = 0; |
|
break; |
|
case 2: |
|
Pox_shutdown(nd,rp); |
|
if ( index == ox_pari_stream ) ox_pari_stream_initialized = 0; |
|
break; |
|
default: |
|
error("The server does not implement OX reset protocol."); |
|
*rp = ONE; |
|
break; |
|
} |
|
return; |
|
} |
|
|
|
if ( argc(arg) == 1 ) { |
ox_send_cmd(m,SM_control_reset_connection); |
ox_send_cmd(m,SM_control_reset_connection); |
ox_flush_stream_force(m); |
ox_flush_stream_force(m); |
|
#if 0 |
|
/* XXX obsolete */ |
ox_recv(m,&id,&obj); t = (USINT)obj; |
ox_recv(m,&id,&obj); t = (USINT)obj; |
|
#endif |
} |
} |
*rp = ONE; |
*rp = ONE; |
#if defined(VISUAL) |
#if defined(VISUAL) || defined(__MINGW32__) |
Sleep(100); |
Sleep(100); |
ox_send_cmd(c,SM_nop); |
ox_send_cmd(c,SM_nop); |
ox_flush_stream_force(c); |
ox_flush_stream_force(c); |
Line 1514 void Pox_shutdown(NODE arg,Q *rp) |
|
Line 1544 void Pox_shutdown(NODE arg,Q *rp) |
|
{ |
{ |
int s; |
int s; |
int index = QTOS((Q)ARG0(arg)); |
int index = QTOS((Q)ARG0(arg)); |
#if !defined(VISUAL) |
#if !defined(VISUAL) && !defined(__MINGW32__) |
int status; |
int status; |
#endif |
#endif |
|
|
Line 1524 void Pox_shutdown(NODE arg,Q *rp) |
|
Line 1554 void Pox_shutdown(NODE arg,Q *rp) |
|
free_iofp(s); |
free_iofp(s); |
s = m_c_tab[index].c; |
s = m_c_tab[index].c; |
free_iofp(s); |
free_iofp(s); |
#if !defined(MPI) && !defined(VISUAL) |
#if !defined(MPI) && !defined(VISUAL) && !defined(__MINGW32__) |
if ( m_c_tab[index].af_unix ) |
if ( m_c_tab[index].af_unix ) |
wait(&status); |
wait(&status); |
#endif |
#endif |
Line 1547 void Pox_push_cmd(NODE arg,Q *rp) |
|
Line 1577 void Pox_push_cmd(NODE arg,Q *rp) |
|
void shutdown_all() { |
void shutdown_all() { |
int s; |
int s; |
int i,index; |
int i,index; |
#if !defined(VISUAL) |
#if !defined(VISUAL) && !defined(__MINGW32__) |
int status; |
int status; |
#endif |
#endif |
|
|
Line 1558 void shutdown_all() { |
|
Line 1588 void shutdown_all() { |
|
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) |
#if defined(VISUAL) || defined(__MINGW32__) |
Sleep(1000); |
Sleep(1000); |
#endif |
#endif |
free_iofp(s); |
free_iofp(s); |
s = m_c_tab[index].c; |
s = m_c_tab[index].c; |
free_iofp(s); |
free_iofp(s); |
#if !defined(MPI) && !defined(VISUAL) |
#if !defined(MPI) && !defined(VISUAL) && !defined(__MINGW32__) |
if ( m_c_tab[index].af_unix ) |
if ( m_c_tab[index].af_unix ) |
wait(&status); |
wait(&status); |
#endif |
#endif |
Line 1605 int validate_ox_plot_stream(int index) |
|
Line 1635 int validate_ox_plot_stream(int index) |
|
arg = mknode(2,NULL,name); |
arg = mknode(2,NULL,name); |
Pox_launch_nox(arg,&r); |
Pox_launch_nox(arg,&r); |
i = QTOS((Q)r); |
i = QTOS((Q)r); |
#if defined(VISUAL) |
#if defined(VISUAL) || defined(__MINGW32__) |
Sleep(100); |
Sleep(100); |
ox_send_cmd(m_c_tab[i].c,SM_nop); |
ox_send_cmd(m_c_tab[i].c,SM_nop); |
ox_flush_stream_force(m_c_tab[i].c); |
ox_flush_stream_force(m_c_tab[i].c); |
Line 1625 int register_102(int s1,int rank,int is_master) |
|
Line 1655 int register_102(int s1,int rank,int is_master) |
|
|
|
if ( rank >= MAXIOFP ) return -1; |
if ( rank >= MAXIOFP ) return -1; |
iofp_102[rank].s = s1; |
iofp_102[rank].s = s1; |
#if defined(VISUAL) |
#if defined(VISUAL) || defined(__MINGW32__) |
iofp_102[rank].in = WSIO_open(s1,"r"); |
iofp_102[rank].in = WSIO_open(s1,"r"); |
iofp_102[rank].out = WSIO_open(s1,"w"); |
iofp_102[rank].out = WSIO_open(s1,"w"); |
#else |
#else |