aboutsummaryrefslogtreecommitdiff
path: root/src/server/shared
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2014-07-29 02:02:38 +0200
committerShauren <shauren.trinity@gmail.com>2014-07-29 02:02:38 +0200
commit903fbb6be74c4664aed1b981f9f75e2678323bb0 (patch)
tree6d2ab7bdf8c0e182f0f829e4f2bc6080703588a0 /src/server/shared
parentfc687effce3c877c8e4b02110973bf416a2ccdd5 (diff)
parent833195062c310685b479ed16ff4ac5ef5664c021 (diff)
Merge branch 'master' of https://github.com/TrinityCore/TrinityCore into 4.3.4
Diffstat (limited to 'src/server/shared')
-rw-r--r--src/server/shared/Networking/Socket.h33
1 files changed, 30 insertions, 3 deletions
diff --git a/src/server/shared/Networking/Socket.h b/src/server/shared/Networking/Socket.h
index 9c3ec180b0a..38d88e3592c 100644
--- a/src/server/shared/Networking/Socket.h
+++ b/src/server/shared/Networking/Socket.h
@@ -34,13 +34,40 @@ using boost::asio::ip::tcp;
template<class T, class PacketType>
class Socket : public std::enable_shared_from_this<T>
{
+ typedef typename std::conditional<std::is_pointer<PacketType>::value, PacketType, PacketType const&>::type WritePacketType;
+
public:
Socket(tcp::socket&& socket, std::size_t headerSize) : _socket(std::move(socket)), _headerSize(headerSize) { }
virtual void Start() = 0;
- boost::asio::ip::address GetRemoteIpAddress() const { return _socket.remote_endpoint().address(); };
- uint16 GetRemotePort() const { return _socket.remote_endpoint().port(); }
+ boost::asio::ip::address GetRemoteIpAddress() const
+ {
+ boost::system::error_code error;
+ auto ep = _socket.remote_endpoint(error);
+
+ if (error)
+ {
+ TC_LOG_DEBUG("network", "Socket::GetRemoteIpAddress: errored with: %i (%s)", error.value(), error.message().c_str());
+ return boost::asio::ip::address();
+ }
+ else
+ return ep.address();
+ }
+
+ uint16 GetRemotePort() const
+ {
+ boost::system::error_code error;
+ auto ep = _socket.remote_endpoint(error);
+
+ if (error)
+ {
+ TC_LOG_DEBUG("network", "Socket::GetRemotePort: errored with: %i (%s)", error.value(), error.message().c_str());
+ return 0;
+ }
+ else
+ return ep.port();
+ }
void AsyncReadHeader()
{
@@ -68,7 +95,7 @@ public:
}
}
- void AsyncWrite(PacketType const& data)
+ void AsyncWrite(WritePacketType data)
{
boost::asio::async_write(_socket, boost::asio::buffer(data), std::bind(&Socket<T, PacketType>::WriteHandler, this->shared_from_this(), std::placeholders::_1,
std::placeholders::_2));