You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
138 lines
3.6 KiB
C
138 lines
3.6 KiB
C
3 weeks ago
|
/*=========================================================================
|
||
|
|
||
|
Program: Visualization Toolkit
|
||
|
Module: vtkSocket.h
|
||
|
|
||
|
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
|
||
|
All rights reserved.
|
||
|
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
|
||
|
|
||
|
This software is distributed WITHOUT ANY WARRANTY; without even
|
||
|
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||
|
PURPOSE. See the above copyright notice for more information.
|
||
|
|
||
|
=========================================================================*/
|
||
|
/**
|
||
|
* @class vtkSocket
|
||
|
* @brief BSD socket encapsulation.
|
||
|
*
|
||
|
* This abstract class encapsulates a BSD socket. It provides an API for
|
||
|
* basic socket operations.
|
||
|
*/
|
||
|
|
||
|
#ifndef vtkSocket_h
|
||
|
#define vtkSocket_h
|
||
|
|
||
|
#include "vtkCommonSystemModule.h" // For export macro
|
||
|
#include "vtkObject.h"
|
||
|
|
||
|
class vtkSocketCollection;
|
||
|
class VTKCOMMONSYSTEM_EXPORT vtkSocket : public vtkObject
|
||
|
{
|
||
|
public:
|
||
|
vtkTypeMacro(vtkSocket, vtkObject);
|
||
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
||
|
|
||
|
// ----- Status API ----
|
||
|
/**
|
||
|
* Check is the socket is alive.
|
||
|
*/
|
||
|
int GetConnected() { return (this->SocketDescriptor >= 0); }
|
||
|
|
||
|
/**
|
||
|
* Close the socket.
|
||
|
*/
|
||
|
void CloseSocket();
|
||
|
|
||
|
// ------ Communication API ---
|
||
|
/**
|
||
|
* These methods send data over the socket.
|
||
|
* Returns 1 on success, 0 on error and raises vtkCommand::ErrorEvent.
|
||
|
*/
|
||
|
int Send(const void* data, int length);
|
||
|
|
||
|
/**
|
||
|
* Receive data from the socket.
|
||
|
* This call blocks until some data is read from the socket.
|
||
|
* When readFully is set, this call will block until all the
|
||
|
* requested data is read from the socket.
|
||
|
* 0 on error, else number of bytes read is returned. On error,
|
||
|
* vtkCommand::ErrorEvent is raised.
|
||
|
*/
|
||
|
int Receive(void* data, int length, int readFully = 1);
|
||
|
|
||
|
/**
|
||
|
* Provides access to the internal socket descriptor. This is valid only when
|
||
|
* GetConnected() returns true.
|
||
|
*/
|
||
|
vtkGetMacro(SocketDescriptor, int);
|
||
|
|
||
|
/**
|
||
|
* Selects set of sockets. Returns 0 on timeout, -1 on error.
|
||
|
* 1 on success. Selected socket's index is returned through
|
||
|
* selected_index
|
||
|
*/
|
||
|
static int SelectSockets(
|
||
|
const int* sockets_to_select, int size, unsigned long msec, int* selected_index);
|
||
|
|
||
|
protected:
|
||
|
vtkSocket();
|
||
|
~vtkSocket() override;
|
||
|
|
||
|
int SocketDescriptor;
|
||
|
|
||
|
friend class vtkSocketCollection;
|
||
|
|
||
|
/**
|
||
|
* Creates an endpoint for communication and returns the descriptor.
|
||
|
* -1 indicates error.
|
||
|
*/
|
||
|
int CreateSocket();
|
||
|
|
||
|
/**
|
||
|
* Close the socket.
|
||
|
*/
|
||
|
void CloseSocket(int socketdescriptor);
|
||
|
|
||
|
/**
|
||
|
* Binds socket to a particular port.
|
||
|
* Returns 0 on success other -1 is returned.
|
||
|
*/
|
||
|
int BindSocket(int socketdescriptor, int port);
|
||
|
|
||
|
/**
|
||
|
* Selects a socket ie. waits for it to change status.
|
||
|
* Returns 1 on success; 0 on timeout; -1 on error. msec=0 implies
|
||
|
* no timeout.
|
||
|
*/
|
||
|
int SelectSocket(int socketdescriptor, unsigned long msec);
|
||
|
|
||
|
/**
|
||
|
* Accept a connection on a socket. Returns -1 on error. Otherwise
|
||
|
* the descriptor of the accepted socket.
|
||
|
*/
|
||
|
int Accept(int socketdescriptor);
|
||
|
|
||
|
/**
|
||
|
* Listen for connections on a socket. Returns 0 on success. -1 on error.
|
||
|
*/
|
||
|
int Listen(int socketdescriptor);
|
||
|
|
||
|
/**
|
||
|
* Connect to a server socket. Returns 0 on success, -1 on error.
|
||
|
*/
|
||
|
int Connect(int socketdescriptor, const char* hostname, int port);
|
||
|
|
||
|
/**
|
||
|
* Returns the port to which the socket is connected.
|
||
|
* 0 on error.
|
||
|
*/
|
||
|
int GetPort(int socketdescriptor);
|
||
|
|
||
|
private:
|
||
|
vtkSocket(const vtkSocket&) = delete;
|
||
|
void operator=(const vtkSocket&) = delete;
|
||
|
};
|
||
|
|
||
|
#endif
|