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
14 typedef uint32_t socklen_t;
24 #define AF_UNIX AF_LOCAL
28 sa_family_t sa_family;
35 socklen_t msg_namelen;
36 struct iovec *msg_iov;
39 socklen_t msg_controllen;
50 #define SCM_RIGHTS 0x1
52 #define CMSG_DATA(cmsg) ((unsigned char*)(cmsg + 1))
53 #define CMSG_NXTHDR(mhdr, cmsg) 0
54 #define CMSG_FIRSTHDR(mhdr) 0
64 SOCK_STREAM, //!< Stream (TCP)
65 SOCK_DGRAM, //!< Datagram (UDP)
67 SOCK_RAW, //!< Raw packet access
68 SOCK_RDM //!< Reliable non-ordered datagrams
72 * \brief Values for \a domain of socket()
77 PF_LOCAL, //!< Machine-local comms
80 PF_PACKET //!< Low level packet interface
82 #define PF_UNIX PF_LOCAL
84 // getsockopt/setsockopt level
91 // SOL_SOCKET getsockopt/setsockopt names
99 * \brief Create a new socket descriptor
100 * \param domain Address family
102 extern int socket(int domain, int type, int protocol);
105 * \brief Bind a socket to an address
107 extern int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
110 * \brief Connect to another socket
112 extern int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
115 * \brief Listen for incoming connections
117 extern int listen(int sockfd, int backlog);
120 * \brief Accept an incoming connection
122 extern int accept(int sockfd, struct sockaddr *clientaddr, socklen_t addrlen);
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);
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);
132 extern int getsockname(int socket, struct sockaddr *addr, socklen_t *addrlen);
133 extern int getpeername(int socket, struct sockaddr *addr, socklen_t *addrlen);