// 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>
-#if defined( sgi )
-#include <strings.h>
-#endif
+#include <iostream>
+#include <cstring>
+#include <cstdlib> // for atoi
#include <simgear/debug/logstream.hxx>
client(0),
is_tcp(false),
is_server(false),
- first_read(false)
+ first_read(false),
+ timeout(0)
{
if (!init)
{
- netInit();
- init = true;
+ simgear::Socket::initSockets();
+ init = true;
}
if ( style == "tcp" )
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 )
{
// 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 );
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;
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;
}
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;
}