diff options
author | geronimo <geronimo013@gmx.de> | 2012-07-13 04:26:40 +0200 |
---|---|---|
committer | geronimo <geronimo013@gmx.de> | 2012-07-13 04:26:40 +0200 |
commit | 2d48ae784ea6828e8626c32c848f64232d8f35c0 (patch) | |
tree | fab114b03e91125783a778b835dd1913b039cebe /libs/networking/src/ServerSocket.cc | |
download | cmp-2d48ae784ea6828e8626c32c848f64232d8f35c0.tar.gz cmp-2d48ae784ea6828e8626c32c848f64232d8f35c0.tar.bz2 |
initial import
Diffstat (limited to 'libs/networking/src/ServerSocket.cc')
-rw-r--r-- | libs/networking/src/ServerSocket.cc | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/libs/networking/src/ServerSocket.cc b/libs/networking/src/ServerSocket.cc new file mode 100644 index 0000000..2ff92fb --- /dev/null +++ b/libs/networking/src/ServerSocket.cc @@ -0,0 +1,84 @@ +/** + * ======================== legal notice ====================== + * + * File: ServerSocket.cc + * Created: 4. Juli 2012, 07:28 + * Author: <a href="mailto:geronimo013@gmx.de">Geronimo</a> + * Project: libnetworking: classes for tcp/ip sockets and http-protocol handling + * + * CMP - compound media player + * + * is a client/server mediaplayer intended to play any media from any workstation + * without the need to export or mount shares. cmps is an easy to use backend + * with a (ready to use) HTML-interface. Additionally the backend supports + * authentication via HTTP-digest authorization. + * cmpc is a client with vdr-like osd-menues. + * + * Copyright (c) 2012 Reinhard Mantey, some rights reserved! + * published under Creative Commons by-sa + * For details see http://creativecommons.org/licenses/by-sa/3.0/ + * + * The cmp project's homepage is at http://projects.vdr-developer.org/projects/cmp + * + * -------------------------------------------------------------- + */ +#include <ServerSocket.h> +#include <Logging.h> +#include <fcntl.h> + +cServerSocket::cServerSocket(int Port, int Queue) + : cAbstractSocket(Port, Queue) + , port(Port) + , active(true) +{ +} + +cServerSocket::~cServerSocket() +{ +} + +bool cServerSocket::Open(void) +{ + return cAbstractSocket::Open(port); +} + +cConnectionPoint *cServerSocket::Accept(void) +{ + cConnectionPoint *rv = NULL; + + while (active && !rv) { + rv = cAbstractSocket::Accept(port, 500); + } + return rv; +} + +void cServerSocket::ConfigureSocket(int Socket) +{ + if (!ForceBlockingIO()) { + // make it non-blocking: + int oldflags = fcntl(Socket, F_GETFL, 0); + + if (oldflags < 0) { + esyslog("could not retrieve old socket flags"); + + return; + } + + oldflags |= O_NONBLOCK; + if (fcntl(Socket, F_SETFL, oldflags) < 0) { + esyslog("failed to set nonblocking state of socket"); + + return; + } + } +} + +void cServerSocket::SetBlockingIO(bool ForceBlockingIO) +{ + cAbstractSocket::SetBlockingIO(ForceBlockingIO); +} + +bool cServerSocket::ForceBlockingIO() const +{ + return cAbstractSocket::ForceBlockingIO(); +} |