/src/marsyas/Network/Socket.h
C Header | 110 lines | 33 code | 23 blank | 54 comment | 0 complexity | 379cb1df70658d3f5e61c0311cf790fa MD5 | raw file
Possible License(s): BSD-3-Clause, GPL-2.0
- /***************************************************/
- /*! \class Socket
- \brief STK TCP socket client/server class.
- This class provides a uniform cross-platform
- TCP socket client or socket server interface.
- Methods are provided for reading or writing
- data buffers to/from connections. This class
- also provides a number of static functions for
- use with external socket descriptors.
- The user is responsible for checking the values
- returned by the read/write methods. Values
- less than or equal to zero indicate a closed
- or lost connection or the occurence of an error.
- by Perry R. Cook and Gary P. Scavone, 1995 - 2002.
- */
- /***************************************************/
- #if !defined(__SOCKET_H)
- #define __SOCKET_H
- #include <stdio.h>
- #include <string.h>
- #include <marsyas/common_source.h>
- namespace Marsyas
- {
- class Socket
- {
- public:
- //! Default constructor which creates a local socket server on port 2006 (or the specified port number).
- /*!
- An StkError will be thrown if a socket error occurs during instantiation.
- */
- Socket( int port = 2006 );
- //! Class constructor which creates a socket client connection to the specified host and port.
- /*!
- An StkError will be thrown if a socket error occurs during instantiation.
- */
- Socket( int port, const char *hostname );
- //! The class destructor closes the socket instance, breaking any existing connections.
- ~Socket();
- //! Connect a socket client to the specified host and port and returns the resulting socket descriptor.
- /*!
- This method is valid for socket clients only. If it is called for
- a socket server, -1 is returned. If the socket client is already
- connected, that connection is terminated and a new connection is
- attempted. Server connections are made using the accept() method.
- An StkError will be thrown if a socket error occurs during
- instantiation. \sa accept
- */
- int connect( int port, const char *hostname = "localhost" );
- //! Close this socket.
- void close( void );
- //! Return the server/client socket descriptor.
- int socket( void ) const;
- //! Return the server/client port number.
- int port( void ) const;
- //! If this is a socket server, extract the first pending connection request from the queue and create a new connection, returning the descriptor for the accepted socket.
- /*!
- If no connection requests are pending and the socket has not
- been set non-blocking, this function will block until a connection
- is present. If an error occurs or this is a socket client, -1 is
- returned.
- */
- int accept( void );
- //! If enable = false, the socket is set to non-blocking mode. When first created, sockets are by default in blocking mode.
- static void setBlocking( int socket, bool enable );
- //! Close the socket with the given descriptor.
- static void close( int socket );
- //! Returns TRUE is the socket descriptor is valid.
- static bool isValid( int socket );
- //! Write a buffer over the socket connection. Returns the number of bytes written or -1 if an error occurs.
- int writeBuffer(const void *buffer, long bufferSize, int flags = 0);
- //! Write a buffer via the specified socket. Returns the number of bytes written or -1 if an error occurs.
- static int writeBuffer(int socket, const void *buffer, long bufferSize, int flags );
- //! Read a buffer from the socket connection, up to length \e bufferSize. Returns the number of bytes read or -1 if an error occurs.
- int readBuffer(void *buffer, long bufferSize, int flags = 0);
- //! Read a buffer via the specified socket. Returns the number of bytes read or -1 if an error occurs.
- static int readBuffer(int socket, void *buffer, long bufferSize, int flags );
- protected:
- char msg[256];
- int soket;
- int poort;
- bool server;
- };
- }//namespace Marsyas
- #endif // defined(__SOCKET_H)