X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Usermode%2FLibraries%2Flibpsocket.so_src%2Finclude_exp%2Fsys%2Fsocket.h;h=deb1f51e7e3de3f63fc43c9faa5a2f7e9ccc9bc0;hb=cee190b0244cf8c1389f82237f0c1457eb2c0e7f;hp=d53b94aad0e75b5db83dcb7417ca72991a757713;hpb=6516331968f11dd9e5c495572f27cc69fa3d4c48;p=tpg%2Facess2.git diff --git a/Usermode/Libraries/libpsocket.so_src/include_exp/sys/socket.h b/Usermode/Libraries/libpsocket.so_src/include_exp/sys/socket.h index d53b94aa..deb1f51e 100644 --- a/Usermode/Libraries/libpsocket.so_src/include_exp/sys/socket.h +++ b/Usermode/Libraries/libpsocket.so_src/include_exp/sys/socket.h @@ -1,31 +1,74 @@ /* - * Acess2 C Library + * Acess2 POSIX Sockets Emulation + * - By John Hodge (thePowersGang) * * sys/sockets.h * - POSIX Sockets - * - * By John Hodge (thePowersGang) */ #ifndef _SYS_SOCKETS_H_ #define _SYS_SOCKETS_H_ #include +#ifndef size_t #include // size_t +#endif +#include // uint32_t -typedef int socklen_t; +typedef uint32_t socklen_t; typedef enum { AF_UNSPEC = 0, AF_PACKET = 1, + AF_LOCAL = 2, AF_INET = 4, AF_INET6 = 6, } sa_family_t; +#define AF_UNIX AF_LOCAL struct sockaddr { sa_family_t sa_family; - char sa_data[16]; + char sa_data[16+2]; +}; + +struct msghdr +{ + void *msg_name; + socklen_t msg_namelen; + struct iovec *msg_iov; + int msg_iovlen; + void *msg_control; + socklen_t msg_controllen; + int msg_flags; +}; + +struct cmsghdr +{ + socklen_t cmsg_len; + int cmsg_level; + int cmsg_type; +}; + +#define SCM_RIGHTS 0x1 + +#define CMSG_DATA(cmsg) ((unsigned char*)(cmsg + 1)) +#define CMSG_NXTHDR(mhdr, cmsg) 0 +#define CMSG_FIRSTHDR(mhdr) 0 + +struct linger +{ + int l_onoff; + int l_linger; +}; + +enum eSocketTypes +{ + SOCK_STREAM, //!< Stream (TCP) + SOCK_DGRAM, //!< Datagram (UDP) + SOCK_SEQPACKET, //!< + SOCK_RAW, //!< Raw packet access + SOCK_RDM //!< Reliable non-ordered datagrams }; /** @@ -33,6 +76,7 @@ struct sockaddr */ enum eSocketDomains { + PF_UNSPEC, PF_LOCAL, //!< Machine-local comms PF_INET, //!< IPv4 PF_INET6, //!< IPv6 @@ -40,21 +84,48 @@ enum eSocketDomains }; #define PF_UNIX PF_LOCAL -enum eSocketTypes +// getsockopt/setsockopt level +enum { - SOCK_STREAM, //!< Stream (TCP) - SOCK_DGRAM, //!< Datagram (UDP) - SOCK_SEQPACKET, //!< - SOCK_RAW, //!< Raw packet access - SOCK_RDM //!< Reliable non-ordered datagrams + SOL_SOCKET +}; + + +// SOL_SOCKET getsockopt/setsockopt names +enum +{ + SO_REUSEADDR, + SO_LINGER, + SO_ERROR, + SO_KEEPALIVE, }; +// shutdown how +enum +{ + SHUT_RD, + SHUT_WR, + SHUT_RDWR +}; + +// flags for send* +//#define MSG_CONFIRM 0x01 +#define MSG_DONTROUTE 0x02 +#define MSG_OOB 0x40 +// flags for recv +#define MSG_PEEK 0x100 + /** * \brief Create a new socket descriptor * \param domain Address family */ extern int socket(int domain, int type, int protocol); +/** + * + */ +extern int shutdown(int socket, int how); + /** * \brief Bind a socket to an address */ @@ -73,12 +144,25 @@ extern int listen(int sockfd, int backlog); /** * \brief Accept an incoming connection */ -extern int accept(int sockfd, struct sockaddr *clientaddr, socklen_t addrlen); +extern int accept(int sockfd, struct sockaddr *clientaddr, socklen_t *addrlen); extern int recvfrom(int sockfd, void *buffer, size_t length, int flags, struct sockaddr *clientaddr, socklen_t *addrlen); extern int recv(int sockfd, void *buffer, size_t length, int flags); extern int sendto(int sockfd, const void *buffer, size_t length, int flags, const struct sockaddr *clientaddr, socklen_t addrlen); extern int send(int sockfd, void *buffer, size_t length, int flags); +extern int setsockopt(int socket, int level, int option_name, const void *option_value, socklen_t option_len); +extern int getsockopt(int socket, int level, int option_name, void *option_value, socklen_t *option_len); + +extern int getsockname(int socket, struct sockaddr *addr, socklen_t *addrlen); +extern int getpeername(int socket, struct sockaddr *addr, socklen_t *addrlen); + +extern struct hostent *gethostbyaddr(const void *addr, socklen_t len, int type); +extern void sethostent(int stayopen); +extern void endhostent(void); +extern void herror(const char *s); +extern const char *hstrerror(int err); +extern struct hostent *gethostent(void); + #endif