123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- //
- // 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
|