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
112 * \brief Create a new socket descriptor
113 * \param domain Address family
115 extern int socket(int domain, int type, int protocol);
120 extern int shutdown(int socket, int how);
123 * \brief Bind a socket to an address
125 extern int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
128 * \brief Connect to another socket
130 extern int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
133 * \brief Listen for incoming connections
135 extern int listen(int sockfd, int backlog);
138 * \brief Accept an incoming connection
140 extern int accept(int sockfd, struct sockaddr *clientaddr, socklen_t *addrlen);
142 extern int recvfrom(int sockfd, void *buffer, size_t length, int flags, struct sockaddr *clientaddr, socklen_t *addrlen);
143 extern int recv(int sockfd, void *buffer, size_t length, int flags);
144 extern int sendto(int sockfd, const void *buffer, size_t length, int flags, const struct sockaddr *clientaddr, socklen_t addrlen);
145 extern int send(int sockfd, void *buffer, size_t length, int flags);
147 extern int setsockopt(int socket, int level, int option_name, const void *option_value, socklen_t option_len);
148 extern int getsockopt(int socket, int level, int option_name, void *option_value, socklen_t *option_len);
150 extern int getsockname(int socket, struct sockaddr *addr, socklen_t *addrlen);
151 extern int getpeername(int socket, struct sockaddr *addr, socklen_t *addrlen);
153 extern struct hostent *gethostbyaddr(const void *addr, socklen_t len, int type);
154 extern void sethostent(int stayopen);
155 extern void endhostent(void);
156 extern void herror(const char *s);
157 extern const char *hstrerror(int err);
158 extern struct hostent *gethostent(void);