home *** CD-ROM | disk | FTP | other *** search
- /*======================================================================
- S O C K E T P A I R . C
- doc: Tue Mar 31 15:12:52 1992
- dlm: Tue Mar 31 16:24:54 1992
- (c) 1992 ant@ips.id.ethz.ch
- uE-Info: 40 73 T 0 0 72 2 2 ofnI
- ======================================================================*/
-
- /*
- socketpair() implementation for A/UX (guack!)
- */
-
- #include <stdio.h>
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <sys/un.h>
-
- int socketpair(d,type,protocol,sv)
- int d,type,protocol,sv[2];
- {
- int lSock,aLen;
- struct sockaddr_un name;
-
- lSock = socket(d,type,protocol); /* listen s when tcp */
- if (lSock < 0) return -1;
- name.sun_family = d; /* bind address */
- tmpnam(name.sun_path); /* in /tmp */
- if (bind(lSock,&name,sizeof(name)) < 0)
- return -1;
- if ((type != SOCK_DGRAM) && (listen(lSock,1) < 0))
- return -1;
- sv[1] = socket(d,type,protocol); /* get other side */
- if (sv[1] < 0) return -1;
- if (connect(sv[1],&name,sizeof(name)) < 0) /* connect it */
- return -1;
- aLen = sizeof(name);
- if (type == SOCK_DGRAM) sv[0] = lSock; /* get socket */
- else sv[0] = accept(lSock,&name,&aLen);
- if (sv[0] < 0) return -1;
- return 0; /* all correct */
- }
-