more precise using PIIODevice::reading_now flag, Warning! one should use it manually now

small enum fix for pip_cmg
This commit is contained in:
2022-10-27 20:58:43 +03:00
parent 609ff8e9c8
commit e46cfdc4bd
11 changed files with 51 additions and 18 deletions

View File

@@ -685,14 +685,18 @@ ssize_t PIEthernet::readDevice(void * read_to, ssize_t max_size) {
// piCoutObj << "read from " << ip_ << ":" << port_;
switch (type()) {
case TCP_SingleTCP:
reading_now = true;
::listen(sock, 64);
reading_now = false;
s = accept(sock, (sockaddr * )&client_addr, &slen);
if (s == -1) {
//piCoutObj << "Can`t accept new connection, " << ethErrorString();
piMinSleep();
return -1;
}
reading_now = true;
rs = ethRecv(s, read_to, max_size);
reading_now = false;
closeSocket(s);
return rs;
case TCP_Client:
@@ -714,7 +718,9 @@ ssize_t PIEthernet::readDevice(void * read_to, ssize_t max_size) {
PRIVATE->addr_.sin_len = sizeof(PRIVATE->addr_);
#endif
//piCout << "connect to " << path() << "...";
reading_now = true;
connected_ = (::connect(sock, (sockaddr * )&(PRIVATE->addr_), sizeof(PRIVATE->addr_)) == 0);
reading_now = false;
//piCout << "connect to " << path() << connected_;
if (!connected_)
piCoutObj << "Can`t connect to" << addr_r << "," << ethErrorString();
@@ -728,7 +734,9 @@ ssize_t PIEthernet::readDevice(void * read_to, ssize_t max_size) {
}
if (!connected_) return -1;
errorClear();
reading_now = true;
rs = ethRecv(sock, read_to, max_size);
reading_now = false;
//piCoutObj << "readed" << rs;
if (rs <= 0) {
lerr = ethErrorCore();
@@ -757,7 +765,9 @@ ssize_t PIEthernet::readDevice(void * read_to, ssize_t max_size) {
return rs;
case UDP:
memset(&PRIVATE->raddr_, 0, sizeof(PRIVATE->raddr_));
reading_now = true;
rs = ethRecvfrom(sock, read_to, max_size, 0, (sockaddr*)&PRIVATE->raddr_);
reading_now = false;
if (rs > 0) {
addr_lr.set(uint(PRIVATE->raddr_.sin_addr.s_addr), ntohs(PRIVATE->raddr_.sin_port));
//piCoutObj << "read from" << ip_r << ":" << port_r << rs << "bytes";