PIEthernet send to custom address fix

This commit is contained in:
2021-04-13 18:29:21 +03:00
parent 7a2a9ee7d0
commit 95002973e8
2 changed files with 62 additions and 11 deletions

View File

@@ -621,6 +621,57 @@ bool PIEthernet::listen(bool threaded) {
}
bool PIEthernet::listen(const PIEthernet::Address & addr, bool threaded) {
setReadAddress(addr);
return listen(threaded);
}
bool PIEthernet::send(const void * data, int size, bool threaded) {
if (threaded) {
writeThreaded(data, size);
return true;
}
return (write(data, size) == size);
}
bool PIEthernet::send(const PIEthernet::Address & addr, const void * data, int size, bool threaded) {
addr_s = addr;
if (threaded) {
writeThreaded(data, size);
return true;
}
Address pa = addr_s;
addr_s = addr;
int wr = write(data, size);
addr_s = pa;
return (wr == size);
}
bool PIEthernet::send(const PIByteArray & data, bool threaded) {
if (threaded) {
writeThreaded(data);
return true;
}
return (write(data) == data.size_s());
}
bool PIEthernet::send(const PIEthernet::Address & addr, const PIByteArray & data, bool threaded) {
if (threaded) {
writeThreaded(data);
return true;
}
Address pa = addr_s;
addr_s = addr;
int wr = write(data);
addr_s = pa;
return (wr == data.size_s());
}
int PIEthernet::readDevice(void * read_to, int max_size) {
//piCout << "read" << sock;
if (sock == -1) init();

View File

@@ -273,13 +273,13 @@ public:
bool listen(bool threaded = false);
//! Start listen for incoming TCP connections on address "ip":"port". Use only for TCP_Server
bool listen(const PIString & ip, int port, bool threaded = false) {setReadAddress(ip, port); return listen(threaded);}
bool listen(const PIString & ip, int port, bool threaded = false) {return listen(PIEthernet::Address(ip, port), threaded);}
//! Start listen for incoming TCP connections on address "ip_port". Use only for TCP_Server
bool listen(const PIString & ip_port, bool threaded = false) {setReadAddress(ip_port); return listen(threaded);}
bool listen(const PIString & ip_port, bool threaded = false) {return listen(PIEthernet::Address(ip_port), threaded);}
//! Start listen for incoming TCP connections on address "addr". Use only for TCP_Server
bool listen(const Address & addr, bool threaded = false) {setReadAddress(addr); return listen(threaded);}
bool listen(const Address & addr, bool threaded = false);
PIEthernet * client(int index) {return clients_[index];}
int clientsCount() const {return clients_.size_s();}
@@ -287,28 +287,28 @@ public:
//! Send data "data" with size "size" to address \a sendAddress() for UDP or \a readAddress() for TCP_Client
bool send(const void * data, int size, bool threaded = false) {if (threaded) {writeThreaded(data, size); return true;} return (write(data, size) == size);}
bool send(const void * data, int size, bool threaded = false);
//! Send data "data" with size "size" to address "ip":"port"
bool send(const PIString & ip, int port, const void * data, int size, bool threaded = false) {addr_s.set(ip, port); if (threaded) {writeThreaded(data, size); return true;} return send(data, size);}
bool send(const PIString & ip, int port, const void * data, int size, bool threaded = false) {return send(PIEthernet::Address(ip, port), data, size, threaded);}
//! Send data "data" with size "size" to address "ip_port"
bool send(const PIString & ip_port, const void * data, int size, bool threaded = false) {addr_s.set(ip_port); if (threaded) {writeThreaded(data, size); return true;} return send(data, size);}
bool send(const PIString & ip_port, const void * data, int size, bool threaded = false) {return send(PIEthernet::Address(ip_port), data, size, threaded);}
//! Send data "data" with size "size" to address "addr"
bool send(const Address & addr, const void * data, int size, bool threaded = false) {addr_s = addr; if (threaded) {writeThreaded(data, size); return true;} return send(data, size);}
bool send(const Address & addr, const void * data, int size, bool threaded = false);
//! Send data "data" to address \a sendAddress() for UDP or \a readAddress() for TCP_Client
bool send(const PIByteArray & data, bool threaded = false) {if (threaded) {writeThreaded(data); return true;} return (write(data) == data.size_s());}
bool send(const PIByteArray & data, bool threaded = false);
//! Send data "data" to address "ip":"port" for UDP
bool send(const PIString & ip, int port, const PIByteArray & data, bool threaded = false) {addr_s.set(ip, port); if (threaded) {writeThreaded(data); return true;} return send(data);}
bool send(const PIString & ip, int port, const PIByteArray & data, bool threaded = false) {return send(PIEthernet::Address(ip, port), data, threaded);}
//! Send data "data" to address "ip_port" for UDP
bool send(const PIString & ip_port, const PIByteArray & data, bool threaded = false) {addr_s.set(ip_port); if (threaded) {writeThreaded(data); return true;} return (write(data) == data.size_s());}
bool send(const PIString & ip_port, const PIByteArray & data, bool threaded = false) {return send(PIEthernet::Address(ip_port), data, threaded);}
//! Send data "data" to address "addr" for UDP
bool send(const Address & addr, const PIByteArray & data, bool threaded = false) {addr_s = addr; if (threaded) {writeThreaded(data); return true;} return (write(data) == data.size_s());}
bool send(const Address & addr, const PIByteArray & data, bool threaded = false);
virtual bool canWrite() const {return mode() & WriteOnly;}