From 41fa94478a9030d4dcf1c2653e50d3535763ab31 Mon Sep 17 00:00:00 2001 From: Alec Iverson Date: Fri, 12 Aug 2016 16:29:42 -0700 Subject: [PATCH] Added address arg to listen/bind on (sockets) --- include/SFML/Network/IpAddress.h | 6 ++++++ include/SFML/Network/TcpListener.h | 6 +++++- include/SFML/Network/UdpSocket.h | 9 ++++++--- src/SFML/Network/IpAddress.cpp | 4 ++++ src/SFML/Network/TcpListener.cpp | 5 +++-- src/SFML/Network/UdpSocket.cpp | 5 +++-- 6 files changed, 27 insertions(+), 8 deletions(-) diff --git a/include/SFML/Network/IpAddress.h b/include/SFML/Network/IpAddress.h index 92d9dc5..7ca444c 100644 --- a/include/SFML/Network/IpAddress.h +++ b/include/SFML/Network/IpAddress.h @@ -48,6 +48,12 @@ typedef struct //////////////////////////////////////////////////////////// CSFML_NETWORK_API const sfIpAddress sfIpAddress_None; +//////////////////////////////////////////////////////////// +/// \brief Value representing any address (0.0.0.0) +/// +//////////////////////////////////////////////////////////// +CSFML_NETWORK_API const sfIpAddress sfIpAddress_Any; + //////////////////////////////////////////////////////////// /// \brief Local host IP address (127.0.0.1, or "localhost") /// diff --git a/include/SFML/Network/TcpListener.h b/include/SFML/Network/TcpListener.h index 3ac3507..9e65c58 100644 --- a/include/SFML/Network/TcpListener.h +++ b/include/SFML/Network/TcpListener.h @@ -30,6 +30,7 @@ //////////////////////////////////////////////////////////// #include #include +#include #include @@ -98,13 +99,16 @@ CSFML_NETWORK_API unsigned short sfTcpListener_getLocalPort(const sfTcpListener* /// If the socket was previously listening to another port, /// it will be stopped first and bound to the new port. /// +/// If there is no specific address to listen to, pass sfIpAddress_Any +/// /// \param listener TCP listener object /// \param port Port to listen for new connections +/// \param address Address of the interface to listen on /// /// \return Status code /// //////////////////////////////////////////////////////////// -CSFML_NETWORK_API sfSocketStatus sfTcpListener_listen(sfTcpListener* listener, unsigned short port); +CSFML_NETWORK_API sfSocketStatus sfTcpListener_listen(sfTcpListener* listener, unsigned short port, sfIpAddress address); //////////////////////////////////////////////////////////// /// \brief Accept a new connection diff --git a/include/SFML/Network/UdpSocket.h b/include/SFML/Network/UdpSocket.h index 21dc2b5..e0d9fba 100644 --- a/include/SFML/Network/UdpSocket.h +++ b/include/SFML/Network/UdpSocket.h @@ -101,13 +101,16 @@ CSFML_NETWORK_API unsigned short sfUdpSocket_getLocalPort(const sfUdpSocket* soc /// system to automatically pick an available port, and then /// call sfUdpSocket_getLocalPort to retrieve the chosen port. /// -/// \param socket UDP socket object -/// \param port Port to bind the socket to +/// If there is no specific address to listen to, pass sfIpAddress_Any +/// +/// \param socket UDP socket object +/// \param port Port to bind the socket to +/// \param address Address of the interface to bind to /// /// \return Status code /// //////////////////////////////////////////////////////////// -CSFML_NETWORK_API sfSocketStatus sfUdpSocket_bind(sfUdpSocket* socket, unsigned short port); +CSFML_NETWORK_API sfSocketStatus sfUdpSocket_bind(sfUdpSocket* socket, unsigned short port, sfIpAddress address); //////////////////////////////////////////////////////////// /// \brief Unbind a UDP socket from the local port to which it is bound diff --git a/src/SFML/Network/IpAddress.cpp b/src/SFML/Network/IpAddress.cpp index 9f0e6de..07bfe71 100644 --- a/src/SFML/Network/IpAddress.cpp +++ b/src/SFML/Network/IpAddress.cpp @@ -53,6 +53,10 @@ namespace const sfIpAddress sfIpAddress_None = sfIpAddress_fromBytes(0, 0, 0, 0); +//////////////////////////////////////////////////////////// +const sfIpAddress sfIpAddress_Any = sfIpAddress_fromBytes(0, 0, 0, 0); + + //////////////////////////////////////////////////////////// const sfIpAddress sfIpAddress_LocalHost = sfIpAddress_fromBytes(127, 0, 0, 1); diff --git a/src/SFML/Network/TcpListener.cpp b/src/SFML/Network/TcpListener.cpp index dded940..f64a0d2 100644 --- a/src/SFML/Network/TcpListener.cpp +++ b/src/SFML/Network/TcpListener.cpp @@ -67,11 +67,12 @@ unsigned short sfTcpListener_getLocalPort(const sfTcpListener* listener) //////////////////////////////////////////////////////////// -sfSocketStatus sfTcpListener_listen(sfTcpListener* listener, unsigned short port) +sfSocketStatus sfTcpListener_listen(sfTcpListener* listener, unsigned short port, sfIpAddress address) { CSFML_CHECK_RETURN(listener, sfSocketError); - return static_cast(listener->This.listen(port)); + sf::IpAddress sfmlAddress(address.address); + return static_cast(listener->This.listen(port, sfmlAddress)); } diff --git a/src/SFML/Network/UdpSocket.cpp b/src/SFML/Network/UdpSocket.cpp index 9e181aa..60dd518 100644 --- a/src/SFML/Network/UdpSocket.cpp +++ b/src/SFML/Network/UdpSocket.cpp @@ -68,11 +68,12 @@ unsigned short sfUdpSocket_getLocalPort(const sfUdpSocket* socket) //////////////////////////////////////////////////////////// -sfSocketStatus sfUdpSocket_bind(sfUdpSocket* socket, unsigned short port) +sfSocketStatus sfUdpSocket_bind(sfUdpSocket* socket, unsigned short port, sfIpAddress address) { CSFML_CHECK_RETURN(socket, sfSocketError); - return static_cast(socket->This.bind(port)); + sf::IpAddress sfmlAddress(address.address); + return static_cast(socket->This.bind(port, sfmlAddress)); }