ap

Dependencies:   DnsQuery

Dependents:   WizFi310_TCP_Echo_Server_Example

Fork of NetworkSocketAPI by NetworkSocketAPI

Revision:
82:97d166c4a193
Parent:
81:1600369a29dd
Child:
87:94e2cf3a06be
--- a/TCPServer.cpp	Tue Apr 05 12:52:07 2016 -0500
+++ b/TCPServer.cpp	Tue Apr 05 13:09:43 2016 -0500
@@ -15,6 +15,7 @@
  */
 
 #include "TCPServer.h"
+#include "Timer.h"
 
 TCPServer::TCPServer(NetworkInterface *iface)
     : Socket(iface, NetworkInterface::TCP)
@@ -41,20 +42,29 @@
 
 int TCPServer::accept(TCPSocket *connection)
 {
-    if (!_socket) {
-        return NSAPI_ERROR_NO_SOCKET;   
-    }
+    mbed::Timer timer;
+    timer.start();
 
     void *socket = connection->_socket;
     connection->_socket = 0;
     _iface->socket_destroy(socket);
 
-    int err = _iface->socket_accept(_socket, &socket);
-    if (!err) {
-        connection->_socket = socket;
+    while (true) {
+        if (!_socket) {
+            return NSAPI_ERROR_NO_SOCKET;   
+        }
+
+        int err = _iface->socket_accept(_socket, &socket);
+
+        if (err > 0) {
+            connection->_socket = socket;
+        }
+
+        if (err != NSAPI_ERROR_WOULD_BLOCK || !_blocking || 
+            (_timeout && timer.read_ms() > _timeout)) {
+            return err;
+        }
     }
-
-    return err;
 }