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

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