xref: /plan9/sys/src/ape/lib/bsd/priv.h (revision 219b2ee8daee37f4aad58d63f21287faa8e4ffdc)
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