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

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