[BACK]Return to tcpf.c CVS log [TXT][DIR] Up to [local] / OpenXM_contrib2 / asir2000 / io

Diff for /OpenXM_contrib2/asir2000/io/tcpf.c between version 1.8 and 1.19

version 1.8, 2000/07/13 05:09:03 version 1.19, 2000/11/15 01:20:27
Line 1 
Line 1 
 /* $OpenXM: OpenXM_contrib2/asir2000/io/tcpf.c,v 1.7 2000/03/19 12:35:20 noro Exp $ */  /*
    * Copyright (c) 1994-2000 FUJITSU LABORATORIES LIMITED
    * All rights reserved.
    *
    * FUJITSU LABORATORIES LIMITED ("FLL") hereby grants you a limited,
    * non-exclusive and royalty-free license to use, copy, modify and
    * redistribute, solely for non-commercial and non-profit purposes, the
    * computer program, "Risa/Asir" ("SOFTWARE"), subject to the terms and
    * conditions of this Agreement. For the avoidance of doubt, you acquire
    * only a limited right to use the SOFTWARE hereunder, and FLL or any
    * third party developer retains all rights, including but not limited to
    * copyrights, in and to the SOFTWARE.
    *
    * (1) FLL does not grant you a license in any way for commercial
    * purposes. You may use the SOFTWARE only for non-commercial and
    * non-profit purposes only, such as academic, research and internal
    * business use.
    * (2) The SOFTWARE is protected by the Copyright Law of Japan and
    * international copyright treaties. If you make copies of the SOFTWARE,
    * with or without modification, as permitted hereunder, you shall affix
    * to all such copies of the SOFTWARE the above copyright notice.
    * (3) An explicit reference to this SOFTWARE and its copyright owner
    * shall be made on your publication or presentation in any form of the
    * results obtained by use of the SOFTWARE.
    * (4) In the event that you modify the SOFTWARE, you shall notify FLL by
    * e-mail at risa-admin@sec.flab.fujitsu.co.jp of the detailed specification
    * for such modification or the source code of the modified part of the
    * SOFTWARE.
    *
    * THE SOFTWARE IS PROVIDED AS IS WITHOUT ANY WARRANTY OF ANY KIND. FLL
    * MAKES ABSOLUTELY NO WARRANTIES, EXPRESSED, IMPLIED OR STATUTORY, AND
    * EXPRESSLY DISCLAIMS ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS
    * FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT OF THIRD PARTIES'
    * RIGHTS. NO FLL DEALER, AGENT, EMPLOYEES IS AUTHORIZED TO MAKE ANY
    * MODIFICATIONS, EXTENSIONS, OR ADDITIONS TO THIS WARRANTY.
    * UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, TORT, CONTRACT,
    * OR OTHERWISE, SHALL FLL BE LIABLE TO YOU OR ANY OTHER PERSON FOR ANY
    * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, PUNITIVE OR CONSEQUENTIAL
    * DAMAGES OF ANY CHARACTER, INCLUDING, WITHOUT LIMITATION, DAMAGES
    * ARISING OUT OF OR RELATING TO THE SOFTWARE OR THIS AGREEMENT, DAMAGES
    * FOR LOSS OF GOODWILL, WORK STOPPAGE, OR LOSS OF DATA, OR FOR ANY
    * DAMAGES, EVEN IF FLL SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF
    * SUCH DAMAGES, OR FOR ANY CLAIM BY ANY OTHER PARTY. EVEN IF A PART
    * OF THE SOFTWARE HAS BEEN DEVELOPED BY A THIRD PARTY, THE THIRD PARTY
    * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE,
    * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE.
    * $OpenXM: OpenXM_contrib2/asir2000/io/tcpf.c,v 1.18 2000/11/13 03:36:03 noro Exp $
   */
 #if INET  #if INET
 #include "ca.h"  #include "ca.h"
 #include "parse.h"  #include "parse.h"
Line 11 
Line 58 
 #include "ox.h"  #include "ox.h"
   
 #if defined(VISUAL)  #if defined(VISUAL)
 #include <winsock.h>  #include <stdlib.h>
   #include <winsock2.h>
   #include <process.h>
 #endif  #endif
   
 #define OX_XTERM "ox_xterm"  #define OX_XTERM "ox_xterm"
Line 27  static struct m_c {
Line 76  static struct m_c {
 } *m_c_tab;  } *m_c_tab;
   
 static int m_c_i,m_c_s;  static int m_c_i,m_c_s;
   int I_am_server;
   
 #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){error("invalid server id");}  if((ind)<0||(ind)>=mpi_nprocs){error("invalid server id");}
   #define check_valid_mctab_index(ind)\
   if((ind)<0||(ind)>=mpi_nprocs){(ind)=-1;}
 #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<0)&&(m_c_tab[ind].c<0))){error("invalid server id");}  ((m_c_tab[ind].m<0)&&(m_c_tab[ind].c<0))){error("invalid server id");}
   #define check_valid_mctab_index(ind)\
   if((ind)<0||(ind)>=m_c_i||\
   ((m_c_tab[ind].m<0)&&(m_c_tab[ind].c<0))){(ind)=-1;}
 #endif  #endif
   
 int register_server();  int register_server();
