@@ -35,8 +35,19 @@ int WiFiClient::connect(IPAddress ip, uint16_t port) {
3535 {
3636 ServerDrv::startClient (uint32_t (ip), port, _sock);
3737 WiFiClass::_state[_sock] = _sock;
38- while (!connected ());
38+
39+ unsigned long start = millis ();
40+
41+ // wait 4 second for the connection to close
42+ while (!connected () && millis () - start < 10000 )
43+ delay (1 );
44+
45+ if (!connected ())
46+ {
47+ return 0 ;
48+ }
3949 }else {
50+ Serial.println (" No Socket available" );
4051 return 0 ;
4152 }
4253 return 1 ;
@@ -59,12 +70,17 @@ size_t WiFiClient::write(const uint8_t *buf, size_t size) {
5970 }
6071
6172
62- if ((!ServerDrv::sendData (_sock, buf, size)) ||
63- (!ServerDrv::checkDataSent (_sock)))
73+ if (!ServerDrv::sendData (_sock, buf, size))
6474 {
6575 setWriteError ();
6676 return 0 ;
6777 }
78+ if (!ServerDrv::checkDataSent (_sock))
79+ {
80+ setWriteError ();
81+ return 0 ;
82+ }
83+
6884 return size;
6985}
7086
@@ -94,8 +110,12 @@ int WiFiClient::read(uint8_t* buf, size_t size) {
94110}
95111
96112int WiFiClient::peek () {
97- // TODO to be implemented
98- return 0 ;
113+ uint8_t b;
114+ if (!available ())
115+ return -1 ;
116+
117+ ServerDrv::getData (_sock, &b, 1 );
118+ return b;
99119}
100120
101121void WiFiClient::flush () {
@@ -112,10 +132,10 @@ void WiFiClient::stop() {
112132
113133 unsigned long start = millis ();
114134
135+
115136 // wait a second for the connection to close
116137 while (status () != CLOSED && millis () - start < 1000 )
117138 delay (1 );
118-
119139 _sock = 255 ;
120140}
121141
@@ -128,6 +148,7 @@ uint8_t WiFiClient::connected() {
128148
129149 return !(s == LISTEN || s == CLOSED || s == FIN_WAIT_1 ||
130150 s == FIN_WAIT_2 || s == TIME_WAIT ||
151+ s == SYN_SENT || s== SYN_RCVD ||
131152 (s == CLOSE_WAIT && !available ()));
132153 }
133154}
0 commit comments