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