+#include <sys/socket.h>
+#include <sys/types.h>
+
#include "log.h"
#include "markpool.h"
#include "udpstream.h"
#include "util.h"
-UDPStream::UDPStream(const sockaddr_in6 &dst, MarkPool *mark_pool)
+#ifndef SO_MAX_PACING_RATE
+#define SO_MAX_PACING_RATE 47
+#endif
+
+UDPStream::UDPStream(const sockaddr_in6 &dst, MarkPool *mark_pool, uint32_t pacing_rate)
: dst(dst),
mark_pool(mark_pool),
- fwmark(0)
+ fwmark(0),
+ pacing_rate(pacing_rate)
{
sock = socket(AF_INET6, SOCK_DGRAM, IPPROTO_UDP);
if (sock == -1) {
}
}
}
+ if (setsockopt(sock, SOL_SOCKET, SO_MAX_PACING_RATE, &pacing_rate, sizeof(pacing_rate)) == -1) {
+ if (pacing_rate != ~0U) {
+ log_perror("setsockopt(SO_MAX_PACING_RATE)");
+ }
+ }
}
UDPStream::~UDPStream()