Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Toggle main menu visibility
Loading...
Searching...
No Matches
BoostAsioUtils.cpp
Go to the documentation of this file.
1
/*
2
* This file is part of Project SkyFire https://www.projectskyfire.org.
3
* See LICENSE.md file for Copyright information
4
*/
5
6
#include "
Network/BoostAsioUtils.h
"
7
#include "
Log.h
"
8
9
#include <boost/asio/error.hpp>
10
#include <boost/asio/socket_base.hpp>
11
12
namespace
Skyfire
13
{
14
namespace
Net
15
{
16
bool
IsWouldBlock
(boost::system::error_code
const
& error)
17
{
18
return
error == boost::asio::error::would_block || error == boost::asio::error::try_again;
19
}
20
21
bool
OpenTcpAcceptor
(boost::asio::io_context& ioContext, boost::asio::ip::tcp::acceptor& acceptor,
22
uint16
port, std::string
const
& bindAddress,
char
const
* logFilter,
char
const
* logName)
23
{
24
RestartIoContext
(ioContext);
25
26
boost::system::error_code error;
27
boost::asio::ip::tcp::resolver resolver(ioContext);
28
boost::asio::ip::tcp::resolver::results_type endpoints = resolver.resolve(
29
bindAddress, std::to_string(port), boost::asio::ip::resolver_base::passive, error);
30
31
if
(error)
32
{
33
SF_LOG_ERROR
(logFilter,
"Invalid %s bind address %s:%u, error %d"
,
34
logName, bindAddress.c_str(), port, error.value());
35
return
false
;
36
}
37
38
boost::system::error_code lastError;
39
40
for
(boost::asio::ip::tcp::endpoint
const
& endpoint : endpoints)
41
{
42
acceptor.open(endpoint.protocol(), error);
43
if
(error)
44
{
45
lastError = error;
46
continue
;
47
}
48
49
acceptor.set_option(boost::asio::socket_base::reuse_address(
true
), error);
50
if
(!error)
51
acceptor.bind(endpoint, error);
52
53
if
(!error)
54
acceptor.listen(boost::asio::socket_base::max_listen_connections, error);
55
56
if
(!error)
57
acceptor.non_blocking(
true
, error);
58
59
if
(!error)
60
return
true
;
61
62
lastError = error;
63
64
CloseTcpAcceptor
(acceptor);
65
}
66
67
SF_LOG_ERROR
(logFilter,
"Failed to open %s listener on %s:%u, error %d"
,
68
logName, bindAddress.c_str(), port, lastError.value());
69
return
false
;
70
}
71
}
72
}
BoostAsioUtils.h
uint16
std::uint16_t uint16
Definition
Define.h:78
Log.h
SF_LOG_ERROR
#define SF_LOG_ERROR(filterType__,...)
Definition
Log.h:143
Skyfire::Net
Definition
WorldSocket.h:36
Skyfire::Net::RestartIoContext
void RestartIoContext(boost::asio::io_context &ioContext)
Definition
BoostAsioUtils.h:22
Skyfire::Net::CloseTcpAcceptor
void CloseTcpAcceptor(boost::asio::ip::tcp::acceptor &acceptor)
Definition
BoostAsioUtils.h:38
Skyfire::Net::OpenTcpAcceptor
bool OpenTcpAcceptor(boost::asio::io_context &ioContext, boost::asio::ip::tcp::acceptor &acceptor, uint16 port, std::string const &bindAddress, char const *logFilter, char const *logName)
Definition
BoostAsioUtils.cpp:21
Skyfire::Net::IsWouldBlock
bool IsWouldBlock(boost::system::error_code const &error)
Definition
BoostAsioUtils.cpp:16
Skyfire
Definition
AuthPatchTransfer.h:12
src
server
shared
Network
BoostAsioUtils.cpp
Generated on
for Project SkyFire Core by
1.17.0