X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fio%2Fsg_socket.cxx;h=636ff3452b19c8719640ccf7eb36ad4a93add1a5;hb=9d1cf253b477ed11b8de75ebc29f22e82222190a;hp=0ac45a80e407a8875d5193c7d497ee54a29abc3e;hpb=3c08eae85b77e329d34245fa6f9200c08e52e3bb;p=simgear.git diff --git a/simgear/io/sg_socket.cxx b/simgear/io/sg_socket.cxx index 0ac45a80..636ff345 100644 --- a/simgear/io/sg_socket.cxx +++ b/simgear/io/sg_socket.cxx @@ -3,7 +3,7 @@ // Written by Curtis Olson, started November 1999. // Modified by Bernie Bright , 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 @@ -17,16 +17,19 @@ // // 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 +#endif #include -#if defined( sgi ) -#include -#endif +#include +#include +#include // for atoi #include @@ -42,12 +45,13 @@ 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(NULL, NULL); // plib-1.4.2 compatible - init = true; + simgear::Socket::initSockets(); + init = true; } if ( style == "tcp" ) @@ -218,7 +222,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 +261,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 ); @@ -313,7 +324,7 @@ SGSocket::readline( char *buf, int length ) int SGSocket::write( const char *buf, const int length ) { - netSocket* s = client == 0 ? &sock : client; + simgear::Socket* s = client == 0 ? &sock : client; if (s->getHandle() == -1) { return 0; @@ -323,7 +334,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; } @@ -371,24 +382,24 @@ SGSocket::nonblock() int SGSocket::poll() { - netSocket* readers[2]; + simgear::Socket* readers[2]; readers[0] = client != 0 ? client : &sock; readers[1] = 0; - netSocket* writers[1]; + simgear::Socket* writers[1]; writers[0] = 0; - int result = netSocket::select( readers, writers, 0 ); + int result = simgear::Socket::select( readers, writers, timeout ); if (result > 0 && is_server && client == 0) { // Accept a new client connection - netAddress addr; + simgear::IPAddress addr; int new_fd = sock.accept( &addr ); SG_LOG( SG_IO, SG_INFO, "Accepted connection from " << addr.getHost() << ":" << addr.getPort() ); - client = new netSocket(); + client = new simgear::Socket(); client->setHandle( new_fd ); return 0; }