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