aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/libs/poco/Net/src/ServerSocket.cpp
diff options
context:
space:
mode:
authorDevtools Arcadia <arcadia-devtools@yandex-team.ru>2022-02-07 18:08:42 +0300
committerDevtools Arcadia <arcadia-devtools@mous.vla.yp-c.yandex.net>2022-02-07 18:08:42 +0300
commit1110808a9d39d4b808aef724c861a2e1a38d2a69 (patch)
treee26c9fed0de5d9873cce7e00bc214573dc2195b7 /contrib/libs/poco/Net/src/ServerSocket.cpp
downloadydb-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.cpp158
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