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