src/Socket.cpp
branchv_0
changeset 18 e16fa75135ad
parent 16 63bb2c2038c7
child 19 7a9a52e949b9
--- 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 {