2 * Acess2 POSIX Sockets Emulation
3 * - By John Hodge (thePowersGang)
8 #ifndef _SYS_SOCKETS_H_
9 #define _SYS_SOCKETS_H_
11 #include <sys/types.h>
12 #include <stddef.h> // size_t
13 #include <stdint.h> // uint32_t
15 typedef uint32_t socklen_t;
25 #define AF_UNIX AF_LOCAL
29 sa_family_t sa_family;
36 socklen_t msg_namelen;
37 struct iovec *msg_iov;
40 socklen_t msg_controllen;
51 #define SCM_RIGHTS 0x1
53 #define CMSG_DATA(cmsg) ((unsigned char*)(cmsg + 1))
54 #define CMSG_NXTHDR(mhdr, cmsg) 0
55 #define CMSG_FIRSTHDR(mhdr) 0
65 SOCK_STREAM, //!< Stream (TCP)
66 SOCK_DGRAM, //!< Datagram (UDP)
68 SOCK_RAW, //!< Raw packet access
69 SOCK_RDM //!< Reliable non-ordered datagrams
73 * \brief Values for \a domain of socket()
78 PF_LOCAL, //!< Machine-local comms
81 PF_PACKET //!< Low level packet interface
83 #define PF_UNIX PF_LOCAL
85 // getsockopt/setsockopt level
92 // SOL_SOCKET getsockopt/setsockopt names
100 * \brief Create a new socket descriptor
101 * \param domain Address family
103 extern int socket(int domain, int type, int protocol);
106 * \brief Bind a socket to an address
108 extern int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
111 * \brief Connect to another socket
113 extern int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
116 * \brief Listen for incoming connections
118 extern int listen(int sockfd, int backlog);
121 * \brief Accept an incoming connection
123 extern int accept(int sockfd, struct sockaddr *clientaddr, socklen_t addrlen);
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);
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);
133 extern int getsockname(int socket, struct sockaddr *addr, socklen_t *addrlen);
134 extern int getpeername(int socket, struct sockaddr *addr, socklen_t *addrlen);