#ifndef SYS_SOCKET_H #define SYS_SOCKET_H #include /* * Level number for (get/set)sockopt() to apply to socket itself. */ #define SOL_SOCKET 0xfff /* options for socket level */ # define SOL_TCP 6 /* TCP level */ #define PF_UNSPEC 0 #define PF_INET 2 #define PF_INET6 10 #define AF_UNSPEC PF_UNSPEC #define AF_INET PF_INET #define AF_INET6 PF_INET6 #define SOCK_STREAM 1 #define SOCK_DGRAM 2 // need to sync FIO* values with commonly accepted ones sometime #define FIONBIO 1 #define FIONREAD 2 #define SOCKET_ERROR -1 // send()/recv()/etc flags // at present, only MSG_PEEK is implemented though. #define MSG_WAITALL 0x40000000 #define MSG_TRUNC 0x20000000 #define MSG_PEEK 0x10000000 #define MSG_OOB 0x08000000 #define MSG_EOR 0x04000000 #define MSG_DONTROUTE 0x02000000 #define MSG_CTRUNC 0x01000000 // shutdown() flags: #define SHUT_RD 1 #define SHUT_WR 2 #define SHUT_RDWR 3 /* * Option flags per-socket. */ #define SO_DEBUG 0x0001 /* turn on debugging info recording */ #define SO_ACCEPTCONN 0x0002 /* socket has had listen() */ #define SO_REUSEADDR 0x0004 /* allow local address reuse */ #define SO_KEEPALIVE 0x0008 /* keep connections alive */ #define SO_DONTROUTE 0x0010 /* just use interface addresses */ #define SO_BROADCAST 0x0020 /* permit sending of broadcast msgs */ #define SO_USELOOPBACK 0x0040 /* bypass hardware when possible */ #define SO_LINGER 0x0080 /* linger on close if data present */ #define SO_OOBINLINE 0x0100 /* leave received OOB data in line */ #define SO_REUSEPORT 0x0200 /* allow local address & port reuse */ #define SO_DONTLINGER (int)(~SO_LINGER) /* * Additional options, not kept in so_options. */ #define SO_SNDBUF 0x1001 /* send buffer size */ #define SO_RCVBUF 0x1002 /* receive buffer size */ #define SO_SNDLOWAT 0x1003 /* send low-water mark */ #define SO_RCVLOWAT 0x1004 /* receive low-water mark */ #define SO_SNDTIMEO 0x1005 /* send timeout */ #define SO_RCVTIMEO 0x1006 /* receive timeout */ #define SO_ERROR 0x1007 /* get error status and clear */ #define SO_TYPE 0x1008 /* get socket type */ struct sockaddr { unsigned short sa_family; char sa_data[14]; }; #ifndef ntohs #define ntohs(num) htons(num) #define ntohl(num) htonl(num) #endif #ifdef __cplusplus extern "C" { #endif int socket(int domain, int type, int protocol); int bind(int socket, const struct sockaddr * addr, int addr_len); int connect(int socket, const struct sockaddr * addr, int addr_len); int send(int socket, const void * data, int sendlength, int flags); int recv(int socket, void * data, int recvlength, int flags); int sendto(int socket, const void * data, int sendlength, int flags, const struct sockaddr * addr, int addr_len); int recvfrom(int socket, void * data, int recvlength, int flags, struct sockaddr * addr, int * addr_len); int listen(int socket, int max_connections); int accept(int socket, struct sockaddr * addr, int * addr_len); int shutdown(int socket, int shutdown_type); int closesocket(int socket); int ioctl(int socket, long cmd, void * arg); int setsockopt(int socket, int level, int option_name, const void * data, int data_len); int getsockopt(int socket, int level, int option_name, void * data, int * data_len); int getpeername(int socket, struct sockaddr *addr, int * addr_len); int getsockname(int socket, struct sockaddr *addr, int * addr_len); int gethostname(char *name, size_t len); int sethostname(const char *name, size_t len); unsigned short htons(unsigned short num); unsigned long htonl(unsigned long num); extern int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *errorfds, struct timeval *timeout); #ifdef __cplusplus }; #endif #endif // SYS_SOCKET_H