piethernet threaded connect fix, small brush of PIIODevice

This commit is contained in:
2022-10-23 21:38:10 +03:00
parent 2cf561767f
commit 3a5050b028
3 changed files with 25 additions and 15 deletions

View File

@@ -713,9 +713,12 @@ ssize_t PIEthernet::readDevice(void * read_to, ssize_t max_size) {
#ifdef QNX
PRIVATE->addr_.sin_len = sizeof(PRIVATE->addr_);
#endif
//piCoutObj << "connect to " << ip_ << ":" << port_ << "...";
//piCout << "connect to " << path() << "...";
bool was_block_read_flag = blockingReadFlag();
setBlockingReadFlag(true);
connected_ = (::connect(sock, (sockaddr * )&(PRIVATE->addr_), sizeof(PRIVATE->addr_)) == 0);
//piCoutObj << "connect to " << ip_ << ":" << port_ << connected_;
setBlockingReadFlag(was_block_read_flag);
//piCout << "connect to " << path() << connected_;
if (!connected_)
piCoutObj << "Can`t connect to" << addr_r << "," << ethErrorString();
opened_ = connected_;

View File

@@ -301,11 +301,6 @@ ssize_t PIIODevice::write(const void * data, ssize_t max_size) {
void PIIODevice::_init() {
reading_now = false;
opened_ = thread_started_ = false;
raise_threaded_read_ = true;
func_read = nullptr;
ret_data_ = nullptr;
tri = 0;
setOptions(0);
setReopenEnabled(true);
setReopenTimeout(1000);
@@ -317,6 +312,7 @@ void PIIODevice::_init() {
read_thread .setName("__S__.PIIODevice.read_thread" );
write_thread.setName("__S__.PIIODevice.write_thread");
CONNECT(void, &write_thread, started, this, write_func);
CONNECTL(&read_thread, started, [this](){if (!isOpened()) open();});
read_thread.setSlot([this](void*){read_func();});
}
@@ -345,6 +341,16 @@ PIIODevice * PIIODevice::newDeviceByPrefix(const char * prefix) {
}
bool PIIODevice::blockingReadFlag() const {
return reading_now;
}
void PIIODevice::setBlockingReadFlag(bool yes) {
reading_now = yes;
}
void PIIODevice::read_func() {
if (!isReadable()) {
read_thread.stop();
@@ -361,7 +367,7 @@ void PIIODevice::read_func() {
}
if (!ok) return;
}
readed_ = read(buffer_tr.data(), buffer_tr.size_s());
ssize_t readed_ = read(buffer_tr.data(), buffer_tr.size_s());
if (readed_ <= 0) {
piMSleep(10);
//cout << readed_ << ", " << errno << ", " << errorString() << endl;
@@ -369,7 +375,7 @@ void PIIODevice::read_func() {
}
//piCoutObj << "readed" << readed_;// << ", " << errno << ", " << errorString();
threadedRead(buffer_tr.data(), readed_);
if (raise_threaded_read_) threadedReadEvent(buffer_tr.data(), readed_);
threadedReadEvent(buffer_tr.data(), readed_);
}

View File

@@ -528,13 +528,15 @@ protected:
virtual void threadedReadBufferSizeChanged() {;}
static PIIODevice * newDeviceByPrefix(const char * prefix);
bool blockingReadFlag() const;
void setBlockingReadFlag(bool yes);
DeviceMode mode_;
DeviceOptions options_;
ReadRetFunc func_read;
bool opened_;
void * ret_data_;
ReadRetFunc func_read = nullptr;
bool opened_ = false;
void * ret_data_ = nullptr;
private:
EVENT_HANDLER(void, read_func);
@@ -550,11 +552,10 @@ private:
PIThread read_thread, write_thread;
PIByteArray buffer_in, buffer_tr;
PIQueue<PIPair<PIByteArray, ullong> > write_queue;
ullong tri;
ssize_t readed_;
ullong tri = 0;
uint threaded_read_buffer_size, reopen_timeout = 1000;
std::atomic_bool reading_now;
bool thread_started_, raise_threaded_read_, reopen_enabled = true;
bool reopen_enabled = true;
static PIMutex nfp_mutex;
static PIMap<PIString, PIString> nfp_cache;