[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.5 and 1.25

version 1.5, 2000/08/21 08:31:39 version 1.25, 2012/12/17 07:20:45
Line 23 
Line 23 
  * shall be made on your publication or presentation in any form of the   * shall be made on your publication or presentation in any form of the
  * results obtained by use of the SOFTWARE.   * results obtained by use of the SOFTWARE.
  * (4) In the event that you modify the SOFTWARE, you shall notify FLL by   * (4) In the event that you modify the SOFTWARE, you shall notify FLL by
  * e-mail at risa-admin@flab.fujitsu.co.jp of the detailed specification   * 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   * for such modification or the source code of the modified part of the
  * SOFTWARE.   * SOFTWARE.
  *   *
Line 44 
Line 44 
  * 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/sio.c,v 1.4 2000/07/13 05:09:02 noro Exp $   * $OpenXM: OpenXM_contrib2/asir2000/io/sio.c,v 1.24 2011/02/06 07:07:39 ohara Exp $
 */  */
 #if INET  
 #include "ca.h"  #include "ca.h"
 #include "setjmp.h"  #include <setjmp.h>
 #include "ox.h"  #include "ox.h"
 #if defined(VISUAL)  #if defined(VISUAL)
 #include <winsock.h>  #include <winsock2.h>
   #include <io.h>
 #else  #else
 #include <sys/time.h>  #include <sys/time.h>
 #include <sys/uio.h>  #include <sys/uio.h>
Line 65 
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 75  struct IOFP iofp[MAXIOFP];
Line 76  struct IOFP iofp[MAXIOFP];
   
 void init_socket(void);  void init_socket(void);
   
 int getremotesocket(s)  #if !defined(VISUAL)
 int s;  #define closesocket(s)   (close((s)))
   #endif
   
   int getremotesocket(int s)
 {  {
         return iofp[s].s;          return iofp[s].s;
 }  }
   
 void getremotename(s,name)  void getremotename(int s,char *name)
 int s;  
 char *name;  
 {  {
         struct sockaddr_in peer;          struct sockaddr_in peer;
         struct hostent *hp;          struct hostent *hp;
Line 98  char *name;
Line 100  char *name;
                 strcpy(name,(char *)inet_ntoa(peer.sin_addr));                  strcpy(name,(char *)inet_ntoa(peer.sin_addr));
 }  }
   
 int generate_port(use_unix,port_str)  void generate_port(int use_unix,char *port_str)
 int use_unix;  
 char *port_str;  
 {  {
         double get_current_time();          double get_current_time();
         unsigned long mt_genrand();          unsigned long mt_genrand();
         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);
         }          }
 }  }
   
 int try_bind_listen(use_unix,port_str)  int try_bind_listen(int use_unix,char *port_str)
 int use_unix;  
 char *port_str;  
 {  {
         struct sockaddr_in sin;          struct sockaddr_in sin;
         struct sockaddr *saddr;          struct sockaddr *saddr;
Line 153  char *port_str;
Line 154  char *port_str;
                         return -1;                          return -1;
                 }                  }
                 sin.sin_family = AF_INET; sin.sin_addr.s_addr = INADDR_ANY;                  sin.sin_family = AF_INET; sin.sin_addr.s_addr = INADDR_ANY;
                 sin.sin_port = htons(atoi(port_str));                  sin.sin_port = htons((unsigned short)atoi(port_str));
                 len = sizeof(sin);                  len = sizeof(sin);
                 saddr = (struct sockaddr *)&sin;                  saddr = (struct sockaddr *)&sin;
         }          }
         if (bind(service, saddr, len) < 0) {          if (bind(service, saddr, len) < 0) {
                 perror("in bind");                  perror("in bind");
                 close(service);                  closesocket(service);
                 return -1;                  return -1;
         }          }
         if (getsockname(service,saddr, &len) < 0) {          if (getsockname(service,saddr, &len) < 0) {
             perror("in getsockname");              perror("in getsockname");
             close(service);              closesocket(service);
             return -1;              return -1;
         }          }
         if (listen(service, SOCKQUEUELENGTH) < 0) {          if (listen(service, SOCKQUEUELENGTH) < 0) {
                 perror("in listen");                  perror("in listen");
                 close(service);                  closesocket(service);
                 return -1;                  return -1;
         }          }
         return service;          return service;
