1 #ifndef _SOCKETS_HPP_
\r
2 #define _SOCKETS_HPP_
\r
10 # include <WinSock.h>
\r
11 typedef unsigned long in_addr_t;
\r
14 //! A platform-independent socket API.
\r
17 //! Creates a stream (TCP) socket. Returns -1 on failure.
\r
18 static int socket();
\r
20 //! Closes a socket.
\r
21 static void close(int socket);
\r
23 //! Sets a stream (TCP) socket to perform non-blocking IO. Returns false on failure.
\r
24 static bool set_non_blocking(int socket);
\r
26 //! Read text from the specified socket. Returns false on error.
\r
27 static bool nb_read(int socket, std::string& s, bool *eof);
\r
29 //! Write text to the specified socket. Returns false on error.
\r
30 static bool nb_write(int socket, std::string& s, int *bytesSoFar);
\r
32 // The next four methods are appropriate for servers.
\r
34 //! Allow the port the specified socket is bound to to be re-bound immediately so
\r
35 //! server re-starts are not delayed. Returns false on failure.
\r
36 static bool set_reuse_addr(int socket);
\r
38 //! Bind to a specified port
\r
39 static bool bind(int socket, int port);
\r
41 //! Set socket in listen mode
\r
42 static bool listen(int socket, int backlog);
\r
44 //! Accept a client connection request
\r
45 static int accept(int socket);
\r
47 typedef void (*on_resolved_func)(gpointer data, bool resolved, in_addr_t sa);
\r
48 static void resolve(std::string& host, gpointer data, on_resolved_func func);
\r
50 //! Connect a socket to a server (from a client)
\r
51 typedef void (*on_connected_func)(gpointer data, bool succeeded);
\r
52 static void connect(int socket, in_addr_t sa, int port, gpointer data, on_connected_func func);
\r
55 //! Returns last errno
\r
56 static int get_error_code();
\r
58 //! Returns message corresponding to last error
\r
59 static std::string get_error_msg();
\r
61 struct DnsQueryData {
\r
64 on_resolved_func func;
\r
68 static gpointer dns_thread(gpointer data);
\r
69 static gboolean dns_main_thread_cb(gpointer data);
\r
70 static std::map<std::string, in_addr_t> dns_map;
\r
71 struct ConnectData {
\r
76 on_connected_func func;
\r
79 static gpointer connect_thread(gpointer data);
\r
80 static gboolean connect_main_thread_cb(gpointer data);
\r
84 #endif//!_SOCKETS_HPP_
\r