helpers/socket.h
Go to the documentation of this file.
// -*- C++ -*-
// Module: Log4CPLUS
// File: socket.h
// Created: 4/2003
// Author: Tad E. Smith
//
//
// Copyright 2003-2017 Tad E. Smith
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#ifndef LOG4CPLUS_HELPERS_SOCKET_HEADER_
#define LOG4CPLUS_HELPERS_SOCKET_HEADER_
#include <log4cplus/config.hxx>
#if defined (LOG4CPLUS_HAVE_PRAGMA_ONCE)
#pragma once
#endif
#include <array>
#include <log4cplus/tstring.h>
#include <log4cplus/helpers/socketbuffer.h>
namespace log4cplus {
namespace helpers {
enum SocketState { ok,
not_opened,
bad_address,
connection_failed,
broken_pipe,
invalid_access_mode,
message_truncated,
accept_interrupted
};
typedef std::ptrdiff_t SOCKET_TYPE;
extern LOG4CPLUS_EXPORT SOCKET_TYPE const INVALID_SOCKET_VALUE;
class LOG4CPLUS_EXPORT AbstractSocket {
public:
AbstractSocket();
AbstractSocket(SOCKET_TYPE sock, SocketState state, int err);
AbstractSocket(AbstractSocket const &) = delete;
AbstractSocket(AbstractSocket &&) LOG4CPLUS_NOEXCEPT;
virtual ~AbstractSocket() = 0;
virtual void close();
virtual bool isOpen() const;
virtual void shutdown();
AbstractSocket & operator = (AbstractSocket && rhs) LOG4CPLUS_NOEXCEPT;
void swap (AbstractSocket &);
protected:
SOCKET_TYPE sock;
SocketState state;
int err;
};
class LOG4CPLUS_EXPORT Socket : public AbstractSocket {
public:
// ctor and dtor
Socket();
Socket(SOCKET_TYPE sock, SocketState state, int err);
Socket(const tstring& address, unsigned short port,
bool udp = false, bool ipv6 = false);
Socket(Socket &&) LOG4CPLUS_NOEXCEPT;
virtual ~Socket();
Socket & operator = (Socket &&) LOG4CPLUS_NOEXCEPT;
// methods
virtual bool read(SocketBuffer& buffer);
virtual bool write(const SocketBuffer& buffer);
virtual bool write(const std::string & buffer);
virtual bool write(std::size_t bufferCount,
SocketBuffer const * const * buffers);
template <typename... Args>
static bool write(Socket & socket, Args &&... args)
{
SocketBuffer const * const buffers[sizeof... (args)] {
(&args)... };
return socket.write (sizeof... (args), buffers);
}
};
class LOG4CPLUS_EXPORT ServerSocket : public AbstractSocket {
public:
ServerSocket(unsigned short port, bool udp = false,
bool ipv6 = false, tstring const & host = tstring ());
ServerSocket(ServerSocket &&) LOG4CPLUS_NOEXCEPT;
virtual ~ServerSocket();
ServerSocket & operator = (ServerSocket &&) LOG4CPLUS_NOEXCEPT;
Socket accept();
void interruptAccept ();
void swap (ServerSocket &);
protected:
std::array<std::ptrdiff_t, 2> interruptHandles;
};
LOG4CPLUS_EXPORT SOCKET_TYPE openSocket(unsigned short port, bool udp,
bool ipv6, SocketState& state);
LOG4CPLUS_EXPORT SOCKET_TYPE openSocket(tstring const & host,
unsigned short port, bool udp, bool ipv6, SocketState& state);
LOG4CPLUS_EXPORT SOCKET_TYPE connectSocket(const log4cplus::tstring& hostn,
unsigned short port, bool udp, bool ipv6, SocketState& state);
LOG4CPLUS_EXPORT SOCKET_TYPE acceptSocket(SOCKET_TYPE sock, SocketState& state);
LOG4CPLUS_EXPORT int closeSocket(SOCKET_TYPE sock);
LOG4CPLUS_EXPORT int shutdownSocket(SOCKET_TYPE sock);
LOG4CPLUS_EXPORT long read(SOCKET_TYPE sock, SocketBuffer& buffer);
LOG4CPLUS_EXPORT long write(SOCKET_TYPE sock,
const SocketBuffer& buffer);
LOG4CPLUS_EXPORT long write(SOCKET_TYPE sock, std::size_t bufferCount,
SocketBuffer const * const * buffers);
LOG4CPLUS_EXPORT long write(SOCKET_TYPE sock,
const std::string & buffer);
LOG4CPLUS_EXPORT tstring getHostname (bool fqdn);
LOG4CPLUS_EXPORT int setTCPNoDelay (SOCKET_TYPE, bool);
} // end namespace helpers
} // end namespace log4cplus
#endif // LOG4CPLUS_HELPERS_SOCKET_HEADER_
log4cplus::helpers::AbstractSocket::close
virtual void close()
Close socket.
log4cplus::helpers::AbstractSocket::state
SocketState state
Definition helpers/socket.h:74
log4cplus::helpers::AbstractSocket::err
int err
Definition helpers/socket.h:75
log4cplus::helpers::AbstractSocket::AbstractSocket
AbstractSocket()
log4cplus::helpers::AbstractSocket::shutdown
virtual void shutdown()
log4cplus::helpers::AbstractSocket::swap
void swap(AbstractSocket &)
log4cplus::helpers::AbstractSocket::isOpen
virtual bool isOpen() const
log4cplus::helpers::AbstractSocket::AbstractSocket
AbstractSocket(AbstractSocket &&) LOG4CPLUS_NOEXCEPT
log4cplus::helpers::AbstractSocket::AbstractSocket
AbstractSocket(SOCKET_TYPE sock, SocketState state, int err)
log4cplus::helpers::AbstractSocket::AbstractSocket
AbstractSocket(AbstractSocket const &)=delete
log4cplus::helpers::AbstractSocket::sock
SOCKET_TYPE sock
Definition helpers/socket.h:73
log4cplus::helpers::ServerSocket::ServerSocket
ServerSocket(unsigned short port, bool udp=false, bool ipv6=false, tstring const &host=tstring())
log4cplus::helpers::ServerSocket::interruptHandles
std::array< std::ptrdiff_t, 2 > interruptHandles
Definition helpers/socket.h:134
log4cplus::helpers::ServerSocket::interruptAccept
void interruptAccept()
log4cplus::helpers::ServerSocket::swap
void swap(ServerSocket &)
log4cplus::helpers::ServerSocket::accept
Socket accept()
log4cplus::helpers::ServerSocket::ServerSocket
ServerSocket(ServerSocket &&) LOG4CPLUS_NOEXCEPT
log4cplus::helpers::SocketBuffer
Definition socketbuffer.h:43
log4cplus::helpers::Socket
This class implements client sockets (also called just "sockets").
Definition helpers/socket.h:84
log4cplus::helpers::Socket::Socket
Socket(Socket &&) LOG4CPLUS_NOEXCEPT
log4cplus::helpers::Socket::Socket
Socket(const tstring &address, unsigned short port, bool udp=false, bool ipv6=false)
log4cplus::helpers::Socket::Socket
Socket(SOCKET_TYPE sock, SocketState state, int err)
log4cplus::helpers::Socket::Socket
Socket()
log4cplus::helpers::Socket::write
virtual bool write(const SocketBuffer &buffer)
log4cplus::helpers::Socket::read
virtual bool read(SocketBuffer &buffer)
config.hxx
LOG4CPLUS_NOEXCEPT
#define LOG4CPLUS_NOEXCEPT
Definition config.hxx:101
log4cplus::helpers
Definition appender.h:50
log4cplus::helpers::INVALID_SOCKET_VALUE
LOG4CPLUS_EXPORT SOCKET_TYPE const INVALID_SOCKET_VALUE
log4cplus::helpers::read
LOG4CPLUS_EXPORT long read(SOCKET_TYPE sock, SocketBuffer &buffer)
log4cplus::helpers::closeSocket
LOG4CPLUS_EXPORT int closeSocket(SOCKET_TYPE sock)
log4cplus::helpers::acceptSocket
LOG4CPLUS_EXPORT SOCKET_TYPE acceptSocket(SOCKET_TYPE sock, SocketState &state)
log4cplus::helpers::setTCPNoDelay
LOG4CPLUS_EXPORT int setTCPNoDelay(SOCKET_TYPE, bool)
log4cplus::helpers::getHostname
LOG4CPLUS_EXPORT tstring getHostname(bool fqdn)
log4cplus::helpers::connectSocket
LOG4CPLUS_EXPORT SOCKET_TYPE connectSocket(const log4cplus::tstring &hostn, unsigned short port, bool udp, bool ipv6, SocketState &state)
log4cplus::helpers::SocketState
SocketState
Definition helpers/socket.h:42
log4cplus::helpers::bad_address
@ bad_address
Definition helpers/socket.h:44
log4cplus::helpers::message_truncated
@ message_truncated
Definition helpers/socket.h:48
log4cplus::helpers::connection_failed
@ connection_failed
Definition helpers/socket.h:45
log4cplus::helpers::invalid_access_mode
@ invalid_access_mode
Definition helpers/socket.h:47
log4cplus::helpers::not_opened
@ not_opened
Definition helpers/socket.h:43
log4cplus::helpers::ok
@ ok
Definition helpers/socket.h:42
log4cplus::helpers::accept_interrupted
@ accept_interrupted
Definition helpers/socket.h:49
log4cplus::helpers::broken_pipe
@ broken_pipe
Definition helpers/socket.h:46
log4cplus::helpers::write
LOG4CPLUS_EXPORT long write(SOCKET_TYPE sock, const SocketBuffer &buffer)
log4cplus::helpers::openSocket
LOG4CPLUS_EXPORT SOCKET_TYPE openSocket(unsigned short port, bool udp, bool ipv6, SocketState &state)
log4cplus::helpers::shutdownSocket
LOG4CPLUS_EXPORT int shutdownSocket(SOCKET_TYPE sock)
log4cplus::helpers::SOCKET_TYPE
std::ptrdiff_t SOCKET_TYPE
Definition helpers/socket.h:52
log4cplus
Definition appender.h:46
log4cplus::tstring
std::basic_string< tchar > tstring
Definition tstring.h:39
socketbuffer.h
tstring.h
LOG4CPLUS_EXPORT
#define LOG4CPLUS_EXPORT
Definition win32.h:141