18c40e734694c9c4417e90933c01c2941938b618
[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 /**
112  * \brief Create a new socket descriptor
113  * \param domain        Address family
114  */
115 extern int      socket(int domain, int type, int protocol);
116
117 /**
118  * 
119  */
120 extern int      shutdown(int socket, int how);
121
122 /**
123  * \brief Bind a socket to an address
124  */
125 extern int      bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
126
127 /**
128  * \brief Connect to another socket
129  */
130 extern int      connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
131
132 /**
133  * \brief Listen for incoming connections
134  */
135 extern int      listen(int sockfd, int backlog);
136
137 /**
138  * \brief Accept an incoming connection
139  */
140 extern int      accept(int sockfd, struct sockaddr *clientaddr, socklen_t *addrlen);
141
142 extern int      recvfrom(int sockfd, void *buffer, size_t length, int flags, struct sockaddr *clientaddr, socklen_t *addrlen);
143 extern int      recv(int sockfd, void *buffer, size_t length, int flags);
144 extern int      sendto(int sockfd, const void *buffer, size_t length, int flags, const struct sockaddr *clientaddr, socklen_t addrlen);
145 extern int      send(int sockfd, void *buffer, size_t length, int flags);
146
147 extern int      setsockopt(int socket, int level, int option_name, const void *option_value, socklen_t option_len);
148 extern int      getsockopt(int socket, int level, int option_name, void *option_value, socklen_t *option_len);
149
150 extern int      getsockname(int socket, struct sockaddr *addr, socklen_t *addrlen);
151 extern int      getpeername(int socket, struct sockaddr *addr, socklen_t *addrlen);
152
153 extern struct hostent *gethostbyaddr(const void *addr, socklen_t len, int type);
154 extern void     sethostent(int stayopen);
155 extern void     endhostent(void);
156 extern void     herror(const char *s);
157 extern const char       *hstrerror(int err);
158 extern struct hostent *gethostent(void);
159
160 #endif
161

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