Mercurial > irccd
view irccd/transport-server.cpp @ 20:8384df86e195
Docs: use nohighlight on non code, #418
author | David Demelier <markand@malikania.fr> |
---|---|
date | Fri, 12 Feb 2016 16:12:58 +0100 |
parents | 1158cffe5a5e |
children |
line wrap: on
line source
/* * transport-server.cpp -- I/O for irccd clients (acceptors) * * Copyright (c) 2013-2016 David Demelier <markand@malikania.fr> * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #if !defined(IRCCD_SYSTEM_WINDOWS) # include <cstdio> #endif #include <sstream> #include "transport-server.h" namespace irccd { /* * TransportServerIp * ------------------------------------------------------------------ */ TransportServerIp::TransportServerIp(int domain, const std::string &address, int port, bool ipv6only) : m_socket(domain, SOCK_STREAM, 0) { m_socket.set(net::option::SockReuseAddress{true}); /* Disable or enable IPv4 when using IPv6 */ if (domain == AF_INET6) m_socket.set(net::option::Ipv6Only{ipv6only}); m_socket.bind(net::address::Ip{address, port, static_cast<net::address::Ip::Type>(domain)}); m_socket.listen(); log::info() << "transport: listening on " << address << ", port " << port << std::endl; } net::Handle TransportServerIp::handle() noexcept { return m_socket.handle(); } std::shared_ptr<TransportClient> TransportServerIp::accept() { return std::make_shared<TransportClientBase<net::address::Ip>>(m_socket.accept(nullptr)); } /* * TransportServerUnix * ------------------------------------------------------------------ */ #if !defined(IRCCD_SYSTEM_WINDOWS) TransportServerUnix::TransportServerUnix(std::string path) : m_path(std::move(path)) { m_socket.bind(net::address::Local{m_path, true}); m_socket.listen(); log::info() << "transport: listening on " << m_path << std::endl; } TransportServerUnix::~TransportServerUnix() { ::remove(m_path.c_str()); } net::Handle TransportServerUnix::handle() noexcept { return m_socket.handle(); } std::shared_ptr<TransportClient> TransportServerUnix::accept() { return std::make_shared<TransportClientBase<net::address::Local>>(m_socket.accept(nullptr)); } #endif } // !irccd