|
|
1.1 root 1: #ifndef _KERN_SOCK_H
2: #define _KERN_SOCK_H
1.1.1.3 ! root 3: #undef SOCK_DEBUG
1.1 root 4: #define NSOCKETS 128 /* should be dynamic, later... */
5:
6: typedef enum {
7: SS_FREE = 0, /* not allocated */
8: SS_UNCONNECTED, /* unconnected to any socket */
9: SS_CONNECTING, /* in process of connecting */
10: SS_CONNECTED, /* connected to socket */
11: SS_DISCONNECTING, /* in process of disconnecting */
12: } socket_state;
13:
14: #define SO_ACCEPTCON (1<<16) /* performed a listen */
15:
16: /*
17: * internel representation of a socket. not all the fields are used by
18: * all configurations:
19: *
20: * server client
21: * conn client connected to server connected to
22: * iconn list of clients -unused-
23: * awaiting connections
24: * wait sleep for clients, sleep for connection,
25: * sleep for i/o sleep for i/o
26: */
27: struct socket {
28: short type; /* SOCK_STREAM, ... */
29: socket_state state;
30: long flags;
31: struct proto_ops *ops; /* protocols do most everything */
1.1.1.3 ! root 32: void *data; /* protocol data */
1.1 root 33: struct socket *conn; /* server socket connected to */
34: struct socket *iconn; /* incomplete client connections */
35: struct socket *next;
1.1.1.2 root 36: struct wait_queue **wait; /* ptr to place to wait on */
1.1 root 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,
1.1.1.3 ! root 48: int sockaddr_len, int flags);
1.1 root 49: int (*socketpair)(struct socket *sock1, struct socket *sock2);
1.1.1.3 ! root 50: int (*accept)(struct socket *sock, struct socket *newsock, int flags);
1.1 root 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);
1.1.1.2 root 55: int (*select)(struct socket *sock, int sel_type, select_table * wait);
1.1 root 56: int (*ioctl)(struct socket *sock, unsigned int cmd, unsigned long arg);
1.1.1.3 ! root 57: int (*listen)(struct socket *sock, int len);
! 58: int (*send)(struct socket *sock, void *buff, int len, int nonblock,
! 59: unsigned flags);
! 60: int (*recv)(struct socket *sock, void *buff, int len, int nonblock,
! 61: unsigned flags);
! 62: int (*sendto)(struct socket *sock, void *buff, int len, int nonblock,
! 63: unsigned flags, struct sockaddr *, int addr_len);
! 64: int (*recvfrom)(struct socket *sock, void *buff, int len, int nonblock,
! 65: unsigned flags, struct sockaddr *, int *addr_len);
! 66: int (*shutdown)(struct socket *sock, int flags);
! 67: int (*setsockopt)(struct socket *sock, int level, int optname,
! 68: char *optval, int optlen);
! 69: int (*getsockopt)(struct socket *sock, int level, int optname,
! 70: char *optval, int *optlen);
! 71: int (*fcntl) (struct socket *sock, unsigned int cmd,
! 72: unsigned long arg);
1.1 root 73: };
74:
75: extern int sock_awaitconn(struct socket *mysock, struct socket *servsock);
76:
77: #ifdef SOCK_DEBUG
78: #define PRINTK printk
79: #else
80: #define PRINTK (void)
81: #endif
82:
83: #endif /* _KERN_SOCK_H */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.