/cv/of_preRelease_v0062_osxSL_FAT/libs/poco/include/Poco/Net/Socket.h
C++ Header | 604 lines | 268 code | 161 blank | 175 comment | 6 complexity | 326a8351bfe8bdd71a8fa96cc5fbf871 MD5 | raw file
Possible License(s): BSD-3-Clause, MIT, GPL-3.0, LGPL-3.0
- //
- // Socket.h
- //
- // $Id: //poco/1.3/Net/include/Poco/Net/Socket.h#3 $
- //
- // Library: Net
- // Package: Sockets
- // Module: Socket
- //
- // Definition of the Socket class.
- //
- // Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH.
- // and Contributors.
- //
- // Permission is hereby granted, free of charge, to any person or organization
- // obtaining a copy of the software and accompanying documentation covered by
- // this license (the "Software") to use, reproduce, display, distribute,
- // execute, and transmit the Software, and to prepare derivative works of the
- // Software, and to permit third-parties to whom the Software is furnished to
- // do so, all subject to the following:
- //
- // The copyright notices in the Software and this entire statement, including
- // the above license grant, this restriction and the following disclaimer,
- // must be included in all copies of the Software, in whole or in part, and
- // all derivative works of the Software, unless such copies or derivative
- // works are solely in the form of machine-executable object code generated by
- // a source language processor.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- // FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
- // SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
- // FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
- // ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- // DEALINGS IN THE SOFTWARE.
- //
- #ifndef Net_Socket_INCLUDED
- #define Net_Socket_INCLUDED
- #include "Poco/Net/Net.h"
- #include "Poco/Net/SocketImpl.h"
- #include <vector>
- namespace Poco {
- namespace Net {
- class Net_API Socket
- /// Socket is the common base class for
- /// StreamSocket, ServerSocket, DatagramSocket and other
- /// socket classes.
- ///
- /// It provides operations common to all socket types.
- {
- public:
- enum SelectMode
- /// The mode argument to poll() and select().
- {
- SELECT_READ = 1,
- SELECT_WRITE = 2,
- SELECT_ERROR = 4
- };
-
- typedef std::vector<Socket> SocketList;
- Socket();
- /// Creates an uninitialized socket.
- Socket(const Socket& socket);
- /// Copy constructor.
- ///
- /// Attaches the SocketImpl from the other socket and
- /// increments the reference count of the SocketImpl.
-
- Socket& operator = (const Socket& socket);
- /// Assignment operator.
- ///
- /// Releases the socket's SocketImpl and
- /// attaches the SocketImpl from the other socket and
- /// increments the reference count of the SocketImpl.
-
- virtual ~Socket();
- /// Destroys the Socket and releases the
- /// SocketImpl.
-
- bool operator == (const Socket& socket) const;
- /// Returns true if both sockets share the same
- /// SocketImpl, false otherwise.
- bool operator != (const Socket& socket) const;
- /// Returns false if both sockets share the same
- /// SocketImpl, true otherwise.
- bool operator < (const Socket& socket) const;
- /// Compares the SocketImpl pointers.
-
- bool operator <= (const Socket& socket) const;
- /// Compares the SocketImpl pointers.
- bool operator > (const Socket& socket) const;
- /// Compares the SocketImpl pointers.
- bool operator >= (const Socket& socket) const;
- /// Compares the SocketImpl pointers.
-
- void close();
- /// Closes the socket.
- static int select(SocketList& readList, SocketList& writeList, SocketList& exceptList, const Poco::Timespan& timeout);
- /// Determines the status of one or more sockets,
- /// using a call to select().
- ///
- /// ReadList contains the list of sockets which should be
- /// checked for readability.
- ///
- /// WriteList contains the list of sockets which should be
- /// checked for writeability.
- ///
- /// ExceptList contains a list of sockets which should be
- /// checked for a pending error.
- ///
- /// Returns the number of sockets ready.
- ///
- /// After return,
- /// * readList contains those sockets ready for reading,
- /// * writeList contains those sockets ready for writing,
- /// * exceptList contains those sockets with a pending error.
- ///
- /// If the total number of sockets passed in readList, writeList and
- /// exceptList is zero, select() will return immediately and the
- /// return value will be 0.
- bool poll(const Poco::Timespan& timeout, int mode) const;
- /// Determines the status of the socket, using a
- /// call to select().
- ///
- /// The mode argument is constructed by combining the values
- /// of the SelectMode enumeration.
- ///
- /// Returns true if the next operation corresponding to
- /// mode will not block, false otherwise.
- int available() const;
- /// Returns the number of bytes available that can be read
- /// without causing the socket to block.
- void setSendBufferSize(int size);
- /// Sets the size of the send buffer.
-
- int getSendBufferSize() const;
- /// Returns the size of the send buffer.
- ///
- /// The returned value may be different than the
- /// value previously set with setSendBufferSize(),
- /// as the system is free to adjust the value.
- void setReceiveBufferSize(int size);
- /// Sets the size of the receive buffer.
-
- int getReceiveBufferSize() const;
- /// Returns the size of the receive buffer.
- ///
- /// The returned value may be different than the
- /// value previously set with setReceiveBufferSize(),
- /// as the system is free to adjust the value.
- void setSendTimeout(const Poco::Timespan& timeout);
- /// Sets the send timeout for the socket.
-
- Poco::Timespan getSendTimeout() const;
- /// Returns the send timeout for the socket.
- ///
- /// The returned timeout may be different than the
- /// timeout previously set with setSendTimeout(),
- /// as the system is free to adjust the value.
- void setReceiveTimeout(const Poco::Timespan& timeout);
- /// Sets the send timeout for the socket.
- ///
- /// On systems that do not support SO_RCVTIMEO, a
- /// workaround using poll() is provided.
-
- Poco::Timespan getReceiveTimeout() const;
- /// Returns the receive timeout for the socket.
- ///
- /// The returned timeout may be different than the
- /// timeout previously set with getReceiveTimeout(),
- /// as the system is free to adjust the value.
- void setOption(int level, int option, int value);
- /// Sets the socket option specified by level and option
- /// to the given integer value.
- void setOption(int level, int option, unsigned value);
- /// Sets the socket option specified by level and option
- /// to the given integer value.
- void setOption(int level, int option, unsigned char value);
- /// Sets the socket option specified by level and option
- /// to the given integer value.
-
- void setOption(int level, int option, const Poco::Timespan& value);
- /// Sets the socket option specified by level and option
- /// to the given time value.
-
- void setOption(int level, int option, const IPAddress& value);
- /// Sets the socket option specified by level and option
- /// to the given time value.
- void getOption(int level, int option, int& value) const;
- /// Returns the value of the socket option
- /// specified by level and option.
- void getOption(int level, int option, unsigned& value) const;
- /// Returns the value of the socket option
- /// specified by level and option.
- void getOption(int level, int option, unsigned char& value) const;
- /// Returns the value of the socket option
- /// specified by level and option.
- void getOption(int level, int option, Poco::Timespan& value) const;
- /// Returns the value of the socket option
- /// specified by level and option.
-
- void getOption(int level, int option, IPAddress& value) const;
- /// Returns the value of the socket option
- /// specified by level and option.
- void setLinger(bool on, int seconds);
- /// Sets the value of the SO_LINGER socket option.
-
- void getLinger(bool& on, int& seconds) const;
- /// Returns the value of the SO_LINGER socket option.
-
- void setNoDelay(bool flag);
- /// Sets the value of the TCP_NODELAY socket option.
-
- bool getNoDelay() const;
- /// Returns the value of the TCP_NODELAY socket option.
-
- void setKeepAlive(bool flag);
- /// Sets the value of the SO_KEEPALIVE socket option.
-
- bool getKeepAlive() const;
- /// Returns the value of the SO_KEEPALIVE socket option.
-
- void setReuseAddress(bool flag);
- /// Sets the value of the SO_REUSEADDR socket option.
-
- bool getReuseAddress() const;
- /// Returns the value of the SO_REUSEADDR socket option.
- void setReusePort(bool flag);
- /// Sets the value of the SO_REUSEPORT socket option.
- /// Does nothing if the socket implementation does not
- /// support SO_REUSEPORT.
-
- bool getReusePort() const;
- /// Returns the value of the SO_REUSEPORT socket option.
- ///
- /// Returns false if the socket implementation does not
- /// support SO_REUSEPORT.
-
- void setOOBInline(bool flag);
- /// Sets the value of the SO_OOBINLINE socket option.
-
- bool getOOBInline() const;
- /// Returns the value of the SO_OOBINLINE socket option.
- void setBlocking(bool flag);
- /// Sets the socket in blocking mode if flag is true,
- /// disables blocking mode if flag is false.
- bool getBlocking() const;
- /// Returns the blocking mode of the socket.
- /// This method will only work if the blocking modes of
- /// the socket are changed via the setBlocking method!
- SocketAddress address() const;
- /// Returns the IP address and port number of the socket.
-
- SocketAddress peerAddress() const;
- /// Returns the IP address and port number of the peer socket.
- SocketImpl* impl() const;
- /// Returns the SocketImpl for this socket.
-
- static bool supportsIPv4();
- /// Returns true if the system supports IPv4.
-
- static bool supportsIPv6();
- /// Returns true if the system supports IPv6.
- protected:
- Socket(SocketImpl* pImpl);
- /// Creates the Socket and attaches the given SocketImpl.
- /// The socket takes owership of the SocketImpl.
- poco_socket_t sockfd() const;
- /// Returns the socket descriptor for this socket.
- private:
- SocketImpl* _pImpl;
- };
- //
- // inlines
- //
- inline bool Socket::operator == (const Socket& socket) const
- {
- return _pImpl == socket._pImpl;
- }
- inline bool Socket::operator != (const Socket& socket) const
- {
- return _pImpl != socket._pImpl;
- }
- inline bool Socket::operator < (const Socket& socket) const
- {
- return _pImpl < socket._pImpl;
- }
- inline bool Socket::operator <= (const Socket& socket) const
- {
- return _pImpl <= socket._pImpl;
- }
- inline bool Socket::operator > (const Socket& socket) const
- {
- return _pImpl > socket._pImpl;
- }
- inline bool Socket::operator >= (const Socket& socket) const
- {
- return _pImpl >= socket._pImpl;
- }
- inline void Socket::close()
- {
- _pImpl->close();
- }
- inline bool Socket::poll(const Poco::Timespan& timeout, int mode) const
- {
- return _pImpl->poll(timeout, mode);
- }
- inline int Socket::available() const
- {
- return _pImpl->available();
- }
- inline void Socket::setSendBufferSize(int size)
- {
- _pImpl->setSendBufferSize(size);
- }
-
- inline int Socket::getSendBufferSize() const
- {
- return _pImpl->getSendBufferSize();
- }
- inline void Socket::setReceiveBufferSize(int size)
- {
- _pImpl->setReceiveBufferSize(size);
- }
-
- inline int Socket::getReceiveBufferSize() const
- {
- return _pImpl->getReceiveBufferSize();
- }
- inline void Socket::setSendTimeout(const Poco::Timespan& timeout)
- {
- _pImpl->setSendTimeout(timeout);
- }
- inline Poco::Timespan Socket::getSendTimeout() const
- {
- return _pImpl->getSendTimeout();
- }
- inline void Socket::setReceiveTimeout(const Poco::Timespan& timeout)
- {
- _pImpl->setReceiveTimeout(timeout);
- }
- inline Poco::Timespan Socket::getReceiveTimeout() const
- {
- return _pImpl->getReceiveTimeout();
- }
- inline void Socket::setOption(int level, int option, int value)
- {
- _pImpl->setOption(level, option, value);
- }
- inline void Socket::setOption(int level, int option, unsigned value)
- {
- _pImpl->setOption(level, option, value);
- }
- inline void Socket::setOption(int level, int option, unsigned char value)
- {
- _pImpl->setOption(level, option, value);
- }
- inline void Socket::setOption(int level, int option, const Poco::Timespan& value)
- {
- _pImpl->setOption(level, option, value);
- }
-
- inline void Socket::setOption(int level, int option, const IPAddress& value)
- {
- _pImpl->setOption(level, option, value);
- }
- inline void Socket::getOption(int level, int option, int& value) const
- {
- _pImpl->getOption(level, option, value);
- }
- inline void Socket::getOption(int level, int option, unsigned& value) const
- {
- _pImpl->getOption(level, option, value);
- }
- inline void Socket::getOption(int level, int option, unsigned char& value) const
- {
- _pImpl->getOption(level, option, value);
- }
- inline void Socket::getOption(int level, int option, Poco::Timespan& value) const
- {
- _pImpl->getOption(level, option, value);
- }
- inline void Socket::getOption(int level, int option, IPAddress& value) const
- {
- _pImpl->getOption(level, option, value);
- }
- inline void Socket::setLinger(bool on, int seconds)
- {
- _pImpl->setLinger(on, seconds);
- }
-
- inline void Socket::getLinger(bool& on, int& seconds) const
- {
- _pImpl->getLinger(on, seconds);
- }
- inline void Socket::setNoDelay(bool flag)
- {
- _pImpl->setNoDelay(flag);
- }
-
- inline bool Socket::getNoDelay() const
- {
- return _pImpl->getNoDelay();
- }
- inline void Socket::setKeepAlive(bool flag)
- {
- _pImpl->setKeepAlive(flag);
- }
-
- inline bool Socket::getKeepAlive() const
- {
- return _pImpl->getKeepAlive();
- }
- inline void Socket::setReuseAddress(bool flag)
- {
- _pImpl->setReuseAddress(flag);
- }
- inline bool Socket::getReuseAddress() const
- {
- return _pImpl->getReuseAddress();
- }
- inline void Socket::setReusePort(bool flag)
- {
- _pImpl->setReusePort(flag);
- }
- inline bool Socket::getReusePort() const
- {
- return _pImpl->getReusePort();
- }
-
- inline void Socket::setOOBInline(bool flag)
- {
- _pImpl->setOOBInline(flag);
- }
- inline bool Socket::getOOBInline() const
- {
- return _pImpl->getOOBInline();
- }
- inline void Socket::setBlocking(bool flag)
- {
- _pImpl->setBlocking(flag);
- }
- inline bool Socket::getBlocking() const
- {
- return _pImpl->getBlocking();
- }
- inline SocketImpl* Socket::impl() const
- {
- return _pImpl;
- }
- inline poco_socket_t Socket::sockfd() const
- {
- return _pImpl->sockfd();
- }
- inline SocketAddress Socket::address() const
- {
- return _pImpl->address();
- }
-
- inline SocketAddress Socket::peerAddress() const
- {
- return _pImpl->peerAddress();
- }
- inline bool Socket::supportsIPv4()
- {
- return true;
- }
-
-
- inline bool Socket::supportsIPv6()
- {
- #if defined(POCO_HAVE_IPv6)
- return true;
- #else
- return false;
- #endif
- }
- } } // namespace Poco::Net
- #endif // Net_Socket_INCLUDED