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