version 1.6, 2000/01/26 02:05:34 |
version 1.8, 2000/07/13 05:09:03 |
|
|
/* $OpenXM: OpenXM_contrib2/asir2000/io/tcpf.c,v 1.5 2000/01/11 06:43:36 noro Exp $ */ |
/* $OpenXM: OpenXM_contrib2/asir2000/io/tcpf.c,v 1.7 2000/03/19 12:35:20 noro Exp $ */ |
#if INET |
#if INET |
#include "ca.h" |
#include "ca.h" |
#include "parse.h" |
#include "parse.h" |
Line 31 static int m_c_i,m_c_s; |
|
Line 31 static int m_c_i,m_c_s; |
|
#if MPI |
#if MPI |
extern int mpi_nprocs; |
extern int mpi_nprocs; |
#define valid_mctab_index(ind)\ |
#define valid_mctab_index(ind)\ |
if((ind)<0||(ind)>=(mpi_nprocs-1)){error("invalid server id");} |
if((ind)<0||(ind)>=mpi_nprocs){error("invalid server id");} |
#else |
#else |
#define valid_mctab_index(ind)\ |
#define valid_mctab_index(ind)\ |
if((ind)<0||(ind)>=m_c_i||\ |
if((ind)<0||(ind)>=m_c_i||\ |
(!m_c_tab[ind].m&&!m_c_tab[ind].c)){error("invalid server id");} |
((m_c_tab[ind].m<0)&&(m_c_tab[ind].c<0))){error("invalid server id");} |
#endif |
#endif |
|
|
int register_server(); |
int register_server(); |
int get_mcindex(int); |
int get_mcindex(int); |
|
|
|
void Pox_send_raw_cmo(), Pox_recv_raw_cmo(); |
|
|
void Pox_launch(),Pox_launch_nox(),Pox_launch_main(); |
void Pox_launch(),Pox_launch_nox(),Pox_launch_main(); |
void Pox_launch_generic(); |
void Pox_launch_generic(); |
void Pox_shutdown(); |
void Pox_shutdown(); |
Line 60 void Pox_flush(); |
|
Line 62 void Pox_flush(); |
|
void Pgenerate_port(),Ptry_bind_listen(),Ptry_connect(),Ptry_accept(); |
void Pgenerate_port(),Ptry_bind_listen(),Ptry_connect(),Ptry_accept(); |
void Pregister_server(); |
void Pregister_server(); |
void Pox_get_serverinfo(); |
void Pox_get_serverinfo(); |
|
void Pox_mpi_myid(), Pox_mpi_nprocs(); |
|
|
void ox_launch_generic(); |
void ox_launch_generic(); |
|
|
pointer bevalf(); |
pointer bevalf(); |
|
|
struct ftab tcp_tab[] = { |
struct ftab tcp_tab[] = { |
|
{"ox_send_raw_cmo",Pox_send_raw_cmo,2}, |
|
{"ox_recv_raw_cmo",Pox_recv_raw_cmo,1}, |
{"ox_get_serverinfo",Pox_get_serverinfo,-1}, |
{"ox_get_serverinfo",Pox_get_serverinfo,-1}, |
{"generate_port",Pgenerate_port,-1}, |
{"generate_port",Pgenerate_port,-1}, |
{"try_bind_listen",Ptry_bind_listen,1}, |
{"try_bind_listen",Ptry_bind_listen,1}, |
Line 82 struct ftab tcp_tab[] = { |
|
Line 87 struct ftab tcp_tab[] = { |
|
{"ox_cmo_rpc",Pox_cmo_rpc,-99999999}, |
{"ox_cmo_rpc",Pox_cmo_rpc,-99999999}, |
|
|
{"ox_sync",Pox_sync,1}, |
{"ox_sync",Pox_sync,1}, |
|
#if MPI |
|
{"ox_mpi_myid",Pox_mpi_myid,0}, |
|
{"ox_mpi_nprocs",Pox_mpi_nprocs,0}, |
|
#endif |
#if !MPI |
#if !MPI |
{"ox_reset",Pox_reset,-2}, |
{"ox_reset",Pox_reset,-2}, |
{"ox_intr",Pox_intr,1}, |
{"ox_intr",Pox_intr,1}, |
Line 118 extern int ox_exchange_mathcap; |
|
Line 127 extern int ox_exchange_mathcap; |
|
|
|
char *getenv(); |
char *getenv(); |
|
|
|
#if MPI |
|
extern int mpi_myid, mpi_nprocs; |
|
|
|
void Pox_mpi_myid(rp) |
|
Q *rp; |
|
{ |
|
STOQ(mpi_myid,*rp); |
|
} |
|
|
|
void Pox_mpi_nprocs(rp) |
|
Q *rp; |
|
{ |
|
STOQ(mpi_nprocs,*rp); |
|
} |
|
#endif |
|
|
void Pox_get_serverinfo(arg,rp) |
void Pox_get_serverinfo(arg,rp) |
NODE arg; |
NODE arg; |
LIST *rp; |
LIST *rp; |
|
|
|
|
if ( !arg ) { |
if ( !arg ) { |
for ( i = 0, n0 = 0; i < m_c_i; i++ ) |
for ( i = 0, n0 = 0; i < m_c_i; i++ ) |
if ( m_c_tab[i].m || m_c_tab[i].c ) { |
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,sid); |
|
|
MKLIST(*rp,n0); |
MKLIST(*rp,n0); |
} else { |
} else { |
i = QTOS((Q)ARG0(arg)); |
i = QTOS((Q)ARG0(arg)); |
if ( i >= 0 && i < m_c_i && (m_c_tab[i].m || m_c_tab[i].c) ) |
if ( i >= 0 && i < m_c_i && ((m_c_tab[i].m>=0) || (m_c_tab[i].c>=0)) ) |
ox_get_serverinfo(m_c_tab[i].c,rp); |
ox_get_serverinfo(m_c_tab[i].c,rp); |
else { |
else { |
MKLIST(*rp,0); |
MKLIST(*rp,0); |
Line 528 int af_unix,m,c; |
|
Line 553 int af_unix,m,c; |
|
return -1; |
return -1; |
if ( !m_c_tab ) { |
if ( !m_c_tab ) { |
s = BUFSIZ*sizeof(struct m_c); |
s = BUFSIZ*sizeof(struct m_c); |
m_c_tab = (struct m_c *)MALLOC_ATOMIC(s); bzero(m_c_tab,s); |
m_c_tab = (struct m_c *)MALLOC_ATOMIC(s); |
|
for ( i = 0; i < BUFSIZ; i++ ) { |
|
m_c_tab[i].af_unix = 0; |
|
m_c_tab[i].m = m_c_tab[i].c = -1; |
|
} |
m_c_s = BUFSIZ; |
m_c_s = BUFSIZ; |
} |
} |
#if !MPI |
#if !MPI |
for ( i = 0; i < m_c_i; i++ ) |
for ( i = 0; i < m_c_i; i++ ) |
if ( !m_c_tab[i].m && !m_c_tab[i].c ) |
if ( (m_c_tab[i].m<0) && (m_c_tab[i].c<0) ) |
break; |
break; |
if ( i < m_c_i ) { |
if ( i < m_c_i ) { |
m_c_tab[i].m = m; m_c_tab[i].c = c; |
m_c_tab[i].m = m; m_c_tab[i].c = c; |
Line 545 int af_unix,m,c; |
|
Line 574 int af_unix,m,c; |
|
s = (m_c_s+BUFSIZ)*sizeof(struct m_c); |
s = (m_c_s+BUFSIZ)*sizeof(struct m_c); |
t = (struct m_c *)MALLOC_ATOMIC(s); bzero(m_c_tab,s); |
t = (struct m_c *)MALLOC_ATOMIC(s); bzero(m_c_tab,s); |
bcopy(m_c_tab,t,m_c_s*sizeof(struct m_c)); |
bcopy(m_c_tab,t,m_c_s*sizeof(struct m_c)); |
|
for ( i = 0; i < BUFSIZ; i++ ) { |
|
m_c_tab[m_c_s+i].af_unix = 0; |
|
m_c_tab[m_c_s+i].m = m_c_tab[m_c_s+i].c = -1; |
|
} |
m_c_s += BUFSIZ; m_c_tab = t; |
m_c_s += BUFSIZ; m_c_tab = t; |
} |
} |
m_c_tab[m_c_i].m = m; m_c_tab[m_c_i].c = c; |
m_c_tab[m_c_i].m = m; m_c_tab[m_c_i].c = c; |
|
|
*rp = ONE; |
*rp = ONE; |
} |
} |
|
|
|
void Pox_send_raw_cmo(arg,rp) |
|
NODE arg; |
|
Obj *rp; |
|
{ |
|
int s; |
|
int index = QTOS((Q)ARG0(arg)); |
|
|
|
valid_mctab_index(index); |
|
s = m_c_tab[index].c; |
|
ox_write_cmo(s,(Obj)ARG1(arg)); |
|
/* flush always */ |
|
ox_flush_stream(s); |
|
*rp = 0; |
|
} |
|
|
|
void Pox_recv_raw_cmo(arg,rp) |
|
NODE arg; |
|
Obj *rp; |
|
{ |
|
int s; |
|
int index = QTOS((Q)ARG0(arg)); |
|
|
|
valid_mctab_index(index); |
|
s = m_c_tab[index].c; |
|
ox_read_cmo(s,rp); |
|
} |
|
|
void Pox_push_local(arg,rp) |
void Pox_push_local(arg,rp) |
NODE arg; |
NODE arg; |
Obj *rp; |
Obj *rp; |
|
|
if ( m_c_tab[index].af_unix ) |
if ( m_c_tab[index].af_unix ) |
wait(&status); |
wait(&status); |
#endif |
#endif |
m_c_tab[index].m = 0; m_c_tab[index].c = 0; |
m_c_tab[index].m = -1; m_c_tab[index].c = -1; |
m_c_tab[index].af_unix = 0; |
m_c_tab[index].af_unix = 0; |
*rp = 0; |
*rp = 0; |
} |
} |
Line 986 void Pox_push_cmd(arg,rp) |
|
Line 1046 void Pox_push_cmd(arg,rp) |
|
NODE arg; |
NODE arg; |
Q *rp; |
Q *rp; |
{ |
{ |
unsigned int ui; |
int ui; |
int index = QTOS((Q)ARG0(arg)); |
int index = QTOS((Q)ARG0(arg)); |
|
|
valid_mctab_index(index); |
valid_mctab_index(index); |
ui = (unsigned int)QTOS((Q)ARG1(arg)); |
ui = QTOS((Q)ARG1(arg)); |
ox_send_cmd(m_c_tab[index].c,ui); |
ox_send_cmd(m_c_tab[index].c,ui); |
*rp = 0; |
*rp = 0; |
} |
} |