Usermode/libpsocket - Add MSG_* values for send/recv
[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+2];
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         SO_KEEPALIVE,
101 };
102
103 // shutdown how
104 enum
105 {
106         SHUT_RD,
107         SHUT_WR,
108         SHUT_RDWR
109 };
110
111 // flags for send*
112 //#define MSG_CONFIRM   0x01
113 #define MSG_DONTROUTE   0x02
114 #define MSG_OOB         0x40
115 // flags for recv
116 #define MSG_PEEK        0x100
117
118 /**
119  * \brief Create a new socket descriptor
120  * \param domain        Address family
121  */
122 extern int      socket(int domain, int type, int protocol);
123
124 /**
125  * 
126  */
127 extern int      shutdown(int socket, int how);
128
129 /**
130  * \brief Bind a socket to an address
131  */
132 extern int      bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
133
134 /**
135  * \brief Connect to another socket
136  */
137 extern int      connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
138
139 /**
140  * \brief Listen for incoming connections
141  */
142 extern int      listen(int sockfd, int backlog);
143
144 /**
145  * \brief Accept an incoming connection
146  */
147 extern int      accept(int sockfd, struct sockaddr *clientaddr, socklen_t *addrlen);
148
149 extern int      recvfrom(int sockfd, void *buffer, size_t length, int flags, struct sockaddr *clientaddr, socklen_t *addrlen);
150 extern int      recv(int sockfd, void *buffer, size_t length, int flags);
151 extern int      sendto(int sockfd, const void *buffer, size_t length, int flags, const struct sockaddr *clientaddr, socklen_t addrlen);
152 extern int      send(int sockfd, void *buffer, size_t length, int flags);
153
154 extern int      setsockopt(int socket, int level, int option_name, const void *option_value, socklen_t option_len);
155 extern int      getsockopt(int socket, int level, int option_name, void *option_value, socklen_t *option_len);
156
157 extern int      getsockname(int socket, struct sockaddr *addr, socklen_t *addrlen);
158 extern int      getpeername(int socket, struct sockaddr *addr, socklen_t *addrlen);
159
160 extern struct hostent *gethostbyaddr(const void *addr, socklen_t len, int type);
161 extern void     sethostent(int stayopen);
162 extern void     endhostent(void);
163 extern void     herror(const char *s);
164 extern const char       *hstrerror(int err);
165 extern struct hostent *gethostent(void);
166
167 #endif
168

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