1 typedef struct Rock Rock; 2 3 enum 4 { 5 Ctlsize= 128, 6 7 /* states */ 8 Sopen= 0, 9 Sbound, 10 Sconnected, 11 12 /* types of name */ 13 Tsys= 0, 14 Tip, 15 Tdom, 16 }; 17 18 /* 19 * since BSD programs expect to perform both control and data functions 20 * through a single fd, we need to hide enough info under a rock to 21 * be able to open the control file when we need it. 22 */ 23 struct Rock 24 { 25 Rock *next; 26 unsigned long dev; /* inode & dev of data file */ 27 unsigned long inode; /* ... */ 28 int domain; /* from socket call */ 29 int stype; /* ... */ 30 int protocol; /* ... */ 31 struct sockaddr addr; /* address from bind */ 32 int reserved; /* use a priveledged port # (< 1024) */ 33 struct sockaddr raddr; /* peer address */ 34 char ctl[Ctlsize]; /* name of control file (if any) */ 35 int other; /* fd of the remote end for Unix domain */ 36 }; 37 38 extern Rock* _sock_findrock(int, struct stat*); 39 extern Rock* _sock_newrock(int); 40 extern void _sock_srvname(char*, char*); 41 extern int _sock_srv(char*, int); 42 extern int _sock_data(int, char*, int, int, int, Rock**); 43 extern int _sock_ipattr(char*); 44 extern void _sock_ingetaddr(Rock*, struct sockaddr_in*, int*, char*); 45 46 extern void _syserrno(void); 47