Line 189  char *port_str;
Line 190  char *port_str;
   the original socket is always closed.    the original socket is always closed.
 */  */
   
 int try_accept(af_unix,s)  int try_accept(int af_unix,int s)
 int af_unix,s;  
 {  {
         int len,c,i;          int len,c,i;
         struct sockaddr_in sin;          struct sockaddr_in sin;
Line 211  int af_unix,s;
Line 211  int af_unix,s;
         }          }
         if ( i == 10 )          if ( i == 10 )
                 c = -1;                  c = -1;
         close(s);          closesocket(s);
         return c;          return c;
 }  }
   
 int try_connect(use_unix,host,port_str)  int try_connect(int use_unix,char *host,char *port_str)
 int use_unix;  
 char *host,*port_str;  
 {  {
         struct sockaddr_in sin;          struct sockaddr_in sin;
         struct sockaddr *saddr;          struct sockaddr *saddr;
Line 247  char *host,*port_str;
Line 245  char *host,*port_str;
                 } else                  } else
 #endif /* VISUAL */  #endif /* VISUAL */
                 {                  {
                           if ( !host )
                                   host = "127.0.0.1";
                         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;
                         }                          }
                         bzero(&sin,sizeof(sin));                          bzero(&sin,sizeof(sin));
                         sin.sin_port = htons(atoi(port_str));                          sin.sin_port = htons((unsigned short)atoi(port_str));
                         sin.sin_addr.s_addr = inet_addr(host);                          sin.sin_addr.s_addr = inet_addr(host);
                         if ( sin.sin_addr.s_addr != -1 ) {                          if ( sin.sin_addr.s_addr != -1 ) {
                                 sin.sin_family = AF_INET;                                  sin.sin_family = AF_INET;
Line 267  char *host,*port_str;
Line 267  char *host,*port_str;
                 if ( connect(s,saddr,len) >= 0 )                  if ( connect(s,saddr,len) >= 0 )
                         break;                          break;
                 else {                  else {
                         close(s);                          closesocket(s);
 #if defined(VISUAL)  #if defined(VISUAL)
                         Sleep(100);                          Sleep(100);
 #else  #else
Line 282  char *host,*port_str;
Line 282  char *host,*port_str;
                 return s;                  return s;
 }  }
   
 close_allconnections()  #if 0
   void close_allconnections()
 {  {
         int s;          int s;
   
Line 293  close_allconnections()
Line 294  close_allconnections()
                 close_connection(s);                  close_connection(s);
 }  }
   
 close_connection(s)  void close_connection(int s)
 int s;  
 {  {
         struct IOFP *r;          struct IOFP *r;
   
Line 305  int s;
Line 305  int s;
                 free_iofp(s);                  free_iofp(s);
         }          }
 }  }
   #else
   void close_allconnections()
   {
           shutdown_all();
   }
   #endif
   
 free_iofp(s)  void free_iofp(int s)
 int s;  
 {  {
         struct IOFP *r;          struct IOFP *r;
   
         r = &iofp[s];          r = &iofp[s];
         r->in = r->out = 0; r->s = 0;  #if defined(VISUAL)
 #if !defined(VISUAL)          if ( r->s ) closesocket(r->s);
         if ( r->socket )  #elif !defined(MPI)
                 unlink(r->socket);          if ( r->in ) fclose(r->in);
           if ( r->out ) fclose(r->out);
           if ( r->socket ) unlink(r->socket);
 #endif  #endif
           r->inbuf = r->outbuf = 0;
           r->in = r->out = 0; r->s = 0;
 }  }
   
 #define LBUFSIZ BUFSIZ*10  int get_iofp(int s1,char *af_sock,int is_server)
   
 int get_iofp(s1,af_sock,is_server)  
 int s1;  
 char *af_sock;  
 int is_server;  
 {  {
         int i;          int i;
         unsigned char c,rc;          unsigned char c,rc;
         extern int mpi_myid;          extern int mpi_myid;
   
 #if MPI  #if defined(MPI)
         iofp[s1].s = s1;          iofp[s1].s = s1;
         if ( mpi_myid == s1 ) {          if ( mpi_myid == s1 ) {
                 iofp[s1].in = 0;                  iofp[s1].in = 0;
Line 354  int is_server;
Line 358  int is_server;
 #else  #else
         iofp[i].in = fdopen(s1,"r");          iofp[i].in = fdopen(s1,"r");
         iofp[i].out = fdopen(s1,"w");          iofp[i].out = fdopen(s1,"w");
         setbuffer(iofp[i].in,(char *)malloc(LBUFSIZ),LBUFSIZ);  #if !defined(__CYGWIN__)
         setbuffer(iofp[i].out,(char *)malloc(LBUFSIZ),LBUFSIZ);          setbuffer(iofp[i].in,iofp[i].inbuf = (char *)MALLOC_ATOMIC(LBUFSIZ),LBUFSIZ);
           setbuffer(iofp[i].out,iofp[i].outbuf = (char *)MALLOC_ATOMIC(LBUFSIZ),LBUFSIZ);
 #endif  #endif
   #endif
         if ( little_endian )          if ( little_endian )
                 c = 1;                  c = 1;
         else          else
                 c = 0xff;                  c = 0xff;
         if ( is_server ) {          if ( is_server ) {
                 /* server : write -> read */                  /* server : write -> read */
                 write_char(iofp[i].out,&c); ox_flush_stream_force(i);                  write_char((FILE *)iofp[i].out,&c); ox_flush_stream_force(i);
                 read_char(iofp[i].in,&rc);                  read_char((FILE *)iofp[i].in,&rc);
         } else {          } else {
                 /* client : read -> write */                  /* client : read -> write */
                 read_char(iofp[i].in,&rc);                  read_char((FILE *)iofp[i].in,&rc);
                 write_char(iofp[i].out,&c); ox_flush_stream_force(i);                  /* special care for a failure of spawing a server */
                   if ( rc !=0 && rc != 1 && rc != 0xff )
                           return -1;
                   write_char((FILE *)iofp[i].out,&c); ox_flush_stream_force(i);
         }          }
         iofp[i].conv = c == rc ? 0 : 1;          iofp[i].conv = c == rc ? 0 : 1;
         if ( af_sock && af_sock[0] ) {          if ( af_sock && af_sock[0] ) {
Line 397  void init_socket()
Line 406  void init_socket()
 }  }
 #endif  #endif
   
 get_fd(index)  int get_fd(int index)
 int index;  
 {  {
         return iofp[index].s;          return iofp[index].s;
 }  }
   
 get_index(fd)  int get_index(int fd)
 int fd;  
 {  {
         int i;          int i;
   
Line 413  int fd;
Line 420  int fd;
                         return i;                          return i;
         return -1;          return -1;
 }  }
 #endif /* INET */  

Legend:
Removed from v.1.5  
changed lines
  Added in v.1.25

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