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

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