1 /*
2  $Id$
3  */
4 
5 #include <sys/types.h>
6 #include <stdio.h>
7 #include <unistd.h>
8 #if !defined(__MINGW32__)
9 #include <sys/socket.h>
10 #include <netinet/in.h>
11 #include <arpa/inet.h>
12 #endif
13 
14 #if defined(CRAY) && !defined(__crayx1)
15 #define create_server_socket_ CREATE_SERVER_SOCKET
16 #define create_client_socket_ CREATE_CLIENT_SOCKET
17 #define client_socket_write_ CLIENT_SOCKET_WRITE
18 #define write_socket_ WRITE_SOCKET
19 #define close_socket_ CLOSE_SOCKET
20 #endif
21 
22 
23 /*
24  Routine to create a server socket
25  */
create_server_socket(char * host,int port)26 int create_server_socket(char *host, int port)
27 {
28 #if defined(CATAMOUNT) || defined(__MINGW32__)
29     GA_Error("system calls do not work on this machine", 0);
30 #else
31   int server_sockfd, client_sockfd;
32   int server_len;
33 #ifdef NOSOCKLEN
34   int client_len;
35 #else
36   socklen_t client_len;
37 #endif
38   struct sockaddr_in server_address;
39   struct sockaddr_in client_address;
40 
41   server_sockfd= socket(AF_INET,SOCK_STREAM,0);
42   server_address.sin_family=AF_INET;
43   server_address.sin_addr.s_addr=inet_addr(host);
44   server_address.sin_port=htons((ushort) port);
45   server_len=sizeof(server_address);
46   bind(server_sockfd,(struct sockaddr *)&server_address,server_len);
47   listen(server_sockfd,5);
48   client_sockfd=accept(server_sockfd,(struct sockaddr *)&client_address,&client_len);
49   return client_sockfd;
50 #endif
51 }
52 
create_server_socket_(char * s,int * port)53 int create_server_socket_(char *s, int *port)
54 {
55   char host[255];
56   int i=0;
57   while(*s!=' ' && i<255){ host[i]=*s; s++; i++; }; host[i]=0;
58   return create_server_socket(host,*port);
59 }
60 
61 /*
62  Routine to create a client socket to the specified host and port
63  Return value is the socket file descriptor when successful, -1 otherwise
64  */
create_client_socket(char * host,int port)65 int create_client_socket(char *host, int port)
66 {
67 #if defined(CATAMOUNT) || defined(__MINGW32__)
68     GA_Error("system calls do not work on this machine", 0);
69 #else
70   int sockfd, len, result;
71   struct sockaddr_in address;
72   /*  int size = 10; */
73 
74   sockfd=socket(AF_INET,SOCK_STREAM,0);
75   address.sin_family=AF_INET;
76   address.sin_addr.s_addr=inet_addr(host);
77   address.sin_port=htons((ushort) port);
78   len=sizeof(address);
79   /*  setsockopt(sockfd,SOL_SOCKET,SO_RCVBUF,(char *) &size,sizeof size);
80   setsockopt(sockfd,SOL_SOCKET,SO_SNDBUF,(char *) &size,sizeof size); */
81   result=connect(sockfd,(struct sockaddr *)&address,len);
82 
83   if(result==-1) return -1;
84   return sockfd;
85 #endif
86 }
87 
create_client_socket_(char * s,int * port)88 int create_client_socket_(char *s, int *port)
89 {
90   char host[255];
91   int i=0;
92 
93   while(*s!=' ' && i<255){ host[i]=*s; s++; i++; }; host[i]=0;
94   return create_client_socket(host,*port);
95 }
96 
97 
client_socket_write_(int * sockfd,char * value,int * vlen)98 long client_socket_write_(int *sockfd, char *value, int *vlen)
99 {
100   long nb;
101   nb=write(*sockfd,value,*vlen);
102   return nb;
103 }
104 
close_socket_(int * sockfd)105 void close_socket_(int *sockfd)
106 {
107   close(*sockfd);
108 }
109 
110 
111 
112 
113 
114