version 4.5.0

PIThread::stopAndWait now returns bool
PIKbdListener on Linux now use piwaitevent_p and can immediately stop
new base method piZeroMemory, also migrate all "memset 0" to piZeroMemory
This commit is contained in:
2024-12-29 11:48:24 +03:00
parent 49713ddc57
commit 15548de79c
27 changed files with 121 additions and 89 deletions

View File

@@ -272,7 +272,7 @@ bool PIEthernet::openDevice() {
// if (type() == TCP_Client)
// connecting_ = true;
if (type() != UDP || mode() == PIIODevice::WriteOnly) return true;
memset(&PRIVATE->addr_, 0, sizeof(PRIVATE->addr_));
piZeroMemory(PRIVATE->addr_);
PRIVATE->addr_.sin_family = AF_INET;
PRIVATE->addr_.sin_port = htons(addr_r.port());
if (params[PIEthernet::Broadcast])
@@ -377,7 +377,7 @@ bool PIEthernet::joinMulticastGroup(const PIString & group) {
#else
struct ip_mreq mreq;
#endif
memset(&mreq, 0, sizeof(mreq));
piZeroMemory(mreq);
#ifdef LINUX
// mreq.imr_address.s_addr = INADDR_ANY;
/*PIEthernet::InterfaceList il = interfaces();
@@ -423,7 +423,7 @@ bool PIEthernet::leaveMulticastGroup(const PIString & group) {
#else
struct ip_mreq mreq;
#endif
memset(&mreq, 0, sizeof(mreq));
piZeroMemory(mreq);
if (params[PIEthernet::Broadcast])
#ifndef LWIP
mreq.imr_address.s_addr = INADDR_ANY;
@@ -454,7 +454,7 @@ bool PIEthernet::connect(bool threaded) {
if (connected_) return false;
if (sock == -1) init();
if (sock == -1) return false;
memset(&PRIVATE->addr_, 0, sizeof(PRIVATE->addr_));
piZeroMemory(PRIVATE->addr_);
addr_r.set(path());
PRIVATE->addr_.sin_port = htons(addr_r.port());
PRIVATE->addr_.sin_addr.s_addr = addr_r.ip();
@@ -492,7 +492,7 @@ bool PIEthernet::listen(bool threaded) {
}
listen_threaded = server_bounded = false;
addr_r.set(path());
memset(&PRIVATE->addr_, 0, sizeof(PRIVATE->addr_));
piZeroMemory(PRIVATE->addr_);
PRIVATE->addr_.sin_port = htons(addr_r.port());
PRIVATE->addr_.sin_addr.s_addr = addr_r.ip();
PRIVATE->addr_.sin_family = AF_INET;
@@ -618,7 +618,7 @@ ssize_t PIEthernet::readDevice(void * read_to, ssize_t max_size) {
case TCP_Client:
if (connecting_) {
addr_r.set(path());
memset(&PRIVATE->addr_, 0, sizeof(PRIVATE->addr_));
piZeroMemory(PRIVATE->addr_);
PRIVATE->addr_.sin_port = htons(addr_r.port());
PRIVATE->addr_.sin_addr.s_addr = addr_r.ip();
PRIVATE->addr_.sin_family = AF_INET;
@@ -704,7 +704,7 @@ ssize_t PIEthernet::readDevice(void * read_to, ssize_t max_size) {
if (rs > 0) received(read_to, rs);
return rs;
case UDP: {
memset(&PRIVATE->raddr_, 0, sizeof(PRIVATE->raddr_));
piZeroMemory(PRIVATE->raddr_);
// piCoutObj << "read from" << path() << "...";
#ifdef WINDOWS
long wr = waitForEvent(PRIVATE->event, FD_READ | FD_CLOSE);
@@ -765,7 +765,7 @@ ssize_t PIEthernet::writeDevice(const void * data, ssize_t max_size) {
// piCout << "[PIEth] write to" << ip_s << ":" << port_s << "ok";
case TCP_Client: {
if (connecting_) {
memset(&PRIVATE->addr_, 0, sizeof(PRIVATE->addr_));
piZeroMemory(PRIVATE->addr_);
addr_r.set(path());
PRIVATE->addr_.sin_port = htons(addr_r.port());
PRIVATE->addr_.sin_addr.s_addr = addr_r.ip();
@@ -962,7 +962,7 @@ long PIEthernet::waitForEvent(PIWaitEvent & event, long mask) {
// DWORD wr = WSAWaitForMultipleEvents(1, &(PRIVATE->read_event), FALSE, WSA_INFINITE, TRUE);
// if (wr == WSA_WAIT_EVENT_0) {
WSANETWORKEVENTS events;
memset(&events, 0, sizeof(events));
piZeroMemory(events);
WSAEnumNetworkEvents(sock, event.getEvent(), &events);
// piCoutObj << "wait result" << events.lNetworkEvents;
return events.lNetworkEvents;
@@ -1245,7 +1245,7 @@ PINetworkAddress PIEthernet::interfaceAddress(const PIString & interface_) {
return PINetworkAddress();
#else
struct ifreq ifr;
memset(&ifr, 0, sizeof(ifr));
piZeroMemory(ifr);
strcpy(ifr.ifr_name, interface_.dataAscii());
int s = ::socket(AF_INET, SOCK_DGRAM, 0);
ioctl(s, SIOCGIFADDR, &ifr);