d9ce4ecd22b7bc8bcfda7d9f599190b268884800
[tpg/acess2.git] / Usermode / Libraries / libpsocket.so_src / include_exp / sys / socket.h
1 /*
2  * Acess2 POSIX Sockets Emulation
3  * - By John Hodge (thePowersGang)
4  *
5  * sys/sockets.h
6  * - POSIX Sockets
7  */
8 #ifndef _SYS_SOCKETS_H_
9 #define _SYS_SOCKETS_H_
10
11 #include <sys/types.h>
12 #ifndef size_t
13 #include <stddef.h>     // size_t
14 #endif
15 #include <stdint.h>     // uint32_t
16
17 #ifdef __cplusplus
18 extern "C" {
19 #endif
20
21 typedef uint32_t        socklen_t;
22
23 typedef enum
24 {
25         AF_UNSPEC       = 0,
26         AF_PACKET       = 1,
27         AF_LOCAL        = 2,
28         AF_INET         = 4,
29         AF_INET6        = 6,
30 };
31 #define AF_UNIX AF_LOCAL
32 typedef uint8_t sa_family_t;    // I would use an enum, but cast issues
33
34 struct sockaddr
35 {
36         sa_family_t     sa_family;
37         char            sa_data[16+2];
38 };
39
40 struct msghdr
41 {
42         void    *msg_name;
43         socklen_t       msg_namelen;
44         struct iovec    *msg_iov;
45         int     msg_iovlen;
46         void    *msg_control;
47         socklen_t       msg_controllen;
48         int     msg_flags;
49 };
50
51 struct cmsghdr
52 {
53         socklen_t       cmsg_len;
54         int     cmsg_level;
55         int     cmsg_type;
56 };
57
58 #define SCM_RIGHTS      0x1
59
60 #define CMSG_DATA(cmsg) ((unsigned char*)(cmsg + 1))
61 #define CMSG_NXTHDR(mhdr, cmsg) 0
62 #define CMSG_FIRSTHDR(mhdr)     0
63
64 struct linger
65 {
66         int     l_onoff;
67         int     l_linger;
68 };
69
70 enum eSocketTypes
71 {
72         SOCK_STREAM,    //!< Stream (TCP)
73         SOCK_DGRAM,     //!< Datagram (UDP)
74         SOCK_SEQPACKET, //!< 
75         SOCK_RAW,       //!< Raw packet access
76         SOCK_RDM        //!< Reliable non-ordered datagrams
77 };
78
79 /**
80  * \brief Values for \a domain of socket()
81  */
82 enum eSocketDomains
83 {
84         PF_UNSPEC,
85         PF_LOCAL,       //!< Machine-local comms
86         PF_INET,        //!< IPv4
87         PF_INET6,       //!< IPv6
88         PF_PACKET       //!< Low level packet interface
89 };
90 #define PF_UNIX PF_LOCAL
91
92 // getsockopt/setsockopt level
93 enum
94 {
95         SOL_SOCKET
96 };
97
98
99 // SOL_SOCKET getsockopt/setsockopt names
100 enum
101 {
102         SO_REUSEADDR,
103         SO_LINGER,
104         SO_ERROR,
105         SO_KEEPALIVE,
106 };
107
108 // shutdown how
109 enum
110 {
111         SHUT_RD,
112         SHUT_WR,
113         SHUT_RDWR
114 };
115
116 // flags for send*
117 //#define MSG_CONFIRM   0x01
118 #define MSG_DONTROUTE   0x02
119 #define MSG_OOB         0x40
120 // flags for recv
121 #define MSG_PEEK        0x100
122
123 /**
124  * \brief Create a new socket descriptor
125  * \param domain        Address family
126  */
127 extern int      socket(int domain, int type, int protocol);
128
129 /**
130  * 
131  */
132 extern int      shutdown(int socket, int how);
133
134 /**
135  * \brief Bind a socket to an address
136  */
137 extern int      bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
138
139 /**
140  * \brief Connect to another socket
141  */
142 extern int      connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
143
144 /**
145  * \brief Listen for incoming connections
146  */
147 extern int      listen(int sockfd, int backlog);
148
149 #define SOMAXCONN       128     // Maximum size of backlog (actually far higher)
150
151 /**
152  * \brief Accept an incoming connection
153  */
154 extern int      accept(int sockfd, struct sockaddr *clientaddr, socklen_t *addrlen);
155
156 extern int      recvfrom(int sockfd, void *buffer, size_t length, int flags, struct sockaddr *clientaddr, socklen_t *addrlen);
157 extern int      recv(int sockfd, void *buffer, size_t length, int flags);
158 extern int      sendto(int sockfd, const void *buffer, size_t length, int flags, const struct sockaddr *clientaddr, socklen_t addrlen);
159 extern int      send(int sockfd, void *buffer, size_t length, int flags);
160
161 extern int      setsockopt(int socket, int level, int option_name, const void *option_value, socklen_t option_len);
162 extern int      getsockopt(int socket, int level, int option_name, void *option_value, socklen_t *option_len);
163
164 extern int      getsockname(int socket, struct sockaddr *addr, socklen_t *addrlen);
165 extern int      getpeername(int socket, struct sockaddr *addr, socklen_t *addrlen);
166
167 extern struct hostent *gethostbyaddr(const void *addr, socklen_t len, int type);
168 extern void     sethostent(int stayopen);
169 extern void     endhostent(void);
170 extern void     herror(const char *s);
171 extern const char       *hstrerror(int err);
172 extern struct hostent *gethostent(void);
173
174 #ifdef __cplusplus
175 }
176 #endif
177
178 #endif
179

UCC git Repository :: git.ucc.asn.au