https://bugs.gentoo.org/955174
https://github.com/widelands/widelands/pull/6665
--- a/src/network/bufferedconnection.cc
+++ b/src/network/bufferedconnection.cc
@@ -143,8 +143,8 @@
 	// Stop the thread
-	io_service_.stop();
-	// Not sure if that is required, wait up to one second for the io_service to stop
-	for (int i = 0; i < 1000 && !io_service_.stopped(); i++) {
+	io_context_.stop();
+	// Not sure if that is required, wait up to one second for the io_context to stop
+	for (int i = 0; i < 1000 && !io_context_.stopped(); i++) {
 		std::this_thread::sleep_for(std::chrono::milliseconds(1));
 	}
-	assert(io_service_.stopped());
+	assert(io_context_.stopped());
 	if (asio_thread_.joinable()) {
@@ -336,3 +336,3 @@
 BufferedConnection::BufferedConnection(const NetAddress& host)
-   : socket_(io_service_), currently_sending_(false) {
+   : socket_(io_context_), currently_sending_(false) {
 
@@ -355,3 +355,3 @@
 			verb_log_info("[BufferedConnection] Starting networking thread\n");
-			io_service_.run();
+			io_context_.run();
 			verb_log_info("[BufferedConnection] Stopping networking thread\n");
@@ -366,3 +366,3 @@
 
-BufferedConnection::BufferedConnection() : socket_(io_service_) {
+BufferedConnection::BufferedConnection() : socket_(io_context_) {
 }
@@ -381,3 +381,3 @@
 		verb_log_info("[BufferedConnection] Starting networking thread");
-		io_service_.run();
+		io_context_.run();
 		verb_log_info("[BufferedConnection] Stopping networking thread");
--- a/src/network/bufferedconnection.h
+++ b/src/network/bufferedconnection.h
@@ -314,4 +314,4 @@
 
-	/// An io_service needed by asio. Primarily needed for asynchronous operations.
-	asio::io_service io_service_;
+	/// An io_context needed by asio. Primarily needed for asynchronous operations.
+	asio::io_context io_context_;
 
--- a/src/network/nethost.cc
+++ b/src/network/nethost.cc
@@ -69,7 +69,7 @@
 	// Stop the thread
-	io_service_.stop();
-	for (int i = 0; i < 1000 && !io_service_.stopped(); i++) {
+	io_context_.stop();
+	for (int i = 0; i < 1000 && !io_context_.stopped(); i++) {
 		std::this_thread::sleep_for(std::chrono::milliseconds(1));
 	}
-	assert(io_service_.stopped());
+	assert(io_context_.stopped());
 	if (asio_thread_.joinable()) {
@@ -185,3 +185,3 @@
 
-NetHost::NetHost(const uint16_t port) : acceptor_v4_(io_service_), acceptor_v6_(io_service_) {
+NetHost::NetHost(const uint16_t port) : acceptor_v4_(io_context_), acceptor_v6_(io_context_) {
 
@@ -200,3 +200,3 @@
 		verb_log_info("[NetHost] Starting networking thread");
-		io_service_.run();
+		io_context_.run();
 		verb_log_info("[NetHost] Stopping networking thread");
@@ -216,3 +216,3 @@
 		acceptor->bind(endpoint);
-		acceptor->listen(asio::socket_base::max_connections);
+		acceptor->listen(asio::socket_base::max_listen_connections);
 		return true;
--- a/src/network/nethost.h
+++ b/src/network/nethost.h
@@ -103,4 +103,4 @@
 	NetHostInterface::ConnectionId next_id_{1};
-	/// An io_service needed by asio. Primary needed for async operations.
-	asio::io_service io_service_;
+	/// An io_context needed by asio. Primary needed for async operations.
+	asio::io_context io_context_;
 	/// The acceptor we get IPv4 connection requests to.
--- a/src/network/network.cc
+++ b/src/network/network.cc
@@ -32,7 +32,7 @@
 	try {
-		asio::io_service io_service;
-		asio::ip::tcp::resolver resolver(io_service);
-		asio::ip::tcp::resolver::query query(protocol, hostname, as_string(port));
-		asio::ip::tcp::resolver::iterator iter = resolver.resolve(query);
-		if (iter == asio::ip::tcp::resolver::iterator()) {
+		asio::io_context io_context;
+		asio::ip::tcp::resolver resolver(io_context);
+		asio::ip::tcp::resolver::results_type iter =
+		   resolver.resolve(protocol, hostname, as_string(port));
+		if (iter.empty()) {
 			// Resolution failed
@@ -42,3 +42,3 @@
 		}
-		addr->ip = iter->endpoint().address();
+		addr->ip = iter.begin()->endpoint().address();
 		addr->port = port;
@@ -66,3 +66,3 @@
 	std::error_code ec;
-	asio::ip::address new_addr = asio::ip::address::from_string(ip, ec);
+	asio::ip::address new_addr = asio::ip::make_address(ip, ec);
 	if (ec) {
--- a/src/network/network_lan_promotion.cc
+++ b/src/network/network_lan_promotion.cc
@@ -77,3 +77,3 @@
  */
-LanBase::LanBase(uint16_t port) : socket_v4(io_service), socket_v6(io_service) {
+LanBase::LanBase(uint16_t port) : socket_v4(io_context), socket_v6(io_context) {
 
@@ -252,3 +252,3 @@
 			std::error_code ec;
-			asio::ip::udp::endpoint destination(asio::ip::address::from_string(address), port);
+			asio::ip::udp::endpoint destination(asio::ip::make_address(address), port);
 			socket.send_to(asio::buffer(buf, len), destination, 0, ec);
--- a/src/network/network_lan_promotion.h
+++ b/src/network/network_lan_promotion.h
@@ -135,3 +135,3 @@
 	/// No idea what this does. I think it is only really used when asynchronous operations are done.
-	asio::io_service io_service;
+	asio::io_context io_context;
 	/// The socket for IPv4.
