]> git.mxchange.org Git - simgear.git/blobdiff - simgear/io/sg_socket.hxx
Fix Linux compilation of netChat - explicit include of malloc.h required.
[simgear.git] / simgear / io / sg_socket.hxx
index be8171351a3fe3b5a4632d069abbbf38d62b4361..8341cb34b5aef1e7c2dda27463e6960e676aac0c 100644 (file)
@@ -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$
 
 #ifndef _SG_SOCKET_HXX
 #define _SG_SOCKET_HXX
 
-
-#ifndef __cplusplus
-# error This library requires C++
-#endif
-
 #include <simgear/compiler.h>
 
-#include STL_STRING
+#include <string>
 
 #include <simgear/math/sg_types.hxx>
 #include <simgear/io/iochannel.hxx>
-
-SG_USING_STD(string);
-
-#if defined(_MSC_VER)
-#  include <winsock.h>
-#endif
+#include <simgear/io/raw_socket.hxx>
 
 #define SG_MAX_SOCKET_QUEUE 32
 
@@ -53,45 +43,31 @@ SG_USING_STD(string);
  */
 class SGSocket : public SGIOChannel {
 public:
-#if defined(_MSC_VER)
-    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();
-
-    // 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)
-    int closesocket(int fd);
-#endif
+    bool  make_client_socket();
 
-#if defined(_MSC_VER)
-    // 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();
@@ -167,14 +143,20 @@ public:
     // close file
     bool close();
 
-    /** Enable non-blocking mode. */
+    /**
+     * Enable non-blocking mode.
+     * @return success/failure
+     */
     bool nonblock();
 
-    /** Return the remote host name */
-    inline string get_hostname() const { return hostname; }
+    // set timeout (default: 0)
+    inline void set_timeout(int i) { timeout = i; }
+
+    /** @return the remote host name */
+    inline std::string get_hostname() const { return hostname; }
 
-    /** Return the port number (in string form) */
-    inline string get_port_str() const { return port_str; }
+    /** @return the port number (in string form) */
+    inline std::string get_port_str() const { return port_str; }
 };