1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
|
#ifdef _MSC_VER
# include "StdAfx.h"
#elif defined(_WIN32)
# include <windows.h>
#endif
#include "Socket.h"
#include <boost/system/error_code.hpp>
#include "LogOutput.h"
namespace netcode
{
#if BOOST_VERSION < 103600
using namespace boost::system::posix_error;
#else
using namespace boost::system::errc;
#endif
boost::asio::io_service netservice;
bool CheckErrorCode(boost::system::error_code& err)
{
// connection reset can happen when host didn't start up before the client wants to connect
if (!err || err.value() == connection_reset)
{
return false;
}
else
{
LogObject() << "Network error " << err.value() << ": " << err.message();
return true;
}
}
boost::asio::ip::udp::endpoint ResolveAddr(const std::string& ip, int port)
{
using namespace boost::asio;
boost::system::error_code err;
ip::address tempAddr = ip::address::from_string(ip, err);
if (err)
{
// error, maybe a hostname?
ip::udp::resolver resolver(netcode::netservice);
std::ostringstream portbuf;
portbuf << port;
ip::udp::resolver::query query(ip, portbuf.str());
ip::udp::resolver::iterator iter = resolver.resolve(query);
tempAddr = iter->endpoint().address();
}
return ip::udp::endpoint(tempAddr, port);
}
} // namespace netcode
|