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>
13 #include <stddef.h> // size_t
15 #include <stdint.h> // uint32_t
17 typedef uint32_t socklen_t;
27 #define AF_UNIX AF_LOCAL
31 sa_family_t sa_family;
38 socklen_t msg_namelen;
39 struct iovec *msg_iov;
42 socklen_t msg_controllen;
53 #define SCM_RIGHTS 0x1
55 #define CMSG_DATA(cmsg) ((unsigned char*)(cmsg + 1))
56 #define CMSG_NXTHDR(mhdr, cmsg) 0
57 #define CMSG_FIRSTHDR(mhdr) 0
67 SOCK_STREAM, //!< Stream (TCP)
68 SOCK_DGRAM, //!< Datagram (UDP)
70 SOCK_RAW, //!< Raw packet access
71 SOCK_RDM //!< Reliable non-ordered datagrams
75 * \brief Values for \a domain of socket()
80 PF_LOCAL, //!< Machine-local comms
83 PF_PACKET //!< Low level packet interface
85 #define PF_UNIX PF_LOCAL
87 // getsockopt/setsockopt level
94 // SOL_SOCKET getsockopt/setsockopt names
111 * \brief Create a new socket descriptor
112 * \param domain Address family
114 extern int socket(int domain, int type, int protocol);
119 extern int shutdown(int socket, int how);
122 * \brief Bind a socket to an address
124 extern int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
127 * \brief Connect to another socket
129 extern int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
132 * \brief Listen for incoming connections
134 extern int listen(int sockfd, int backlog);
137 * \brief Accept an incoming connection
139 extern int accept(int sockfd, struct sockaddr *clientaddr, socklen_t *addrlen);
141 extern int recvfrom(int sockfd, void *buffer, size_t length, int flags, struct sockaddr *clientaddr, socklen_t *addrlen);
142 extern int recv(int sockfd, void *buffer, size_t length, int flags);
143 extern int sendto(int sockfd, const void *buffer, size_t length, int flags, const struct sockaddr *clientaddr, socklen_t addrlen);
144 extern int send(int sockfd, void *buffer, size_t length, int flags);
146 extern int setsockopt(int socket, int level, int option_name, const void *option_value, socklen_t option_len);
147 extern int getsockopt(int socket, int level, int option_name, void *option_value, socklen_t *option_len);
149 extern int getsockname(int socket, struct sockaddr *addr, socklen_t *addrlen);
150 extern int getpeername(int socket, struct sockaddr *addr, socklen_t *addrlen);
152 extern struct hostent *gethostbyaddr(const void *addr, socklen_t len, int type);
153 extern void sethostent(int stayopen);
154 extern void endhostent(void);
155 extern void herror(const char *s);
156 extern const char *hstrerror(int err);
157 extern struct hostent *gethostent(void);