Commit | Line | Data |
---|---|---|
af0b24db | 1 | /* unpcb.h 5.3 82/11/13 */ |
bb5bdada BJ |
2 | |
3 | /* | |
4 | * Protocol control block for an active | |
5 | * instance of a UNIX internal protocol. | |
6 | * | |
7 | * A socket may be associated with an inode in the | |
8 | * file system. If so, the unp_inode pointer holds | |
9 | * a reference count to this inode, which should be irele'd | |
10 | * when the socket goes away. | |
11 | * | |
12 | * A socket may be connected to another socket, in which | |
13 | * case the control block of the socket to which it is connected | |
14 | * is given by unp_conn. | |
15 | * | |
16 | * A socket may be referenced by a number of sockets (e.g. several | |
17 | * sockets may be connected to a datagram socket.) These sockets | |
18 | * are in a linked list starting with unp_refs, linked through | |
19 | * unp_nextref and null-terminated. Note that a socket may be referenced | |
20 | * by a number of other sockets and may also reference a socket (not | |
21 | * necessarily one which is referencing it). This generates | |
22 | * the need for unp_refs and unp_nextref to be separate fields. | |
23 | */ | |
24 | struct unpcb { | |
25 | struct socket *unp_socket; /* pointer back to socket */ | |
26 | struct inode *unp_inode; /* if associated with file */ | |
27 | struct unpcb *unp_conn; /* control block of connected socket */ | |
28 | struct unpcb *unp_refs; /* referencing socket linked list */ | |
29 | struct unpcb *unp_nextref; /* link in unp_refs list */ | |
af0b24db | 30 | struct mbuf *unp_remaddr; /* address of connected socket */ |
bb5bdada | 31 | }; |
454b3b2b BJ |
32 | |
33 | #define sotounpcb(so) ((struct unpcb *)((so)->so_pcb)) |