CLAW Library (a C++ Library Absolutely Wonderful) 1.5.5
Public Types | Static Public Member Functions | Static Public Attributes

claw::socket_traits_unix Class Reference

Unix interface for using sockets. More...

#include <socket_traits_unix.hpp>

List of all members.

Public Types

typedef int 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 = -1
 Invalid socket descriptor.

Detailed Description

Unix interface for using sockets.

Author:
Julien Jorge

Definition at line 49 of file socket_traits_unix.hpp.


Member Typedef Documentation

Type of the system description of the socket.

Definition at line 53 of file socket_traits_unix.hpp.


Member Function Documentation

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

Accept an incoming connexion.

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

Definition at line 201 of file socket_traits_unix.hpp.

Referenced by claw::net::socket_server::accept().

    {
      return ::accept( d, NULL, NULL );
    } // socket_traits_unix::accept()
static bool claw::socket_traits_unix::close ( descriptor  d) [inline, static]

Close a socket.

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

Definition at line 100 of file socket_traits_unix.hpp.

Referenced by claw::net::basic_socket::close().

    {
      return ::close(d) == 0; 
    } // socket_traits_unix::close()
static bool claw::socket_traits_unix::connect ( descriptor  d,
const std::string &  address,
int  port 
) [inline, static]

Connect a socket to a port.

Parameters:
dThe descriptor of the socket to connect.
addressThe adress to connect to.
portThe port to connect to.
Returns:
true if the connection is available.

Definition at line 113 of file socket_traits_unix.hpp.

References CLAW_PRECOND, and invalid_socket.

Referenced by claw::net::basic_socketbuf< CharT, Traits >::connect().

    {
      CLAW_PRECOND( d != invalid_socket );

      bool result = false;
      struct hostent* hp = gethostbyname(address.c_str());

      if (hp)
  {
    struct sockaddr_in sa;

    memset (&sa, '\0', sizeof(sa));
    sa.sin_family = hp->h_addrtype;
    sa.sin_port = htons(port);
    memcpy( &sa.sin_addr, hp->h_addr, hp->h_length );
      
    if (::connect(d, (struct sockaddr*)&sa, (socklen_t)sizeof(sa)) != -1)
      result = true;
  }

      return result;
    } // socket_traits_unix::connect()
static bool claw::socket_traits_unix::init ( ) [inline, static]

Initialize the use of the socket library.

Returns:
true if the initialization is successful.

Definition at line 65 of file socket_traits_unix.hpp.

Referenced by claw::net::socket_server::init().

    {
      return true;
    } // socket_traits_unix::init()
static bool claw::socket_traits_unix::is_open ( descriptor  d) [inline, static]

Tell if a descriptor is a opened socket.

Parameters:
dThe descriptor to test.

Definition at line 221 of file socket_traits_unix.hpp.

Referenced by claw::net::basic_socketbuf< CharT, Traits >::open().

    {
      struct stat buf;

      return fstat(d, &buf) == 0;
    } // socket_traits_unix::is_open()
static bool claw::socket_traits_unix::listen ( descriptor  d,
int  port,
unsigned int  queue_size 
) [inline, static]

Open a socket for incoming connexions.

Parameters:
dThe descriptor of the socket to open.
portThe port to connect to.
queue_sizeThe size of the queue for incoming connexions.
Returns:
true if the socket has been opened.

Definition at line 144 of file socket_traits_unix.hpp.

References CLAW_PRECOND, and invalid_socket.

Referenced by claw::net::socket_server::open().

    {
      CLAW_PRECOND( d != invalid_socket );

      struct sockaddr_in addr;
      
      memset (&addr, '\0', sizeof(addr));
      addr.sin_family = AF_INET;
      addr.sin_port = htons(port);
      addr.sin_addr.s_addr = htonl(INADDR_ANY);
      
      if ( bind(d, (struct sockaddr*)&addr, sizeof(addr)) != -1 )
  return ::listen(d, queue_size) != -1;
      else
  return false;
    } // socket_traits_unix::connect()
static descriptor claw::socket_traits_unix::open ( ) [inline, static]

Open a socket.

Returns:
The descriptor on the loaded socket.

Definition at line 85 of file socket_traits_unix.hpp.

References invalid_socket.

Referenced by claw::net::basic_socket::open().

    {
      descriptor fd = invalid_socket;

      fd = socket(AF_INET, SOCK_STREAM, 0);

      return fd;
    } // socket_traits_unix::open()
static bool claw::socket_traits_unix::release ( ) [inline, static]

Close the socket library.

Returns:
true if the operation is successful.

Definition at line 75 of file socket_traits_unix.hpp.

Referenced by claw::net::socket_server::release().

    {
      return true;
    } // socket_traits_unix::release()
static bool claw::socket_traits_unix::select_read ( descriptor  d,
int  time_limit = -1 
) [inline, static]

Select a socket for reading.

Parameters:
dThe descriptor of the socket to read.
time_limitMaximum 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 170 of file socket_traits_unix.hpp.

References CLAW_PRECOND, and invalid_socket.

Referenced by claw::net::socket_server::accept(), and claw::net::basic_socketbuf< CharT, Traits >::underflow().

    {
      CLAW_PRECOND( d != invalid_socket );

      struct timeval tv, *ptv;
      fd_set fds;

      if ( time_limit < 0 )
        ptv = NULL;
      else
        {
          tv.tv_sec  = time_limit;
          tv.tv_usec = 0;
          
          ptv = &tv;
        }

      FD_ZERO(&fds);
      FD_SET(d, &fds);

      select( d+1, &fds, NULL, NULL, ptv );

      return FD_ISSET( d, &fds );
    } // socket_traits_unix::select_read()
static bool claw::socket_traits_unix::valid_descriptor ( descriptor  d) [inline, static]

Tell if a descriptor is a valid socket descriptor.

Parameters:
dThe descriptor to test.

Definition at line 211 of file socket_traits_unix.hpp.

References invalid_socket.

Referenced by claw::net::basic_socketbuf< CharT, Traits >::connect(), claw::net::basic_socket::is_open(), and claw::net::basic_socket::open().

    {
      return d != invalid_socket;
    } // socket_traits_unix::valid_descriptor()

Member Data Documentation

Invalid socket descriptor.

Definition at line 57 of file socket_traits_unix.hpp.

Referenced by claw::net::basic_socket::close(), connect(), listen(), open(), select_read(), and valid_descriptor().


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