All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines
#include <UdpServerStream.h>
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) |
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); } }
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; } }