diff options
author | Devtools Arcadia <arcadia-devtools@yandex-team.ru> | 2022-02-07 18:08:42 +0300 |
---|---|---|
committer | Devtools Arcadia <arcadia-devtools@mous.vla.yp-c.yandex.net> | 2022-02-07 18:08:42 +0300 |
commit | 1110808a9d39d4b808aef724c861a2e1a38d2a69 (patch) | |
tree | e26c9fed0de5d9873cce7e00bc214573dc2195b7 /contrib/libs/poco/Net/src/ServerSocket.cpp | |
download | ydb-1110808a9d39d4b808aef724c861a2e1a38d2a69.tar.gz |
intermediate changes
ref:cde9a383711a11544ce7e107a78147fb96cc4029
Diffstat (limited to 'contrib/libs/poco/Net/src/ServerSocket.cpp')
-rw-r--r-- | contrib/libs/poco/Net/src/ServerSocket.cpp | 158 |
1 files changed, 158 insertions, 0 deletions
diff --git a/contrib/libs/poco/Net/src/ServerSocket.cpp b/contrib/libs/poco/Net/src/ServerSocket.cpp new file mode 100644 index 0000000000..c44a52b5b5 --- /dev/null +++ b/contrib/libs/poco/Net/src/ServerSocket.cpp @@ -0,0 +1,158 @@ +// +// ServerSocket.cpp +// +// Library: Net +// Package: Sockets +// Module: ServerSocket +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#include "Poco/Net/ServerSocket.h" +#include "Poco/Net/ServerSocketImpl.h" +#include "Poco/Exception.h" + + +using Poco::InvalidArgumentException; + + +namespace Poco { +namespace Net { + + +ServerSocket::ServerSocket(): Socket(new ServerSocketImpl) +{ +} + + +ServerSocket::ServerSocket(const Socket& socket): Socket(socket) +{ + if (!dynamic_cast<ServerSocketImpl*>(impl())) + throw InvalidArgumentException("Cannot assign incompatible socket"); +} + + +ServerSocket::ServerSocket(const SocketAddress& address, int backlog): Socket(new ServerSocketImpl) +{ + impl()->bind(address, true); + impl()->listen(backlog); +} + + +ServerSocket::ServerSocket(Poco::UInt16 port, int backlog): Socket(new ServerSocketImpl) +{ + IPAddress wildcardAddr; + SocketAddress address(wildcardAddr, port); + impl()->bind(address, true); + impl()->listen(backlog); +} + + +ServerSocket::ServerSocket(SocketImpl* pImpl, bool /*ignore*/): Socket(pImpl) +{ +} + + +ServerSocket::~ServerSocket() +{ +} + + +ServerSocket& ServerSocket::operator = (const Socket& socket) +{ + if (dynamic_cast<ServerSocketImpl*>(socket.impl())) + Socket::operator = (socket); + else + throw InvalidArgumentException("Cannot assign incompatible socket"); + return *this; +} + + +void ServerSocket::bind(const SocketAddress& address, bool reuseAddress) +{ + impl()->bind(address, reuseAddress); +} + + +void ServerSocket::bind(const SocketAddress& address, bool reuseAddress, bool reusePort) +{ + impl()->bind(address, reuseAddress, reusePort); +} + + +void ServerSocket::bind(Poco::UInt16 port, bool reuseAddress) +{ + IPAddress wildcardAddr; + SocketAddress address(wildcardAddr, port); + impl()->bind(address, reuseAddress); +} + + +void ServerSocket::bind(Poco::UInt16 port, bool reuseAddress, bool reusePort) +{ + IPAddress wildcardAddr; + SocketAddress address(wildcardAddr, port); + impl()->bind(address, reuseAddress, reusePort); +} + + +void ServerSocket::bind6(const SocketAddress& address, bool reuseAddress, bool ipV6Only) +{ + impl()->bind6(address, reuseAddress, ipV6Only); +} + + +void ServerSocket::bind6(const SocketAddress& address, bool reuseAddress, bool reusePort, bool ipV6Only) +{ + impl()->bind6(address, reuseAddress, reusePort, ipV6Only); +} + + +void ServerSocket::bind6(Poco::UInt16 port, bool reuseAddress, bool ipV6Only) +{ +#if defined(POCO_HAVE_IPv6) + IPAddress wildcardAddr(IPAddress::IPv6); + SocketAddress address(wildcardAddr, port); + impl()->bind6(address, reuseAddress, ipV6Only); +#else + throw Poco::NotImplementedException("No IPv6 support available"); +#endif // POCO_HAVE_IPv6 +} + + +void ServerSocket::bind6(Poco::UInt16 port, bool reuseAddress, bool reusePort, bool ipV6Only) +{ +#if defined(POCO_HAVE_IPv6) + IPAddress wildcardAddr(IPAddress::IPv6); + SocketAddress address(wildcardAddr, port); + impl()->bind6(address, reuseAddress, reusePort, ipV6Only); +#else + throw Poco::NotImplementedException("No IPv6 support available"); +#endif // POCO_HAVE_IPv6 +} + + +void ServerSocket::listen(int backlog) +{ + impl()->listen(backlog); +} + + +StreamSocket ServerSocket::acceptConnection(SocketAddress& clientAddr) +{ + return StreamSocket(impl()->acceptConnection(clientAddr)); +} + + +StreamSocket ServerSocket::acceptConnection() +{ + SocketAddress clientAddr; + return StreamSocket(impl()->acceptConnection(clientAddr)); +} + + +} } // namespace Poco::Net |