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;
}
}