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:
d The 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:
d The 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:
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 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.

    {
      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:
d The 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:
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 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.

    {
      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.

    {
      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:
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 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:
d The 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: