1 #ifndef _KERN_SOCK_H
2 #define _KERN_SOCK_H
3
4 #define NSOCKETS 128
5
6 typedef enum {
7 SS_FREE = 0,
8 SS_UNCONNECTED,
9 SS_CONNECTING,
10 SS_CONNECTED,
11 SS_DISCONNECTING,
12 } socket_state;
13
14 #define SO_ACCEPTCON (1<<16)
15
16
17
18
19
20
21
22
23
24
25
26
27 struct socket {
28 short type;
29 socket_state state;
30 long flags;
31 struct proto_ops *ops;
32 char *data;
33 struct socket *conn;
34 struct socket *iconn;
35 struct socket *next;
36 struct wait_queue **wait;
37 void *dummy;
38 };
39
40 struct proto_ops {
41 int (*init)(void);
42 int (*create)(struct socket *sock, int protocol);
43 int (*dup)(struct socket *newsock, struct socket *oldsock);
44 int (*release)(struct socket *sock, struct socket *peer);
45 int (*bind)(struct socket *sock, struct sockaddr *umyaddr,
46 int sockaddr_len);
47 int (*connect)(struct socket *sock, struct sockaddr *uservaddr,
48 int sockaddr_len);
49 int (*socketpair)(struct socket *sock1, struct socket *sock2);
50 int (*accept)(struct socket *sock, struct socket *newsock);
51 int (*getname)(struct socket *sock, struct sockaddr *uaddr,
52 int *usockaddr_len, int peer);
53 int (*read)(struct socket *sock, char *ubuf, int size, int nonblock);
54 int (*write)(struct socket *sock, char *ubuf, int size, int nonblock);
55 int (*select)(struct socket *sock, int sel_type, select_table * wait);
56 int (*ioctl)(struct socket *sock, unsigned int cmd, unsigned long arg);
57 };
58
59 extern int sock_awaitconn(struct socket *mysock, struct socket *servsock);
60
61 #ifdef SOCK_DEBUG
62 #define PRINTK printk
63 #else
64 #define PRINTK (void)
65 #endif
66
67 #endif