All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines
Public Member Functions | Static Public Member Functions
GpCoreTools::UdpServerStream Class Reference

#include <UdpServerStream.h>

Inheritance diagram for GpCoreTools::UdpServerStream:
GpCoreTools::Stream

List of all members.

Public Member Functions

virtual short eventTypes ()
bool listen (uint16_t port)
 UdpServerStream ()

Static Public Member Functions

static bool send (uint16_t port, const char *bytes, int byteCount)

Constructor & Destructor Documentation

Description of constructor still missing

References GpCoreTools::CoreApplication::exit(), GpCoreTools::Stream::fileDescriptor(), GpCoreTools::Stream::setFileDescriptor(), TRACE, and GpCoreTools::Log::write().

    : Stream()
{
  TRACE;
  setFileDescriptor(socket(AF_INET, SOCK_DGRAM, 0));
  if(fileDescriptor()<=0) {
    Log::write(1, "udp server socket %s\n", strerror(errno));
    CoreApplication::exit(2);
  }
  int optval=1;
  if(setsockopt(fileDescriptor(),SOL_SOCKET,SO_REUSEADDR,&optval,sizeof(optval)) < 0) {
    Log::write(0, "udp server reuseaddr: [%i] %s\n", errno, strerror(errno));
    CoreApplication::exit(2);
  }
}

Member Function Documentation

virtual short GpCoreTools::UdpServerStream::eventTypes ( ) [inline, virtual]

Implements GpCoreTools::Stream.

{return POLLIN;}
bool GpCoreTools::UdpServerStream::listen ( uint16_t  port)

References GpCoreTools::Stream::fileDescriptor(), TRACE, and GpCoreTools::Log::write().

{
  TRACE;
  if(fileDescriptor()<=0) return false;
  sockaddr_in addr;
  addr.sin_family=AF_INET;
  addr.sin_port=htons(port);
  addr.sin_addr.s_addr=htonl(INADDR_ANY);
  if(bind(fileDescriptor(), (sockaddr *)&addr, sizeof(sockaddr_in))<0) {
    Log::write(1, "udp server listen: %s\n", strerror(errno));
    return false;
  } else {
    return true;
  }
}
bool GpCoreTools::UdpServerStream::send ( uint16_t  port,
const char *  bytes,
int  byteCount 
) [static]

References GpCoreTools::Stream::close(), GpCoreTools::Address::me(), GpCoreTools::Address::subnet(), TRACE, GpCoreTools::Address::value(), and GpCoreTools::Log::write().

{
  TRACE;
  int fd=socket(AF_INET,SOCK_DGRAM,0);
  if(fd<0) {
    Log::write(0, "udp send socket error: [%i] %s\n", errno, strerror(errno));
    return false;
  }
  int optval=1;
  if(setsockopt(fd, SOL_SOCKET, SO_BROADCAST, &optval, sizeof(optval))<0) {
    Log::write(0, "udb broadcast: [%i] %s\n", errno, strerror(errno));
    return false;
  }
  struct sockaddr_in addr;
  addr.sin_family=AF_INET;
  addr.sin_addr.s_addr=Address::me().subnet().value();
  addr.sin_port=htons(port);
  if(sendto(fd, bytes, byteCount, 0,(struct sockaddr *) &addr, sizeof(addr))<0) {
    Log::write(0, "udp sendto error: %s\n", strerror(errno));
    ::close(fd);
    return false;
  } else {
    ::close(fd);
    return true;
  }
}

The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines