// 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
//
// 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$
#include <simgear/compiler.h>
-#include STL_STRING
+#include <string>
#include <simgear/math/sg_types.hxx>
#include <simgear/io/iochannel.hxx>
-SG_USING_STD(string);
+#include <plib/netSocket.h>
-#if defined(_MSC_VER) || defined(__MINGW32__)
-# include <winsock.h>
-#endif
+using std::string;
#define SG_MAX_SOCKET_QUEUE 32
*/
class SGSocket : public SGIOChannel {
public:
-#if defined(_MSC_VER) || defined(__MINGW32__)
- typedef SOCKET SocketType;
-#else
- typedef int SocketType;
-# define INVALID_SOCKET (-1)
-#endif
-
private:
string hostname;
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
-
+ netSocket sock;
+ netSocket* 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();
+ bool make_client_socket();
- // wrapper functions
- int readsocket( int fd, void *buf, size_t count );
- int writesocket( int fd, const void *buf, size_t count );
-#if !defined(_MSC_VER) && !defined(__MINGW32__)
- int closesocket(int fd);
-#endif
-
-#if defined(_MSC_VER) || defined(__MINGW32__)
- // Ensure winsock has been initialised.
- static bool wsock_init;
- static bool wsastartup();
-#endif
+ // Poll for new connections or data to read.
+ int poll();
public:
*/
bool nonblock();
+ // set timeout (default: 0)
+ inline void set_timeout(int i) { timeout = i; }
+
/** @return the remote host name */
inline string get_hostname() const { return hostname; }