Commit 77c747a8 authored by Max Kellermann's avatar Max Kellermann

net/SocketAddress: add method GetPort()

parent 907fb257
/* /*
* Copyright (C) 2012-2015 Max Kellermann <max.kellermann@gmail.com> * Copyright (C) 2012-2017 Max Kellermann <max.kellermann@gmail.com>
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions * modification, are permitted provided that the following conditions
...@@ -27,12 +27,43 @@ ...@@ -27,12 +27,43 @@
* OF THE POSSIBILITY OF SUCH DAMAGE. * OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
#include "config.h"
#include "SocketAddress.hxx" #include "SocketAddress.hxx"
#include <string.h> #include <string.h>
#ifdef HAVE_TCP
#ifdef WIN32
#include <ws2tcpip.h>
#else
#include <netinet/in.h>
#endif
#endif
bool bool
SocketAddress::operator==(SocketAddress other) const noexcept SocketAddress::operator==(SocketAddress other) const noexcept
{ {
return size == other.size && memcmp(address, other.address, size) == 0; return size == other.size && memcmp(address, other.address, size) == 0;
} }
#ifdef HAVE_TCP
unsigned
SocketAddress::GetPort() const
{
if (IsNull())
return 0;
switch (GetFamily()) {
case AF_INET:
return ntohs(((const struct sockaddr_in *)(const void *)address)->sin_port);
case AF_INET6:
return ntohs(((const struct sockaddr_in6 *)(const void *)address)->sin6_port);
default:
return 0;
}
}
#endif
/* /*
* Copyright (C) 2012-2015 Max Kellermann <max.kellermann@gmail.com> * Copyright (C) 2012-2017 Max Kellermann <max.kellermann@gmail.com>
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions * modification, are permitted provided that the following conditions
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
#ifndef SOCKET_ADDRESS_HXX #ifndef SOCKET_ADDRESS_HXX
#define SOCKET_ADDRESS_HXX #define SOCKET_ADDRESS_HXX
#include "Features.hxx"
#include "Compiler.h" #include "Compiler.h"
#include <cstddef> #include <cstddef>
...@@ -92,6 +93,14 @@ public: ...@@ -92,6 +93,14 @@ public:
return GetFamily() != AF_UNSPEC; return GetFamily() != AF_UNSPEC;
} }
#ifdef HAVE_TCP
/**
* Extract the port number. Returns 0 if not applicable.
*/
gcc_pure
unsigned GetPort() const;
#endif
gcc_pure gcc_pure
bool operator==(const SocketAddress other) const noexcept; bool operator==(const SocketAddress other) const noexcept;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment