|
|
1.1 root 1: # include <stdio.h>
2: # include <sys/types.h>
3: # include <sys/socket.h>
4: # include <sys/ioctl.h>
5: # include <netinet/in.h>
6: # include <netdb.h>
7: # include <signal.h>
8: # include <sccs.h>
9:
10: SCCSID(@(#)initsocket.c 8.1 12/31/84)
11:
12: /*
13: ** init_socket
14: ** initilize the socket to the socket server
15: */
16: init_socket()
17: {
18: register int from_socket; /* file descriptor to attach to socket server */
19: int to_ioctl = 1; /* used in ioctl call */
20: struct sockaddr_in addr; /* address where socket server is */
21: char hostname[BUFSIZ]; /* hostname */
22: struct servent *server;
23: struct hostent *myhost;
24: auto int len;
25: extern int errno;
26:
27: if ( (len = fork()) != 0 )
28: {
29: # ifdef DEBUG
30: printf("lock driver becomes %d\n",len);
31: # endif DEBUG
32: if ( len == -1 )
33: {
34: perror("ingres lock driver, fork");
35: exit(errno);
36: }
37: exit(0);
38: }
39: if ( (from_socket = socket(AF_INET,SOCK_STREAM,0)) == -1 )
40: {
41: # ifdef DEBUG
42: perror("INIT_S socket");
43: # endif DEBUG
44: exit(errno);
45: }
46: len = BUFSIZ;
47: gethostname(hostname,&len);
48:
49: if ( (server = getservbyname("ingreslock",(char *)0)) == 0 )
50: exit(errno);
51:
52: if ( (myhost = gethostbyname(hostname)) == 0 )
53: exit(errno);
54: bzero((char *) &addr,sizeof (addr));
55: bcopy(myhost->h_addr,(char *)&addr.sin_addr,myhost->h_length);
56: addr.sin_family = AF_INET;
57: addr.sin_port = server->s_port;
58: len = sizeof (addr);
59: if ( bind(from_socket,&addr,len) == -1 )
60: {
61: # ifdef DEBUG
62: perror("INIT_S bind, assuming driver already running");
63: # endif DEBUG
64: exit(0);
65: }
66:
67: if ( listen(from_socket,10) == -1 )
68: {
69: perror("Ingres lock, can't listen on port");
70: exit(errno);
71: }
72: ioctl(from_socket,FIONBIO,&to_ioctl);
73: return ( from_socket );
74: }/* init_socket */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.