claw::socket_traits_win32 Class Reference

Win32 interface for using sockets. More...

#include <socket_traits_win32.hpp>

List of all members.

Public Types

typedef SOCKET descriptor
 Type of the system description of the socket.

Static Public Member Functions

static bool init ()
 Initialize the use of the socket library.
static bool release ()
 Close the socket library.
static descriptor open ()
 Open a socket.
static bool close (descriptor d)
 Close a socket.
static bool connect (descriptor d, const std::string &address, int port)
 Connect a socket to a port.
static bool listen (descriptor d, int port, unsigned int queue_size)
 Open a socket for incoming connexions.
static bool select_read (descriptor d, int time_limit=-1)
 Select a socket for reading.
static descriptor accept (descriptor d)
 Accept an incoming connexion.
static bool valid_descriptor (descriptor d)
 Tell if a descriptor is a valid socket descriptor.
static bool is_open (descriptor d)
 Tell if a descriptor is a opened socket.

Static Public Attributes

static const descriptor invalid_socket = INVALID_SOCKET
 Invalid socket descriptor.

Detailed Description

Win32 interface for using sockets.

Author:
Julien Jorge

Definition at line 46 of file socket_traits_win32.hpp.


Member Typedef Documentation

Type of the system description of the socket.

Definition at line 50 of file socket_traits_win32.hpp.


Member Function Documentation

static descriptor claw::socket_traits_win32::accept ( descriptor  d  )  [inline, static]

Accept an incoming connexion.

Parameters:
d The descriptor of the socket to listen.
Returns:
The descriptor of the incoming connexion.

Definition at line 203 of file socket_traits_win32.hpp.

00204     {
00205       return ::accept( d, NULL, NULL );
00206     } // socket_traits_win32::accept()

static bool claw::socket_traits_win32::close ( descriptor  d  )  [inline, static]

Close a socket.

Parameters:
d The descriptor of the socket to close.
Returns:
true if the socket has been closed.

Definition at line 102 of file socket_traits_win32.hpp.

00103     {
00104       return ::closesocket(d) == 0; 
00105     } // socket_traits_win32::close()

static bool claw::socket_traits_win32::connect ( descriptor  d,
const std::string &  address,
int  port 
) [inline, static]

Connect a socket to a port.

Parameters:
d The descriptor of the socket to connect.
address The adress to connect to.
port The port to connect to.
Returns:
true if the connection is available.

Definition at line 115 of file socket_traits_win32.hpp.

References CLAW_PRECOND, and invalid_socket.

00116     {
00117       CLAW_PRECOND( d != invalid_socket );
00118 
00119       bool result=false;
00120       struct hostent* hp = gethostbyname(address.c_str());
00121 
00122       if (hp)
00123   {
00124     struct sockaddr_in sa;
00125 
00126     memset (&sa, '\0', sizeof(sa));
00127     sa.sin_family = hp->h_addrtype;
00128     sa.sin_port = htons(port);
00129     memcpy( &sa.sin_addr, hp->h_addr, hp->h_length );
00130       
00131     if ( ::connect(d, (struct sockaddr*)&sa, sizeof(sa)) != SOCKET_ERROR )
00132       result = true;
00133   }
00134 
00135       return result;
00136     } // socket_traits_win32::connect()

static bool claw::socket_traits_win32::init (  )  [inline, static]

Initialize the use of the socket library.

Returns:
true if the initialization is successful.

Definition at line 62 of file socket_traits_win32.hpp.

00063     {
00064       WORD version;
00065       WSADATA data;
00066  
00067       version = MAKEWORD( 2, 2 );
00068       
00069       return WSAStartup( version, &data ) == 0;
00070     } // socket_traits_win32::init()

static bool claw::socket_traits_win32::is_open ( descriptor  d  )  [inline, static]

Tell if a descriptor is a opened socket.

Parameters:
d The descriptor to test.

Definition at line 223 of file socket_traits_win32.hpp.

