version 3.9.0, add PIEthernet::NoDelay parameter
This commit is contained in:
@@ -2,8 +2,8 @@ cmake_minimum_required(VERSION 3.0)
|
|||||||
cmake_policy(SET CMP0017 NEW) # need include() with .cmake
|
cmake_policy(SET CMP0017 NEW) # need include() with .cmake
|
||||||
project(PIP)
|
project(PIP)
|
||||||
set(PIP_MAJOR 3)
|
set(PIP_MAJOR 3)
|
||||||
set(PIP_MINOR 8)
|
set(PIP_MINOR 9)
|
||||||
set(PIP_REVISION 2)
|
set(PIP_REVISION 0)
|
||||||
set(PIP_SUFFIX )
|
set(PIP_SUFFIX )
|
||||||
set(PIP_COMPANY SHS)
|
set(PIP_COMPANY SHS)
|
||||||
set(PIP_DOMAIN org.SHS)
|
set(PIP_DOMAIN org.SHS)
|
||||||
|
|||||||
@@ -203,8 +203,7 @@ bool PIEthernet::init() {
|
|||||||
piCoutObj << "Can`t create socket," << ethErrorString();
|
piCoutObj << "Can`t create socket," << ethErrorString();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (params[PIEthernet::ReuseAddress]) ethSetsockoptBool(sock, SOL_SOCKET, SO_REUSEADDR);
|
applyParameters();
|
||||||
if (params[PIEthernet::Broadcast]) ethSetsockoptBool(sock, SOL_SOCKET, SO_BROADCAST);
|
|
||||||
applyTimeouts();
|
applyTimeouts();
|
||||||
applyOptInt(IPPROTO_IP, IP_TTL, TTL());
|
applyOptInt(IPPROTO_IP, IP_TTL, TTL());
|
||||||
// piCoutObj << "inited" << path();
|
// 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) {
|
void PIEthernet::clientDeleted(PIObject * o) {
|
||||||
clients_mutex.lock();
|
clients_mutex.lock();
|
||||||
clients_.removeOne((PIEthernet *)o);
|
clients_.removeOne((PIEthernet *)o);
|
||||||
|
|||||||
@@ -60,7 +60,8 @@ public:
|
|||||||
= 0x4,
|
= 0x4,
|
||||||
MulticastLoop /** Enable receiving multicast packets from same host. Enabled by default */ = 0x8,
|
MulticastLoop /** Enable receiving multicast packets from same host. Enabled by default */ = 0x8,
|
||||||
KeepConnection /** Automatic reconnect TCP connection on disconnect. Enabled by default */ = 0x10,
|
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");
|
typedef ::PINetworkAddress Address DEPRECATEDM("use PINetworkAddress instead");
|
||||||
@@ -152,10 +153,16 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
//! Set parameters to "parameters_". You should to reopen %PIEthernet to apply them
|
//! 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
|
//! 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
|
//! Returns if parameter "parameter" is set
|
||||||
bool isParameterSet(PIEthernet::Parameters parameter) const { return params[parameter]; }
|
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 readDevice(void * read_to, ssize_t max_size) override;
|
||||||
ssize_t writeDevice(const void * data, ssize_t max_size) override;
|
ssize_t writeDevice(const void * data, ssize_t max_size) override;
|
||||||
DeviceInfoFlags deviceInfoFlags() const override;
|
DeviceInfoFlags deviceInfoFlags() const override;
|
||||||
|
void applyParameters();
|
||||||
|
|
||||||
//! Executes when any read function was successful. Default implementation does nothing
|
//! Executes when any read function was successful. Default implementation does nothing
|
||||||
virtual void received(const void * data, int size) { ; }
|
virtual void received(const void * data, int size) { ; }
|
||||||
|
|||||||
Reference in New Issue
Block a user