29
29
SERVER_STATE_WAIT_CLOSE_SOCKET
30
30
};
31
31
32
-
33
32
GSMServer::GSMServer (uint16_t port, bool synch) :
34
33
_port(port),
35
34
_synch(synch),
@@ -39,6 +38,7 @@ GSMServer::GSMServer(uint16_t port, bool synch) :
39
38
for (int i = 0 ; i < MAX_CHILD_SOCKETS; i++) {
40
39
_childSockets[i].socket = -1 ;
41
40
_childSockets[i].accepted = false ;
41
+ _childSockets[i].available = 0 ;
42
42
}
43
43
44
44
MODEM.addUrcHandler (this );
@@ -150,14 +150,21 @@ GSMClient GSMServer::available(bool synch)
150
150
// no new accepted sockets, search for one with data to be read
151
151
for (int i = 0 ; i < MAX_CHILD_SOCKETS; i++) {
152
152
if (_childSockets[i].socket != -1 ) {
153
- GSMClient client (_childSockets[i].socket , true );
153
+ // check if socket is still alive
154
+ MODEM.sendf (" AT+USORD=%d,0" , _childSockets[i].socket );
155
+ if (MODEM.waitForResponse (10000 ) != 1 ) {
156
+ // closed
157
+ _childSockets[i].socket = -1 ;
158
+ _childSockets[i].accepted = false ;
159
+ _childSockets[i].available = 0 ;
160
+
161
+ continue ;
162
+ }
154
163
155
- if (client.available ()) {
164
+ if (_childSockets[i].available ) {
165
+ _childSockets[i].available = 0 ;
156
166
socket = _childSockets[i].socket ;
157
167
break ;
158
- } else if (!client.connected ()) {
159
- _childSockets[i].socket = -1 ;
160
- _childSockets[i].accepted = false ;
161
168
}
162
169
}
163
170
}
@@ -185,6 +192,8 @@ size_t GSMServer::write(const uint8_t *buf, size_t sz)
185
192
{
186
193
size_t written = 0 ;
187
194
195
+ MODEM.poll ();
196
+
188
197
if (_socket != -1 ) {
189
198
for (int i = 0 ; i < MAX_CHILD_SOCKETS; i++) {
190
199
if (_childSockets[i].socket != -1 ) {
@@ -223,6 +232,7 @@ void GSMServer::handleUrc(const String& urc)
223
232
if (_childSockets[i].socket == -1 ) {
224
233
_childSockets[i].socket = socket;
225
234
_childSockets[i].accepted = true ;
235
+ _childSockets[i].available = 0 ;
226
236
227
237
break ;
228
238
}
@@ -234,6 +244,20 @@ void GSMServer::handleUrc(const String& urc)
234
244
if (_childSockets[i].socket == socket) {
235
245
_childSockets[i].socket = -1 ;
236
246
_childSockets[i].accepted = false ;
247
+ _childSockets[i].available = 0 ;
248
+
249
+ break ;
250
+ }
251
+ }
252
+ } else if (urc.startsWith (" +UUSORD: " )) {
253
+ int socket = urc.charAt (9 ) - ' 0' ;
254
+
255
+ for (int i = 0 ; i < MAX_CHILD_SOCKETS; i++) {
256
+ if (_childSockets[i].socket == socket) {
257
+ int commaIndex = urc.indexOf (' ,' );
258
+ if (commaIndex != -1 ) {
259
+ _childSockets[i].available = urc.substring (commaIndex + 1 ).toInt ();
260
+ }
237
261
238
262
break ;
239
263
}
0 commit comments