References valid_descriptor().

00224     {
00225       return valid_descriptor(d);
00226     } // socket_traits_win32::is_open()

static bool claw::socket_traits_win32::listen ( descriptor  d,
int  port,
unsigned int  queue_size 
) [inline, static]

Open a socket for incoming connexions.

Parameters:
d The descriptor of the socket to open.
port The port to connect to.
queue_size The size of the queue for incoming connexions.
Returns:
true if the socket has been opened.

Definition at line 146 of file socket_traits_win32.hpp.

References CLAW_PRECOND, and invalid_socket.

00147     {
00148       CLAW_PRECOND( d != invalid_socket );
00149 
00150       struct sockaddr_in addr;
00151 
00152       memset (&addr, '\0', sizeof(addr));
00153       addr.sin_family = AF_INET;
00154       addr.sin_port = htons(port);
00155       addr.sin_addr.s_addr = htonl(INADDR_ANY);
00156 
00157       if ( bind(d, (struct sockaddr*)&addr, sizeof(addr)) != SOCKET_ERROR )
00158         return ::listen(d, queue_size) != SOCKET_ERROR;
00159       else
00160         return false;
00161     } // socket_traits_win32::connect()

static descriptor claw::socket_traits_win32::open (  )  [inline, static]

Open a socket.

Returns:
The descriptor on the loaded socket.

Definition at line 87 of file socket_traits_win32.hpp.

References invalid_socket.

00088     {
00089       descriptor fd = invalid_socket;
00090 
00091       fd = socket(AF_INET, SOCK_STREAM, 0);
00092 
00093       return fd;
00094     } // socket_traits_win32::open()

static bool claw::socket_traits_win32::release (  )  [inline, static]

Close the socket library.

Returns:
true if the operation is successful.

Definition at line 77 of file socket_traits_win32.hpp.

00078     {
00079       return WSACleanup() == 0;
00080     } // socket_traits_win32::release()

static bool claw::socket_traits_win32::select_read ( descriptor  d,
int  time_limit = -1 
) [inline, static]

Select a socket for reading.

Parameters:
d The descriptor of the socket to read.
time_limit Maximum of seconds to wait before considering there's nothing to read. If time_limit is negative, the method wait until there is something to read.
Returns:
true if the socket is ready to be read.

Definition at line 172 of file socket_traits_win32.hpp.

References CLAW_PRECOND, and invalid_socket.

00173     {
00174       CLAW_PRECOND( d != invalid_socket );
00175 
00176       struct timeval tv, *ptv;
00177       fd_set fds;
00178 
00179       if ( time_limit < 0 )
00180         ptv = NULL;
00181       else
00182         {
00183           tv.tv_sec  = time_limit;
00184           tv.tv_usec = 0;
00185           
00186           ptv = &tv;
00187         }
00188 
00189       FD_ZERO(&fds);
00190       FD_SET(d, &fds);
00191 
00192       select( d+1, &fds, NULL, NULL, ptv );
00193 
00194       return FD_ISSET( d, &fds );
00195     } // socket_traits_win32::select_read()

static bool claw::socket_traits_win32::valid_descriptor ( descriptor  d  )  [inline, static]

Tell if a descriptor is a valid socket descriptor.

Parameters:
d The descriptor to test.

Definition at line 213 of file socket_traits_win32.hpp.

References invalid_socket.

Referenced by is_open().

00214     {
00215       return d != invalid_socket;
00216     } // socket_traits_win32::valid_descriptor()


Member Data Documentation

const descriptor claw::socket_traits_win32::invalid_socket = INVALID_SOCKET [static]

Invalid socket descriptor.

Definition at line 54 of file socket_traits_win32.hpp.

Referenced by connect(), listen(), open(), select_read(), and valid_descriptor().


The documentation for this class was generated from the following file:

Generated on 9 Nov 2009 for CLAW Library (a C++ Library Absolutely Wonderful) by  doxygen 1.6.1