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:
@@ -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";
|
||||
|
||||
Reference in New Issue
Block a user