summaryrefslogtreecommitdiff
path: root/mit-pthreads/machdep/linux-1.0/socket.h
blob: cc4c0fd262e3c7b88801bd7e6f8a7b6afe2603dd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
/* ==== socket.h.h ============================================================
 * Copyright (c) 1994 by Chris Provenzano, proven@athena.mit.edu	
 *
 * Description : Correct Linux header file.
 */

#ifndef _PTHREAD_SOCKET_H_
#define _PTHREAD_SOCKET_H_

/* #include <linux/socket.h> */
#ifndef _LINUX_SOCKET_H
#define _LINUX_SOCKET_H

/* IP options */
#define IP_TOS				1
#define	IPTOS_LOWDELAY		0x10
#define	IPTOS_THROUGHPUT	0x08
#define	IPTOS_RELIABILITY	0x04
#define IP_TTL				2
#ifndef IP_HDRINCL
#define IP_HDRINCL			3
#endif
#ifdef V1_3_WILL_DO_THIS_FUNKY_STUFF
#define IP_OPTIONS			4
#endif

#endif

/* #include <asm/socket.h>				arch-dependent defines	*/
#include <linux/sockios.h>			/* the SIOCxxx I/O controls	*/
#include <pthread/posix.h>

struct sockaddr {
  	unsigned short	sa_family;		/* address family, AF_xxx	*/
  	char			sa_data[14];	/* 14 bytes of protocol address	*/
};

struct linger {
  	int 			l_onoff;		/* Linger active		*/
  	int				l_linger;		/* How long to linger for	*/
};

struct msghdr 
{
	void	*		msg_name;		/* Socket name			*/
	int				msg_namelen;	/* Length of name		*/
	struct iovec *	msg_iov;		/* Data blocks			*/
	int 			msg_iovlen;		/* Number of blocks		*/
	void 	*		msg_accrights;	/* Per protocol magic (eg BSD file descriptor passing) */
	int				msg_accrightslen;/* Length of rights list */
};

/* Socket types. */
#define SOCK_STREAM	1				/* stream (connection) socket	*/
#define SOCK_DGRAM	2				/* datagram (conn.less) socket	*/
#define SOCK_RAW	3				/* raw socket			*/
#define SOCK_RDM	4				/* reliably-delivered message	*/
#define SOCK_SEQPACKET	5			/* sequential packet socket	*/
#define SOCK_PACKET	10				/* linux specific way of	*/
									/* getting packets at the dev	*/
									/* level.  For writing rarp and	*/
									/* other similar things on the	*/
									/* user level.			*/

/* Supported address families. */
#define AF_UNSPEC	0
#define AF_UNIX		1				/* Unix domain sockets 		*/
#define AF_INET		2				/* Internet IP Protocol 	*/
#define AF_AX25		3				/* Amateur Radio AX.25 		*/
#define AF_IPX		4				/* Novell IPX 			*/
#define AF_APPLETALK 5				/* Appletalk DDP 		*/
#define	AF_NETROM	6				/* Amateur radio NetROM 	*/
#define AF_BRIDGE	7				/* Multiprotocol bridge 	*/
#define AF_AAL5		8				/* Reserved for Werner's ATM 	*/
#define AF_X25		9				/* Reserved for X.25 project 	*/
#define AF_INET6	10				/* IP version 6			*/
#define AF_MAX		12				/* For now.. */

/* Protocol families, same as address families. */
#define PF_UNSPEC	AF_UNSPEC
#define PF_UNIX		AF_UNIX
#define PF_INET		AF_INET
#define PF_AX25		AF_AX25
#define PF_IPX		AF_IPX
#define PF_APPLETALK AF_APPLETALK
#define	PF_NETROM	AF_NETROM
#define PF_BRIDGE	AF_BRIDGE
#define PF_AAL5		AF_AAL5
#define PF_X25		AF_X25
#define PF_INET6	AF_INET6

#define PF_MAX		AF_MAX

/* Maximum queue length specificable by listen.  */
#define SOMAXCONN	128

/* Flags we can use with send/ and recv. */
#define MSG_OOB		1
#define MSG_PEEK	2
#define MSG_DONTROUTE	4

/* Setsockoptions(2) level. Thanks to BSD these must match IPPROTO_xxx */
#define SOL_SOCKET	1
#define SOL_IP		0
#define SOL_IPX		256
#define SOL_AX25	257
#define SOL_ATALK	258
#define	SOL_NETROM	259
#define SOL_TCP		6
#define SOL_UDP		17

/* For setsockoptions(2) */
#define SO_DEBUG	1
#define SO_REUSEADDR	2
#define SO_TYPE		3
#define SO_ERROR	4
#define SO_DONTROUTE	5
#define SO_BROADCAST	6
#define SO_SNDBUF	7
#define SO_RCVBUF	8
#define SO_KEEPALIVE	9
#define SO_OOBINLINE	10
#define SO_NO_CHECK	11
#define SO_PRIORITY	12
#define SO_LINGER	13
/* To add :#define SO_REUSEPORT 14 */


#define IP_MULTICAST_IF			32
#define IP_MULTICAST_TTL 		33
#define IP_MULTICAST_LOOP 		34
#define IP_ADD_MEMBERSHIP		35
#define IP_DROP_MEMBERSHIP		36


/* These need to appear somewhere around here */
#define IP_DEFAULT_MULTICAST_TTL        1
#define IP_DEFAULT_MULTICAST_LOOP       1
#define IP_MAX_MEMBERSHIPS              20
 
/* IPX options */
#define IPX_TYPE	1

/* TCP options - this way around because someone left a set in the c library includes */
#define TCP_NODELAY	1
#define TCP_MAXSEG	2

/* The various priorities. */
#define SOPRI_INTERACTIVE	0
#define SOPRI_NORMAL		1
#define SOPRI_BACKGROUND	2

/* 
 * Functions
 */

__BEGIN_DECLS

int			accept			__P_((int, struct sockaddr *, int *));
int			bind			__P_((int, const struct sockaddr *, int));
int			connect			__P_((int, const struct sockaddr *, int));
int			listen			__P_((int, int));
int			socket			__P_((int, int, int));

int getsockopt __P_((int __s, int __level, int __optname,
                void *__optval, int *__optlen));
int setsockopt __P_((int __s, int __level, int __optname,
                __const void *__optval, int optlen));
int getsockname __P_((int __sockfd, struct sockaddr *__addr,
                int *__paddrlen));
int getpeername __P_((int __sockfd, struct sockaddr *__peer,
                int *__paddrlen));
ssize_t send __P_((int __sockfd, __const void *__buff, size_t __len, int __flags));
ssize_t recv __P_((int __sockfd, void *__buff, size_t __len, int __flags));
ssize_t sendto __P_((int __sockfd, __const void *__buff, size_t __len,
                 int __flags, __const struct sockaddr *__to,
                 int __tolen));
ssize_t recvfrom __P_((int __sockfd, void *__buff, size_t __len,
                 int __flags, struct sockaddr *__from,
                 int *__fromlen));
extern ssize_t sendmsg __P_((int __fd, __const struct msghdr *__message,
                        int __flags));
extern ssize_t recvmsg __P_((int __fd, struct msghdr *__message,
                        int __flags));
int shutdown __P_((int __sockfd, int __how));

__END_DECLS

#endif