event/ServerSocket: add ip_tos setting

This commit is contained in:
Max Kellermann 2022-01-10 17:59:38 +01:00
parent 089a843abd
commit 1ae6378d85
2 changed files with 29 additions and 2 deletions

View File

@ -17,7 +17,6 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#include "config.h"
#include "ServerSocket.hxx"
#include "lib/fmt/ExceptionFormatter.hxx"
#include "net/IPv4Address.hxx"
@ -36,7 +35,6 @@
#include "util/Domain.hxx"
#include "Log.hxx"
#include <cassert>
#include <string>
#include <utility>
@ -183,6 +181,16 @@ ServerSocket::OneServerSocket::Open()
SOCK_STREAM, 0,
address, 5);
#ifdef HAVE_TCP
if (parent.ip_tos >= 0 && address.GetFamily() == AF_INET &&
!_fd.SetIntOption(IPPROTO_IP, IP_TOS, parent.ip_tos)) {
const SocketErrorMessage msg;
FmtError(server_socket_domain,
"Could not set TOS option: {}",
(const char *)msg);
}
#endif
#ifdef HAVE_UN
/* allow everybody to connect */

View File

@ -20,6 +20,9 @@
#ifndef MPD_SERVER_SOCKET_HXX
#define MPD_SERVER_SOCKET_HXX
#include "config.h"
#include <cassert>
#include <list>
class SocketAddress;
@ -38,6 +41,14 @@ class ServerSocket {
std::list<OneServerSocket> sockets;
#ifdef HAVE_TCP
/**
* A non-negative value sets the IPPROTO_IP/IP_TOS socket
* option.
*/
int ip_tos = -1;
#endif
unsigned next_serial = 1;
public:
@ -48,6 +59,14 @@ public:
return loop;
}
#ifdef HAVE_TCP
void SetIpTos(int _ip_tos) noexcept {
assert(sockets.empty());
ip_tos = _ip_tos;
}
#endif
private:
template<typename A>
OneServerSocket &AddAddress(A &&address) noexcept;