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

Diff for /OpenXM_contrib2/asir2000/io/sio.c between version 1.1.1.1 and 1.9

version 1.1.1.1, 1999/12/03 07:39:11 version 1.9, 2000/11/07 06:35:39
Line 1 
Line 1 
 /* $OpenXM: OpenXM/src/asir99/io/sio.c,v 1.3 1999/11/18 09:00:38 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/sio.c,v 1.8 2000/10/06 06:05:23 noro Exp $
   */
 #if INET  #if INET
 #include "ca.h"  #include "ca.h"
   #include "setjmp.h"
 #include "ox.h"  #include "ox.h"
 #if defined(VISUAL)  #if defined(VISUAL)
 #include <winsock.h>  #include <winsock.h>
Line 17 
Line 65 
   
 extern int little_endian;  extern int little_endian;
   
   int I_am_server;
 struct IOFP iofp[MAXIOFP];  struct IOFP iofp[MAXIOFP];
   
 #if !defined(_PA_RISC1_1)  #if !defined(_PA_RISC1_1)
Line 59  char *port_str;
Line 108  char *port_str;
         unsigned int port;          unsigned int port;
         static int count=0;          static int count=0;
   
   #if !defined(VISUAL)
         if ( use_unix ) {          if ( use_unix ) {
                 sprintf(port_str,"/tmp/ox%02x.XXXXXX",count);                  sprintf(port_str,"/tmp/ox%02x.XXXXXX",count);
                 count++;                  count++;
                 mktemp(port_str);                  mktemp(port_str);
         } else {          } else
   #endif
           {
                 port = ((unsigned int)mt_genrand()+(unsigned int)get_current_time())                  port = ((unsigned int)mt_genrand()+(unsigned int)get_current_time())
                         %(65536-1024)+1024;                          %(65536-1024)+1024;
                 sprintf(port_str,"%d",port);                  sprintf(port_str,"%d",port);
Line 75  int use_unix;
Line 127  int use_unix;
 char *port_str;  char *port_str;
 {  {
         struct sockaddr_in sin;          struct sockaddr_in sin;
         struct sockaddr_un s_un;  
         struct sockaddr *saddr;          struct sockaddr *saddr;
         int len;          int len;
         int service;          int service;
   #if !defined(VISUAL)
           struct sockaddr_un s_un;
   
         if ( use_unix ) {          if ( use_unix ) {
                 service = socket(AF_UNIX, SOCK_STREAM, 0);                  service = socket(AF_UNIX, SOCK_STREAM, 0);
Line 95  char *port_str;
Line 148  char *port_str;
                 len = strlen(s_un.sun_path)+sizeof(s_un.sun_family);                  len = strlen(s_un.sun_path)+sizeof(s_un.sun_family);
 #endif  #endif
                 saddr = (struct sockaddr *)&s_un;                  saddr = (struct sockaddr *)&s_un;
         } else {          } else
   #endif
           {
                 service = socket(AF_INET, SOCK_STREAM, 0);                  service = socket(AF_INET, SOCK_STREAM, 0);
                 if ( service < 0 ) {                  if ( service < 0 ) {
                         perror("in socket");                          perror("in socket");
Line 142  int try_accept(af_unix,s)
Line 197  int try_accept(af_unix,s)
 int af_unix,s;  int af_unix,s;
 {  {
         int len,c,i;          int len,c,i;
         struct sockaddr_un s_un;  
         struct sockaddr_in sin;          struct sockaddr_in sin;
   
   #if !defined(VISUAL)
           struct sockaddr_un s_un;
         if ( af_unix ) {          if ( af_unix ) {
                 len = sizeof(s_un);                  len = sizeof(s_un);
                 for ( c = -1, i = 0; (c < 0)&&(i = 10) ; i++ )                  for ( c = -1, i = 0; (c < 0)&&(i = 10) ; i++ )
                         c = accept(s, (struct sockaddr *) &s_un, &len);                          c = accept(s, (struct sockaddr *) &s_un, &len);
         } else {          } else
   #endif
           {
   
                 len = sizeof(sin);                  len = sizeof(sin);
                 for ( c = -1, i = 0; (c < 0)&&(i = 10) ; i++ )                  for ( c = -1, i = 0; (c < 0)&&(i = 10) ; i++ )
Line 166  int use_unix;
Line 224  int use_unix;
 char *host,*port_str;  char *host,*port_str;
 {  {
         struct sockaddr_in sin;          struct sockaddr_in sin;
         struct sockaddr_un s_un;  
         struct sockaddr *saddr;          struct sockaddr *saddr;
         struct hostent *hp;          struct hostent *hp;
         int len,s,i;          int len,s,i;
   #if !defined(VISUAL)
           struct sockaddr_un s_un;
   #endif
   
         for ( i = 0; i < 10; i++ ) {          for ( i = 0; i < 10; i++ ) {
   #if !defined(VISUAL)
                 if ( use_unix ) {                  if ( use_unix ) {
                         if ( (s = socket(AF_UNIX,SOCK_STREAM,0)) < 0 ) {                          if ( (s = socket(AF_UNIX,SOCK_STREAM,0)) < 0 ) {
                                 perror("socket");                                  perror("socket");
Line 187  char *host,*port_str;
Line 248  char *host,*port_str;
                         len = strlen(s_un.sun_path)+sizeof(s_un.sun_family);                          len = strlen(s_un.sun_path)+sizeof(s_un.sun_family);
 #endif  #endif
                         saddr = (struct sockaddr *)&s_un;                          saddr = (struct sockaddr *)&s_un;
                 } else {                  } else
   #endif /* VISUAL */
                   {
                         if ( (s = socket(AF_INET,SOCK_STREAM,0)) < 0 ) {                          if ( (s = socket(AF_INET,SOCK_STREAM,0)) < 0 ) {
                                 perror("socket");                                  perror("socket");
                                 return -1;                                  return -1;
Line 209  char *host,*port_str;
Line 272  char *host,*port_str;
                         break;                          break;
                 else {                  else {
                         close(s);                          close(s);
   #if defined(VISUAL)
                           Sleep(100);
   #else
                         usleep(100000);                          usleep(100000);
   #endif
                 }                  }
         }          }
         if ( i == 10 ) {          if ( i == 10 ) {
Line 219  char *host,*port_str;
Line 286  char *host,*port_str;
                 return s;                  return s;
 }  }
   
   #if 0
 close_allconnections()  close_allconnections()
 {  {
         int s;          int s;
Line 242  int s;
Line 310  int s;
                 free_iofp(s);                  free_iofp(s);
         }          }
 }  }
   #else
   close_allconnections()
   {
           shutdown_all();
   }
   #endif
   
 free_iofp(s)  free_iofp(s)
 int s;  int s;
Line 265  int is_server;
Line 339  int is_server;
 {  {
         int i;          int i;
         unsigned char c,rc;          unsigned char c,rc;
           extern int mpi_myid;
   
   #if MPI
           iofp[s1].s = s1;
           if ( mpi_myid == s1 ) {
                   iofp[s1].in = 0;
                   iofp[s1].out = 0;
           } else {
                   iofp[s1].in = WSIO_open(s1,"r");
                   iofp[s1].out = WSIO_open(s1,"w");
           }
           iofp[s1].conv = 0;
           iofp[s1].socket = 0;
   
           return s1;
   #else
         for ( i = 0; i < MAXIOFP; i++ )          for ( i = 0; i < MAXIOFP; i++ )
                 if ( !iofp[i].in )                  if ( !iofp[i].in )
                         break;                          break;
         iofp[i].s = s1;          iofp[i].s = s1;
 #if defined(VISUAL) || MPI  #if defined(VISUAL)
         iofp[i].in = WSIO_open(s1,"r");          iofp[i].in = WSIO_open(s1,"r");
         iofp[i].out = WSIO_open(s1,"w");          iofp[i].out = WSIO_open(s1,"w");
 #else  #else
Line 279  int is_server;
Line 368  int is_server;
         setbuffer(iofp[i].in,(char *)malloc(LBUFSIZ),LBUFSIZ);          setbuffer(iofp[i].in,(char *)malloc(LBUFSIZ),LBUFSIZ);
         setbuffer(iofp[i].out,(char *)malloc(LBUFSIZ),LBUFSIZ);          setbuffer(iofp[i].out,(char *)malloc(LBUFSIZ),LBUFSIZ);
 #endif  #endif
 #if MPI  
         iofp[i].conv = 0;  
         iofp[i].socket = 0;  
 #else  
         if ( little_endian )          if ( little_endian )
                 c = 1;                  c = 1;
         else          else
Line 294  int is_server;
Line 379  int is_server;
         } else {          } else {
                 /* client : read -> write */                  /* client : read -> write */
                 read_char(iofp[i].in,&rc);                  read_char(iofp[i].in,&rc);
                   /* special care for a failure of spawing a server */
                   if ( rc !=0 && rc != 1 && rc != 0xff )
                           return -1;
                 write_char(iofp[i].out,&c); ox_flush_stream_force(i);                  write_char(iofp[i].out,&c); ox_flush_stream_force(i);
         }          }
         iofp[i].conv = c == rc ? 0 : 1;          iofp[i].conv = c == rc ? 0 : 1;
Line 302  int is_server;
Line 390  int is_server;
                 strcpy(iofp[i].socket,af_sock);                  strcpy(iofp[i].socket,af_sock);
         } else          } else
                 iofp[i].socket = 0;                  iofp[i].socket = 0;
 #endif  
         return i;          return i;
   #endif
 }  }
   
 #if defined(VISUAL)  #if defined(VISUAL)
Line 339  int fd;
Line 427  int fd;
                         return i;                          return i;
         return -1;          return -1;
 }  }
   
 #endif /* INET */  #endif /* INET */
   

Legend:
Removed from v.1.1.1.1  
changed lines
  Added in v.1.9

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