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;
26 sa_family_t sa_family;
33 socklen_t msg_namelen;
34 struct iovec *msg_iov;
37 socklen_t msg_controllen;
48 #define SCM_RIGHTS 0x1
50 #define CMSG_DATA(cmsg) ((unsigned char*)(cmsg + 1))
51 #define CMSG_NXTHDR(mhdr, cmsg) 0
52 #define CMSG_FIRSTHDR(mhdr) 0
62 SOCK_STREAM, //!< Stream (TCP)
63 SOCK_DGRAM, //!< Datagram (UDP)
65 SOCK_RAW, //!< Raw packet access
66 SOCK_RDM //!< Reliable non-ordered datagrams
70 * \brief Values for \a domain of socket()
74 PF_LOCAL, //!< Machine-local comms
77 PF_PACKET //!< Low level packet interface
79 #define PF_UNIX PF_LOCAL
82 * \brief Create a new socket descriptor
83 * \param domain Address family
85 extern int socket(int domain, int type, int protocol);
88 * \brief Bind a socket to an address
90 extern int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
93 * \brief Connect to another socket
95 extern int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
98 * \brief Listen for incoming connections
100 extern int listen(int sockfd, int backlog);
103 * \brief Accept an incoming connection
105 extern int accept(int sockfd, struct sockaddr *clientaddr, socklen_t addrlen);
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);
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);