@@ -301,6 +301,10 @@ int ESP8266Interface::socket_close(void *handle)
301
301
{
302
302
struct esp8266_socket *socket = (struct esp8266_socket *)handle;
303
303
int err = 0 ;
304
+
305
+ if (!socket) {
306
+ return NSAPI_ERROR_NO_SOCKET;
307
+ }
304
308
305
309
if (socket->connected && !_esp.close (socket->id )) {
306
310
err = NSAPI_ERROR_DEVICE_ERROR;
@@ -317,6 +321,10 @@ int ESP8266Interface::socket_bind(void *handle, const SocketAddress &address)
317
321
{
318
322
struct esp8266_socket *socket = (struct esp8266_socket *)handle;
319
323
324
+ if (!socket) {
325
+ return NSAPI_ERROR_NO_SOCKET;
326
+ }
327
+
320
328
if (socket->proto == NSAPI_UDP) {
321
329
if (address.get_addr ().version != NSAPI_UNSPEC) {
322
330
return NSAPI_ERROR_UNSUPPORTED;
@@ -344,10 +352,16 @@ int ESP8266Interface::socket_listen(void *handle, int backlog)
344
352
int ESP8266Interface::socket_connect (void *handle, const SocketAddress &addr)
345
353
{
346
354
struct esp8266_socket *socket = (struct esp8266_socket *)handle;
355
+ nsapi_error_t ret;
356
+
357
+ if (!socket) {
358
+ return NSAPI_ERROR_NO_SOCKET;
359
+ }
347
360
348
361
if (socket->proto == NSAPI_UDP) {
349
- if (!_esp.open_udp (socket->id , addr.get_ip_address (), addr.get_port (), _local_ports[socket->id ])) {
350
- return NSAPI_ERROR_DEVICE_ERROR;
362
+ ret = _esp.open_udp (socket->id , addr.get_ip_address (), addr.get_port (), _local_ports[socket->id ]);
363
+ if (ret != NSAPI_ERROR_OK) {
364
+ return ret;
351
365
}
352
366
} else {
353
367
if (!_esp.open_tcp (socket->id , addr.get_ip_address (), addr.get_port (), socket->keepalive )) {
@@ -368,6 +382,10 @@ int ESP8266Interface::socket_send(void *handle, const void *data, unsigned size)
368
382
{
369
383
nsapi_error_t status;
370
384
struct esp8266_socket *socket = (struct esp8266_socket *)handle;
385
+
386
+ if (!socket) {
387
+ return NSAPI_ERROR_NO_SOCKET;
388
+ }
371
389
372
390
status = _esp.send (socket->id , data, size);
373
391
@@ -378,6 +396,10 @@ int ESP8266Interface::socket_recv(void *handle, void *data, unsigned size)
378
396
{
379
397
struct esp8266_socket *socket = (struct esp8266_socket *)handle;
380
398
399
+ if (!socket) {
400
+ return NSAPI_ERROR_NO_SOCKET;
401
+ }
402
+
381
403
int32_t recv;
382
404
if (socket->proto == NSAPI_TCP) {
383
405
recv = _esp.recv_tcp (socket->id , data, size);
@@ -395,6 +417,10 @@ int ESP8266Interface::socket_sendto(void *handle, const SocketAddress &addr, con
395
417
{
396
418
struct esp8266_socket *socket = (struct esp8266_socket *)handle;
397
419
420
+ if (!socket) {
421
+ return NSAPI_ERROR_NO_SOCKET;
422
+ }
423
+
398
424
if ((strcmp (addr.get_ip_address (), " 0.0.0.0" ) == 0 ) || !addr.get_port ()) {
399
425
return NSAPI_ERROR_DNS_FAILURE;
400
426
}
@@ -420,6 +446,11 @@ int ESP8266Interface::socket_sendto(void *handle, const SocketAddress &addr, con
420
446
int ESP8266Interface::socket_recvfrom (void *handle, SocketAddress *addr, void *data, unsigned size)
421
447
{
422
448
struct esp8266_socket *socket = (struct esp8266_socket *)handle;
449
+
450
+ if (!socket) {
451
+ return NSAPI_ERROR_NO_SOCKET;
452
+ }
453
+
423
454
int ret = socket_recv (socket, data, size);
424
455
if (ret >= 0 && addr) {
425
456
*addr = socket->addr ;
@@ -430,7 +461,7 @@ int ESP8266Interface::socket_recvfrom(void *handle, SocketAddress *addr, void *d
430
461
431
462
void ESP8266Interface::socket_attach (void *handle, void (*callback)(void *), void *data)
432
463
{
433
- struct esp8266_socket *socket = (struct esp8266_socket *)handle;
464
+ struct esp8266_socket *socket = (struct esp8266_socket *)handle;
434
465
_cbs[socket->id ].callback = callback;
435
466
_cbs[socket->id ].data = data;
436
467
}
@@ -440,8 +471,10 @@ nsapi_error_t ESP8266Interface::setsockopt(nsapi_socket_t handle, int level,
440
471
{
441
472
struct esp8266_socket *socket = (struct esp8266_socket *)handle;
442
473
443
- if (!optlen || !socket ) {
474
+ if (!optlen) {
444
475
return NSAPI_ERROR_PARAMETER;
476
+ } else if (!socket) {
477
+ return NSAPI_ERROR_NO_SOCKET;
445
478
}
446
479
447
480
if (level == NSAPI_SOCKET && socket->proto == NSAPI_TCP) {
@@ -470,8 +503,10 @@ nsapi_error_t ESP8266Interface::getsockopt(nsapi_socket_t handle, int level, int
470
503
{
471
504
struct esp8266_socket *socket = (struct esp8266_socket *)handle;
472
505
473
- if (!optval || !optlen || !socket ) {
506
+ if (!optval || !optlen) {
474
507
return NSAPI_ERROR_PARAMETER;
508
+ } else if (!socket) {
509
+ return NSAPI_ERROR_NO_SOCKET;
475
510
}
476
511
477
512
if (level == NSAPI_SOCKET && socket->proto == NSAPI_TCP) {
0 commit comments