1 #ifndef SOCKET_H 2 #define SOCKET_H 3 /*=========================================================================*\ 4 * Socket compatibilization module 5 * LuaSocket toolkit 6 * 7 * BSD Sockets and WinSock are similar, but there are a few irritating 8 * differences. Also, not all *nix platforms behave the same. This module 9 * (and the associated usocket.h and wsocket.h) factor these differences and 10 * creates a interface compatible with the io.h module. 11 * 12 * RCS ID: $Id: socket.h,v 1.20 2005/11/20 07:20:23 diego Exp $ 13 \*=========================================================================*/ 14 #include "io.h" 15 16 /*=========================================================================*\ 17 * Platform specific compatibilization 18 \*=========================================================================*/ 19 #ifdef _WIN32 20 #include "wsocket.h" 21 #else 22 #include "usocket.h" 23 #endif 24 25 /*=========================================================================*\ 26 * The connect and accept functions accept a timeout and their 27 * implementations are somewhat complicated. We chose to move 28 * the timeout control into this module for these functions in 29 * order to simplify the modules that use them. 30 \*=========================================================================*/ 31 #include "timeout.h" 32 33 /* we are lazy... */ 34 typedef struct sockaddr SA; 35 36 /*=========================================================================*\ 37 * Functions bellow implement a comfortable platform independent 38 * interface to sockets 39 \*=========================================================================*/ 40 int socket_open(void); 41 int socket_close(void); 42 void socket_destroy(p_socket ps); 43 void socket_shutdown(p_socket ps, int how); 44 int socket_sendto(p_socket ps, const char *data, size_t count, 45 size_t *sent, SA *addr, socklen_t addr_len, p_timeout tm); 46 int socket_recvfrom(p_socket ps, char *data, size_t count, 47 size_t *got, SA *addr, socklen_t *addr_len, p_timeout tm); 48 49 void socket_setnonblocking(p_socket ps); 50 void socket_setblocking(p_socket ps); 51 52 int socket_waitfd(p_socket ps, int sw, p_timeout tm); 53 int socket_select(t_socket n, fd_set *rfds, fd_set *wfds, fd_set *efds, 54 p_timeout tm); 55 56 int socket_connect(p_socket ps, SA *addr, socklen_t addr_len, p_timeout tm); 57 int socket_create(p_socket ps, int domain, int type, int protocol); 58 int socket_bind(p_socket ps, SA *addr, socklen_t addr_len); 59 int socket_listen(p_socket ps, int backlog); 60 int socket_accept(p_socket ps, p_socket pa, SA *addr, 61 socklen_t *addr_len, p_timeout tm); 62 63 const char *socket_hoststrerror(int err); 64 const char *socket_strerror(int err); 65 66 /* these are perfect to use with the io abstraction module 67 and the buffered input module */ 68 int socket_send(p_socket ps, const char *data, size_t count, 69 size_t *sent, p_timeout tm); 70 int socket_recv(p_socket ps, char *data, size_t count, size_t *got, p_timeout tm); 71 const char *socket_ioerror(p_socket ps, int err); 72 73 int socket_gethostbyaddr(const char *addr, socklen_t len, struct hostent **hp); 74 int socket_gethostbyname(const char *addr, struct hostent **hp); 75 76 #endif /* SOCKET_H */ 77