/src/SFML/Network/Win32/SocketImpl.hpp
C++ Header | 112 lines | 30 code | 14 blank | 68 comment | 0 complexity | 3c32071b74448c8a7545590ac2ebd3c0 MD5 | raw file
- ////////////////////////////////////////////////////////////
- //
- // SFML - Simple and Fast Multimedia Library
- // Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org)
- //
- // This software is provided 'as-is', without any express or implied warranty.
- // In no event will the authors be held liable for any damages arising from the use of this software.
- //
- // Permission is granted to anyone to use this software for any purpose,
- // including commercial applications, and to alter it and redistribute it freely,
- // subject to the following restrictions:
- //
- // 1. The origin of this software must not be misrepresented;
- // you must not claim that you wrote the original software.
- // If you use this software in a product, an acknowledgment
- // in the product documentation would be appreciated but is not required.
- //
- // 2. Altered source versions must be plainly marked as such,
- // and must not be misrepresented as being the original software.
- //
- // 3. This notice may not be removed or altered from any source distribution.
- //
- ////////////////////////////////////////////////////////////
- #ifndef SFML_SOCKETIMPL_HPP
- #define SFML_SOCKETIMPL_HPP
- ////////////////////////////////////////////////////////////
- // Headers
- ////////////////////////////////////////////////////////////
- #ifdef _WIN32_WINDOWS
- #undef _WIN32_WINDOWS
- #endif
- #ifdef _WIN32_WINNT
- #undef _WIN32_WINNT
- #endif
- #define _WIN32_WINDOWS 0x0501
- #define _WIN32_WINNT 0x0501
- #include <SFML/Network/Socket.hpp>
- #include <winsock2.h>
- #include <ws2tcpip.h>
- namespace sf
- {
- namespace priv
- {
- ////////////////////////////////////////////////////////////
- /// \brief Helper class implementing all the non-portable
- /// socket stuff; this is the Windows version
- ///
- ////////////////////////////////////////////////////////////
- class SocketImpl
- {
- public:
- ////////////////////////////////////////////////////////////
- // Types
- ////////////////////////////////////////////////////////////
- typedef int AddrLength;
- ////////////////////////////////////////////////////////////
- /// \brief Create an internal sockaddr_in address
- ///
- /// \param address Target address
- /// \param port Target port
- ///
- /// \return sockaddr_in ready to be used by socket functions
- ///
- ////////////////////////////////////////////////////////////
- static sockaddr_in createAddress(Uint32 address, unsigned short port);
- ////////////////////////////////////////////////////////////
- /// \brief Return the value of the invalid socket
- ///
- /// \return Special value of the invalid socket
- ///
- ////////////////////////////////////////////////////////////
- static SocketHandle invalidSocket();
- ////////////////////////////////////////////////////////////
- /// \brief Close and destroy a socket
- ///
- /// \param sock Handle of the socket to close
- ///
- ////////////////////////////////////////////////////////////
- static void close(SocketHandle sock);
- ////////////////////////////////////////////////////////////
- /// \brief Set a socket as blocking or non-blocking
- ///
- /// \param sock Handle of the socket
- /// \param block New blocking state of the socket
- ///
- ////////////////////////////////////////////////////////////
- static void setBlocking(SocketHandle sock, bool block);
- ////////////////////////////////////////////////////////////
- /// Get the last socket error status
- ///
- /// \return Status corresponding to the last socket error
- ///
- ////////////////////////////////////////////////////////////
- static Socket::Status getErrorStatus();
- };
- } // namespace priv
- } // namespace sf
- #endif // SFML_SOCKETIMPL_HPP