@@ -162,7 +162,14 @@ class NetworkClientSocketHandle {
162
162
NetworkClientSocketHandle (int fd) : sockfd(fd) {}
163
163
164
164
~NetworkClientSocketHandle () {
165
- close (sockfd);
165
+ close ();
166
+ }
167
+
168
+ void close () {
169
+ if (sockfd >= 0 ) {
170
+ ::close (sockfd);
171
+ sockfd = -1 ;
172
+ }
166
173
}
167
174
168
175
int fd () {
@@ -178,10 +185,12 @@ NetworkClient::NetworkClient(int fd) : _connected(true), _timeout(WIFI_CLIENT_DE
178
185
}
179
186
180
187
NetworkClient::~NetworkClient () {
181
- stop ();
182
188
}
183
189
184
190
void NetworkClient::stop () {
191
+ if (clientSocketHandle) {
192
+ clientSocketHandle->close ();
193
+ }
185
194
clientSocketHandle = NULL ;
186
195
_rxBuffer = NULL ;
187
196
_connected = false ;
@@ -473,7 +482,7 @@ int NetworkClient::read(uint8_t *buf, size_t size) {
473
482
474
483
int NetworkClient::peek () {
475
484
int res = -1 ;
476
- if (_rxBuffer) {
485
+ if (fd () >= 0 && _rxBuffer) {
477
486
res = _rxBuffer->peek ();
478
487
if (_rxBuffer->failed ()) {
479
488
log_e (" fail on fd %d, errno: %d, \" %s\" " , fd (), errno, strerror (errno));
@@ -484,7 +493,7 @@ int NetworkClient::peek() {
484
493
}
485
494
486
495
int NetworkClient::available () {
487
- if (!_rxBuffer) {
496
+ if (fd () < 0 || !_rxBuffer) {
488
497
return 0 ;
489
498
}
490
499
int res = _rxBuffer->available ();
@@ -502,6 +511,9 @@ void NetworkClient::clear() {
502
511
}
503
512
504
513
uint8_t NetworkClient::connected () {
514
+ if (fd () == -1 && _connected) {
515
+ stop ();
516
+ }
505
517
if (_connected) {
506
518
uint8_t dummy;
507
519
int res = recv (fd (), &dummy, 0 , MSG_DONTWAIT);
0 commit comments