Line 305  Q *rp;
Line 360  Q *rp;
         /* client mode */          /* client mode */
         cn = get_iofp(cs,cport_str,0);          cn = get_iofp(cs,cport_str,0);
         sn = get_iofp(ss,sport_str,0);          sn = get_iofp(ss,sport_str,0);
           /* get_iofp returns -1 if the laucher could not spawn the server */
           if ( sn < 0 ) {
                   /* we should terminate the launcher */
                   ox_send_cmd(cn,SM_shutdown); ox_flush_stream_force(cn);
                   STOQ(-1,*rp);
                   return;
           }
   
         /* register server to the server list */          /* register server to the server list */
         ind = register_server(use_unix,cn,sn);          ind = register_server(use_unix,cn,sn);
Line 394  Q *rp;
Line 456  Q *rp;
         /* client mode */          /* client mode */
         cn = get_iofp(cs,control_port_str,0);          cn = get_iofp(cs,control_port_str,0);
         sn = get_iofp(ss,server_port_str,0);          sn = get_iofp(ss,server_port_str,0);
           /* get_iofp returns -1 if the laucher could not spawn the server */
           if ( sn < 0 ) {
                   /* we should terminate the launcher */
                   ox_send_cmd(cn,SM_shutdown); ox_flush_stream_force(cn);
                   STOQ(-1,*rp);
                   return;
           }
   
         /* register server to the server list */          /* register server to the server list */
         ind = register_server(use_unix,cn,sn);          ind = register_server(use_unix,cn,sn);
