version 3.9.0, add PIEthernet::NoDelay parameter

This commit is contained in:
2023-03-21 10:14:05 +03:00
parent df82102798
commit 0cd1206f94
3 changed files with 22 additions and 7 deletions

View File

@@ -2,8 +2,8 @@ cmake_minimum_required(VERSION 3.0)
cmake_policy(SET CMP0017 NEW) # need include() with .cmake
project(PIP)
set(PIP_MAJOR 3)
set(PIP_MINOR 8)
set(PIP_REVISION 2)
set(PIP_MINOR 9)
set(PIP_REVISION 0)
set(PIP_SUFFIX )
set(PIP_COMPANY SHS)
set(PIP_DOMAIN org.SHS)

View File

@@ -203,8 +203,7 @@ bool PIEthernet::init() {
piCoutObj << "Can`t create socket," << ethErrorString();
return false;
}
if (params[PIEthernet::ReuseAddress]) ethSetsockoptBool(sock, SOL_SOCKET, SO_REUSEADDR);
if (params[PIEthernet::Broadcast]) ethSetsockoptBool(sock, SOL_SOCKET, SO_BROADCAST);
applyParameters();
applyTimeouts();
applyOptInt(IPPROTO_IP, IP_TTL, TTL());
// piCoutObj << "inited" << path();
@@ -814,6 +813,14 @@ PIIODevice::DeviceInfoFlags PIEthernet::deviceInfoFlags() const {
}
void PIEthernet::applyParameters() {
if (sock == -1) return;
if (params[PIEthernet::ReuseAddress]) ethSetsockoptBool(sock, SOL_SOCKET, SO_REUSEADDR);
if (params[PIEthernet::Broadcast]) ethSetsockoptBool(sock, SOL_SOCKET, SO_BROADCAST);
if (params[PIEthernet::NoDelay] && (type() == TCP_Client)) ethSetsockoptBool(sock, IPPROTO_TCP, TCP_NODELAY, true);
}
void PIEthernet::clientDeleted(PIObject * o) {
clients_mutex.lock();
clients_.removeOne((PIEthernet *)o);

View File

@@ -60,7 +60,8 @@ public:
= 0x4,
MulticastLoop /** Enable receiving multicast packets from same host. Enabled by default */ = 0x8,
KeepConnection /** Automatic reconnect TCP connection on disconnect. Enabled by default */ = 0x10,
DisonnectOnTimeout /** Disconnect TCP connection on read timeout expired. Disabled by default */ = 0x20
DisonnectOnTimeout /** Disconnect TCP connection on read timeout expired. Disabled by default */ = 0x20,
NoDelay /** Use NO_DELAY option. Disabled by default */ = 0x40
};
typedef ::PINetworkAddress Address DEPRECATEDM("use PINetworkAddress instead");
@@ -152,10 +153,16 @@ public:
//! Set parameters to "parameters_". You should to reopen %PIEthernet to apply them
void setParameters(PIFlags<PIEthernet::Parameters> parameters_) { params = parameters_; }
void setParameters(PIFlags<PIEthernet::Parameters> parameters_) {
params = parameters_;
applyParameters();
}
//! Set parameter "parameter" to state "on". You should to reopen %PIEthernet to apply this
void setParameter(PIEthernet::Parameters parameter, bool on = true) { params.setFlag(parameter, on); }
void setParameter(PIEthernet::Parameters parameter, bool on = true) {
params.setFlag(parameter, on);
applyParameters();
}
//! Returns if parameter "parameter" is set
bool isParameterSet(PIEthernet::Parameters parameter) const { return params[parameter]; }
@@ -457,6 +464,7 @@ protected:
ssize_t readDevice(void * read_to, ssize_t max_size) override;
ssize_t writeDevice(const void * data, ssize_t max_size) override;
DeviceInfoFlags deviceInfoFlags() const override;
void applyParameters();
//! Executes when any read function was successful. Default implementation does nothing
virtual void received(const void * data, int size) { ; }