]> git.mxchange.org Git - simgear.git/blobdiff - simgear/io/sg_socket.cxx
MacOS X fix
[simgear.git] / simgear / io / sg_socket.cxx
index b348ddf19f98cae3c862cce8e328044b4adbb4ec..8dcbd6bebd8c764d29b75f674b030cfb7343e544 100644 (file)
@@ -3,7 +3,7 @@
 // Written by Curtis Olson, started November 1999.
 // Modified by Bernie Bright <bbright@bigpond.net.au>, May 2002.
 //
-// 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
 //
 // 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$
 
+#ifdef HAVE_CONFIG_H
+#  include <simgear_config.h>
+#endif
 
 #include <simgear/compiler.h>
 
@@ -28,6 +31,8 @@
 #include <strings.h>
 #endif
 
+#include <iostream>
+
 #include <simgear/debug/logstream.hxx>
 
 #include "sg_socket.hxx"
@@ -42,11 +47,12 @@ SGSocket::SGSocket( const string& host, const string& port_,
     client(0),
     is_tcp(false),
     is_server(false),
-    first_read(false)
+    first_read(false),
+    timeout(0)
 {
     if (!init)
     {
-       netInit();
+       netInit(NULL, NULL);    // plib-1.4.2 compatible
        init = true;
     }
 
@@ -218,7 +224,14 @@ SGSocket::read( char *buf, int length )
 
     if (result > 0)
     {
-       result = sock.recv( buf, length );
+       if (is_tcp && is_server)
+       {
+            result = client->recv( buf, length );
+        }
+        else
+        {
+            result = sock.recv( buf, length );
+        }
 
        if ( result != length )
        {
@@ -250,7 +263,7 @@ SGSocket::readline( char *buf, int length )
        // read a chunk, keep in the save buffer until we have the
        // requested amount read
 
-       if (is_tcp)
+       if (is_tcp && is_server)
        {
            char *buf_ptr = save_buf + save_len;
            result = client->recv( buf_ptr, SG_IO_MAX_MSG_SIZE - save_len );
@@ -323,7 +336,7 @@ SGSocket::write( const char *buf, const int length )
 
     if ( s->send( buf, length ) < 0 )
     {
-       SG_LOG( SG_IO, SG_ALERT, "Error writing to socket: " << port );
+       SG_LOG( SG_IO, SG_WARN, "Error writing to socket: " << port );
        error_condition = true;
     }
 
@@ -379,7 +392,7 @@ SGSocket::poll()
     netSocket* writers[1];
     writers[0] = 0;
 
-    int result = netSocket::select( readers, writers, 0 );
+    int result = netSocket::select( readers, writers, timeout );
 
     if (result > 0 && is_server && client == 0)
     {