// 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/math/sg_types.hxx>
#include <simgear/io/iochannel.hxx>
-SG_USING_STD(string);
+#include <plib/netSocket.h>
-#if defined(_MSC_VER)
-# include <winsock.h>
-#endif
+SG_USING_STD(string);
#define SG_MAX_SOCKET_QUEUE 32
*/
class SGSocket : public SGIOChannel {
public:
-#if defined(_MSC_VER)
- 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
- size_t readsocket( int fd, void *buf, size_t count );
- size_t writesocket( int fd, const void *buf, size_t count );
-#if !defined(_MSC_VER)
- int closesocket(int fd);
-#endif
-
-#if defined(_MSC_VER)
- // Ensure winsock has been initialised.
- static bool wsock_init;
- static bool wsastartup();
-#endif
+ // Poll for new connections or data to read.
+ int poll();
public:
// close file
bool close();
- /** Enable non-blocking mode. */
+ /**
+ * Enable non-blocking mode.
+ * @return success/failure
+ */
bool nonblock();
- /** Return the remote host name */
+ // set timeout (default: 0)
+ inline void set_timeout(int i) { timeout = i; }
+
+ /** @return the remote host name */
inline string get_hostname() const { return hostname; }
- /** Return the port number (in string form) */
+ /** @return the port number (in string form) */
inline string get_port_str() const { return port_str; }
};