@@ -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 () {
@@ -182,6 +189,9 @@ NetworkClient::~NetworkClient() {
182
189
}
183
190
184
191
void NetworkClient::stop () {
192
+ if (clientSocketHandle) {
193
+ clientSocketHandle->close ();
194
+ }
185
195
clientSocketHandle = NULL ;
186
196
_rxBuffer = NULL ;
187
197
_connected = false ;
@@ -473,7 +483,7 @@ int NetworkClient::read(uint8_t *buf, size_t size) {
473
483
474
484
int NetworkClient::peek () {
475
485
int res = -1 ;
476
- if (_rxBuffer) {
486
+ if (fd () >= 0 && _rxBuffer) {
477
487
res = _rxBuffer->peek ();
478
488
if (_rxBuffer->failed ()) {
479
489
log_e (" fail on fd %d, errno: %d, \" %s\" " , fd (), errno, strerror (errno));
@@ -484,7 +494,7 @@ int NetworkClient::peek() {
484
494
}
485
495
486
496
int NetworkClient::available () {
487
- if (!_rxBuffer) {
497
+ if (fd () < 0 || !_rxBuffer) {
488
498
return 0 ;
489
499
}
490
500
int res = _rxBuffer->available ();
@@ -502,6 +512,9 @@ void NetworkClient::clear() {
502
512
}
503
513
504
514
uint8_t NetworkClient::connected () {
515
+ if (fd () == -1 && _connected) {
516
+ stop ();
517
+ }
505
518
if (_connected) {
506
519
uint8_t dummy;
507
520
int res = recv (fd (), &dummy, 0 , MSG_DONTWAIT);
0 commit comments