Merge branch 'master' of github.com:thepowersgang/acess2
[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 typedef uint32_t        socklen_t;
18
19 typedef enum
20 {
21         AF_UNSPEC       = 0,
22         AF_PACKET       = 1,
23         AF_LOCAL        = 2,
24         AF_INET         = 4,
25         AF_INET6        = 6,
26 } sa_family_t;
27 #define AF_UNIX AF_LOCAL
28
29 struct sockaddr
30 {
31         sa_family_t     sa_family;
32         char            sa_data[16];
33 };
34
35 struct msghdr
36 {
37         void    *msg_name;
38         socklen_t       msg_namelen;
39         struct iovec    *msg_iov;
40         int     msg_iovlen;
41         void    *msg_control;
42         socklen_t       msg_controllen;
43         int     msg_flags;
44 };
45
46 struct cmsghdr
47 {
48         socklen_t       cmsg_len;
49         int     cmsg_level;
50         int     cmsg_type;
51 };
52
53 #define SCM_RIGHTS      0x1
54
55 #define CMSG_DATA(cmsg) ((unsigned char*)(cmsg + 1))
56 #define CMSG_NXTHDR(mhdr, cmsg) 0
57 #define CMSG_FIRSTHDR(mhdr)     0
58
59 struct linger
60 {
61         int     l_onoff;
62         int     l_linger;
63 };
64
65 enum eSocketTypes
66 {
67         SOCK_STREAM,    //!< Stream (TCP)
68         SOCK_DGRAM,     //!< Datagram (UDP)
69         SOCK_SEQPACKET, //!< 
70         SOCK_RAW,       //!< Raw packet access
71         SOCK_RDM        //!< Reliable non-ordered datagrams
72 };
73
74 /**
75  * \brief Values for \a domain of socket()
76  */
77 enum eSocketDomains
78 {
79         PF_UNSPEC,
80         PF_LOCAL,       //!< Machine-local comms
81         PF_INET,        //!< IPv4
82         PF_INET6,       //!< IPv6
83         PF_PACKET       //!< Low level packet interface
84 };
85 #define PF_UNIX PF_LOCAL
86
87 // getsockopt/setsockopt level
88 enum
89 {
90         SOL_SOCKET
91 };
92
93
94 // SOL_SOCKET getsockopt/setsockopt names
95 enum
96 {
97         SO_REUSEADDR,
98         SO_LINGER,
99         SO_ERROR
100 };
101
102 // shutdown how
103 enum
104 {
105         SHUT_RD,
106         SHUT_WR,
107         SHUT_RDWR
108 };
109
110 /**
111  * \brief Create a new socket descriptor
112  * \param domain        Address family
113  */
114 extern int      socket(int domain, int type, int protocol);
115
116 /**
117  * 
118  */
119 extern int      shutdown(int socket, int how);
120
121 /**
122  * \brief Bind a socket to an address
123  */
124 extern int      bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
125
126 /**
127  * \brief Connect to another socket
128  */
129 extern int      connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
130
131 /**
132  * \brief Listen for incoming connections
133  */
134 extern int      listen(int sockfd, int backlog);
135
136 /**
137  * \brief Accept an incoming connection
138  */
139 extern int      accept(int sockfd, struct sockaddr *clientaddr, socklen_t addrlen);
140
141 extern int      recvfrom(int sockfd, void *buffer, size_t length, int flags, struct sockaddr *clientaddr, socklen_t *addrlen);
142 extern int      recv(int sockfd, void *buffer, size_t length, int flags);
143 extern int      sendto(int sockfd, const void *buffer, size_t length, int flags, const struct sockaddr *clientaddr, socklen_t addrlen);
144 extern int      send(int sockfd, void *buffer, size_t length, int flags);
145
146 extern int      setsockopt(int socket, int level, int option_name, const void *option_value, socklen_t option_len);
147 extern int      getsockopt(int socket, int level, int option_name, void *option_value, socklen_t *option_len);
148
149 extern int      getsockname(int socket, struct sockaddr *addr, socklen_t *addrlen);
150 extern int      getpeername(int socket, struct sockaddr *addr, socklen_t *addrlen);
151
152 extern struct hostent *gethostbyaddr(const void *addr, socklen_t len, int type);
153 extern void     sethostent(int stayopen);
154 extern void     endhostent(void);
155 extern void     herror(const char *s);
156 extern const char       *hstrerror(int err);
157 extern struct hostent *gethostent(void);
158
159 #endif
160

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