--- a/src/Socket.cpp Sat Aug 06 12:12:46 2022 +0200
+++ b/src/Socket.cpp Sat Aug 06 15:23:40 2022 +0200
@@ -124,7 +124,7 @@
};
-template<class SocketClass> static std::shared_ptr<Socket> openClientSocket(const SocketOptions& options, int socketType, int protocol) {
+template<class SocketClass> static std::shared_ptr<SocketClass> openClientSocket(const SocketOptions& options, int socketType, int protocol) {
AddressInfos remoteAddresses = AddressInfos::getAddressInfos(
findOption(options, OPTION_HOST, true),
findOption(options, OPTION_PORT, true),
@@ -137,6 +137,7 @@
class UDPClientSocket : public Socket {
private:
AddressInfos::AddressInfo remoteAddress;
+ useconds_t delay = 0;
public:
@@ -145,13 +146,16 @@
static std::shared_ptr<Socket> open(const SocketOptions& options) {
bool sctp = findOption(options, OPTION_PROTOCOL) == PROTOCOL_SCTP;
- return openClientSocket<UDPClientSocket>(options, sctp ? SOCK_SEQPACKET : SOCK_DGRAM, sctp ? IPPROTO_SCTP : IPPROTO_UDP);
+ auto socket = openClientSocket<UDPClientSocket>(options, sctp ? SOCK_SEQPACKET : SOCK_DGRAM, sctp ? IPPROTO_SCTP : IPPROTO_UDP);
+ socket->delay = std::stol(findOption(options, OPTION_DELAY, false, "0"));
+ return socket;
}
void send(const std::string& message) override {
auto ai = remoteAddress.ai;
FD s(::socket(AF_INET, ai->ai_socktype, ai->ai_protocol));
sendto(s.getFD(), message.c_str(), message.size(), 0, ai->ai_addr, ai->ai_addrlen);
+ if (delay) usleep(delay);
}
const std::string receive() override {