X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fio%2Fsg_socket.hxx;h=8341cb34b5aef1e7c2dda27463e6960e676aac0c;hb=9f88b077ee5294c4ad898016b7d66682466bbafb;hp=9003c086c92a9897729b6abbde15c390cd814ace;hpb=7d07e6ea510f3a0e8b5e22e3e8b2745affd963f7;p=simgear.git diff --git a/simgear/io/sg_socket.hxx b/simgear/io/sg_socket.hxx index 9003c086..8341cb34 100644 --- a/simgear/io/sg_socket.hxx +++ b/simgear/io/sg_socket.hxx @@ -5,7 +5,7 @@ // Written by Curtis Olson, started November 1999. // -// Copyright (C) 1999 Curtis L. Olson - curt@flightgear.org +// Copyright (C) 1999 Curtis L. Olson - http://www.flightgear.org/~curt // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License as @@ -19,7 +19,7 @@ // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software -// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. // // $Id$ @@ -27,23 +27,13 @@ #ifndef _SG_SOCKET_HXX #define _SG_SOCKET_HXX - -#ifndef __cplusplus -# error This library requires C++ -#endif - #include -#include STL_STRING +#include #include #include - -SG_USING_STD(string); - -#if defined(_MSC_VER) || defined(__MINGW32__) -# include -#endif +#include #define SG_MAX_SOCKET_QUEUE 32 @@ -53,45 +43,31 @@ SG_USING_STD(string); */ class SGSocket : public SGIOChannel { public: -#if defined(_MSC_VER) || defined(__MINGW32__) - typedef SOCKET SocketType; -#else - typedef int SocketType; -# define INVALID_SOCKET (-1) -#endif - private: - string hostname; - string port_str; + std::string hostname; + std::string port_str; char save_buf[ 2 * SG_IO_MAX_MSG_SIZE ]; int save_len; - SocketType sock; - SocketType msgsock; - short unsigned int port; - int sock_style; // SOCK_STREAM or SOCK_DGRAM - + simgear::Socket sock; + simgear::Socket* client; + unsigned short port; + bool is_tcp; + bool is_server; bool first_read; + int timeout; + + static bool init; // make a server (master listening) socket - SocketType make_server_socket(); + bool make_server_socket(); // make a client socket - SocketType make_client_socket(); + bool make_client_socket(); - // wrapper functions - size_t readsocket( int fd, void *buf, size_t count ); - size_t writesocket( int fd, const void *buf, size_t count ); -#if !defined(_MSC_VER) && !defined(__MINGW32__) - int closesocket(int fd); -#endif - -#if defined(_MSC_VER) || defined(__MINGW32__) - // Ensure winsock has been initialised. - static bool wsock_init; - static bool wsastartup(); -#endif + // Poll for new connections or data to read. + int poll(); public: @@ -142,7 +118,7 @@ public: * @param port port number if we care to choose one. * @param style specify "udp" or "tcp" */ - SGSocket( const string& host, const string& port, const string& style ); + SGSocket( const std::string& host, const std::string& port, const std::string& style ); /** Destructor */ ~SGSocket(); @@ -173,11 +149,14 @@ public: */ bool nonblock(); + // set timeout (default: 0) + inline void set_timeout(int i) { timeout = i; } + /** @return the remote host name */ - inline string get_hostname() const { return hostname; } + inline std::string get_hostname() const { return hostname; } /** @return the port number (in string form) */ - inline string get_port_str() const { return port_str; } + inline std::string get_port_str() const { return port_str; } };