Line 424  char *control_port_str,*server_port_str;
Line 493  char *control_port_str,*server_port_str;
 {  {
         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 AsirExe[BUFSIZ];
           STRING rootdir;
           char prog[BUFSIZ];
           char *av[BUFSIZ];
   
         dname = use_x ? (char *)getenv("DISPLAY") : 0;          dname0 = (char *)getenv("DISPLAY");
           dname = use_x ? dname0 : 0;
         conn_str = conn_to_serv ? "1" : "0";          conn_str = conn_to_serv ? "1" : "0";
         rsh = use_ssh ? "ssh" : RSH;          rsh = getenv("ASIR_RSH");
           if ( !rsh )
                   rsh = use_ssh ? "ssh" : RSH;
           if ( !use_unix && dname && strstr(rsh,"ssh") ) {
                   /*
                    * if "ssh" is used to invoke a remote server,
                    * we should not specify "-display".
                    */
                   use_ssh = 1;
           }
         gethostname(localhost,BUFSIZ);          gethostname(localhost,BUFSIZ);
 #if !defined(VISUAL)  #if defined(VISUAL)
           if ( !use_unix )
                   error("spawn_server : not implemented on Windows");
           Pget_rootdir(&rootdir);
           sprintf(AsirExe,"%s\\bin\\engine.exe",BDY(rootdir));
           strcpy(prog,server);
           server = strrchr(prog,'/')+1;
           av[0] = "ox_launch";
           av[1] = "127.0.0.1";
           av[2] = conn_str;
           av[3] = control_port_str;
           av[4] = server_port_str;
           av[5] = server;
           av[6] = use_x ? "1" : "0";
           av[7] = 0;
   
           _spawnv(_P_NOWAIT,AsirExe,av);
   //      _spawnv(_P_NOWAIT,"d:\\home\\noro\\engine2000\\debug\\engine.exe",av);
   //      printf("ox_launch 127.0.0.1 %s %s %s %s 0\n",conn_str,control_port_str,server_port_str,server);
   #else
         if ( use_unix ) {          if ( use_unix ) {
                 if ( !fork() ) {                  if ( !fork() ) {
                         setpgid(0,getpid());                          setpgid(0,getpid());
                         if ( dname )                          if ( dname )
                                 execlp("xterm","xterm","-name",OX_XTERM,"-display",dname,                                  execlp("xterm","xterm","-name",OX_XTERM,"-T","ox_launch:local","-display",dname,
                                         "-geometry","60x10","-e",launcher,".",conn_str,                                          "-geometry","60x10","-e",launcher,".",conn_str,
                                         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 */
                 if ( dname )                  if ( dname )
                         sprintf(cmd,                          sprintf(cmd,
                                 "%s -n %s \"(cd %s; xterm -name %s -display %s -geometry 60x10 -e java %s -host %s -control %s -data %s)>&/dev/null&\">/dev/null",                                  "%s -n %s \"(cd %s; xterm -name %s %s -geometry 60x10 -e java %s -host %s -control %s -data %s)>&/dev/null&\">/dev/null",
                                 rsh,host,launcher,OX_XTERM,dname,server,localhost,control_port_str,server_port_str);                                  rsh,host,launcher,OX_XTERM,dname,server,localhost,control_port_str,server_port_str);
                 else                  else
                         sprintf(cmd,                          sprintf(cmd,
Line 456  char *control_port_str,*server_port_str;
Line 559  char *control_port_str,*server_port_str;
                 fprintf(stderr,"%s\n",cmd);                  fprintf(stderr,"%s\n",cmd);
                 sleep(20);                  sleep(20);
 /*              system(cmd); */  /*              system(cmd); */
         } else          } else {
 #endif /* VISUAL */  
         {  
                 if ( dname )                  if ( dname )
                           if ( use_ssh )
                         sprintf(cmd,                          sprintf(cmd,
                                 "%s -n %s \"xterm -name %s -display %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,dname,launcher,localhost,conn_str,                                  rsh,host,OX_XTERM,host,launcher,localhost,conn_str,
                                   control_port_str,server_port_str,server,"1");
                           else
                           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",
                                   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,                          sprintf(cmd,
                                 "%s -n %s \"%s %s %s %s %s %s %s>&/dev/null&\">/dev/null",  "%s -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,dname0,"-nolog");
                 system(cmd);                  system(cmd);
         }          }
   #endif /* VISUAL */
 }  }
   
 void Pox_launch(arg,rp)  void Pox_launch(arg,rp)
Line 548  int af_unix,m,c;
Line 656  int af_unix,m,c;
 {  {
         int s,i,ci;          int s,i,ci;
         struct m_c *t;          struct m_c *t;
   #define INIT_TAB_SIZ 64
   
         if ( c < 0 )          if ( c < 0 )
                 return -1;                  return -1;
         if ( !m_c_tab ) {          if ( !m_c_tab ) {
                 s = BUFSIZ*sizeof(struct m_c);                  s = INIT_TAB_SIZ*sizeof(struct m_c);
                 m_c_tab = (struct m_c *)MALLOC_ATOMIC(s);                  m_c_tab = (struct m_c *)MALLOC_ATOMIC(s);
                 for ( i = 0; i < BUFSIZ; i++ ) {                  for ( i = 0; i < INIT_TAB_SIZ; i++ ) {
                         m_c_tab[i].af_unix = 0;                          m_c_tab[i].af_unix = 0;
                         m_c_tab[i].m = m_c_tab[i].c = -1;                          m_c_tab[i].m = m_c_tab[i].c = -1;
                 }                  }
                 m_c_s = BUFSIZ;                  m_c_s = INIT_TAB_SIZ;
         }          }
 #if !MPI  #if !MPI
         for ( i = 0; i < m_c_i; i++ )          for ( i = 0; i < m_c_i; i++ )
Line 571  int af_unix,m,c;
Line 680  int af_unix,m,c;
         }          }
 #endif  #endif
         if ( m_c_i == m_c_s ) {          if ( m_c_i == m_c_s ) {
                 s = (m_c_s+BUFSIZ)*sizeof(struct m_c);                  s = (m_c_s+INIT_TAB_SIZ)*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++ ) {                  for ( i = 0; i < INIT_TAB_SIZ; i++ ) {
                         m_c_tab[m_c_s+i].af_unix = 0;                          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_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 += INIT_TAB_SIZ; 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;
         m_c_tab[m_c_i].af_unix = af_unix;          m_c_tab[m_c_i].af_unix = af_unix;
Line 1033  Q *rp;
Line 1142  Q *rp;
         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);
Line 1055  Q *rp;
Line 1168  Q *rp;
         *rp = 0;          *rp = 0;
 }  }
 #endif  #endif
   
   void shutdown_all() {
           int s;
           int i,index;
           int status;
   
           for ( i = I_am_server?1:0; i < m_c_i; i++ ) {
                   index = i;
                   check_valid_mctab_index(index);
                   if ( index < 0 )
                           continue;
                   s = m_c_tab[index].m;
                   ox_send_cmd(s,SM_shutdown);
                   free_iofp(s);
   #if !defined(VISUAL)
                   s = m_c_tab[index].c;
                   free_iofp(s);
   #endif
   #if !MPI && !defined(VISUAL)
                   if ( m_c_tab[index].af_unix )
                           wait(&status);
   #endif
                   m_c_tab[index].m = 0; m_c_tab[index].c = 0;
                   m_c_tab[index].af_unix = 0;
           }
   }

Legend:
Removed from v.1.8  
changed lines
  Added in v.1.19

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>