#include <simgear/compiler.h>
-#if defined( sgi )
-#include <strings.h>
-#endif
-
-#include STL_IOSTREAM
+#include <iostream>
+#include <cstring>
+#include <cstdlib> // for atoi
#include <simgear/debug/logstream.hxx>
{
if (!init)
{
- netInit(NULL, NULL); // plib-1.4.2 compatible
- init = true;
+ simgear::Socket::initSockets();
+ init = true;
}
if ( style == "tcp" )
return false;
}
- if (sock.bind( "", port ) < 0)
+ if (sock.bind( hostname.c_str(), port ) < 0)
{
SG_LOG( SG_IO, SG_ALERT,
"Error: bind() failed in make_server_socket()" );
int i;
for ( i = 0; i < save_len && save_buf[i] != '\n'; ++i )
;
- if ( save_buf[i] == '\n' ) {
+ if (( i < save_len ) && ( save_buf[i] == '\n' )) {
result = i + 1;
} else {
// no end of line yet
// we found an end of line
+ // check buffer size
+ int copy_length = result;
+ if (copy_length >= length) {
+ SG_LOG( SG_IO, SG_ALERT,
+ "Alert: readline() has line exceeding the buffer size." );
+ copy_length = length-1;
+ }
// copy to external buffer
- strncpy( buf, save_buf, result );
- buf[result] = '\0';
+ strncpy( buf, save_buf, copy_length );
+ buf[copy_length] = '\0';
// shift save buffer
//memmove( save_buf+, save_buf+, ? );
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;
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, timeout );
+ 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;
}