net/SocketAddress: add method GetPort()

This commit is contained in:
Max Kellermann 2017-05-17 09:28:12 +02:00
parent 907fb257cd
commit 77c747a8fd
2 changed files with 42 additions and 2 deletions

View File

@ -1,5 +1,5 @@
/*
* 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
* modification, are permitted provided that the following conditions
@ -27,12 +27,43 @@
* OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "config.h"
#include "SocketAddress.hxx"
#include <string.h>
#ifdef HAVE_TCP
#ifdef WIN32
#include <ws2tcpip.h>
#else
#include <netinet/in.h>
#endif
#endif
bool
SocketAddress::operator==(SocketAddress other) const noexcept
{
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

View File

@ -1,5 +1,5 @@
/*
* 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
* modification, are permitted provided that the following conditions
@ -30,6 +30,7 @@
#ifndef SOCKET_ADDRESS_HXX
#define SOCKET_ADDRESS_HXX
#include "Features.hxx"
#include "Compiler.h"
#include <cstddef>
@ -92,6 +93,14 @@ public:
return GetFamily() != AF_UNSPEC;
}
#ifdef HAVE_TCP
/**
* Extract the port number. Returns 0 if not applicable.
*/
gcc_pure
unsigned GetPort() const;
#endif
gcc_pure
bool operator==(const SocketAddress other) const noexcept;