Have a look at the remarks on accept:
The accept function can block the caller until a connection is present if no pending connections are present on the queue, and the socket is marked as blocking. If the socket is marked as nonblocking and no pending connections are present on the queue, accept returns an error as described in the following. After the successful completion of accept returns a new socket handle, the accepted socket cannot be used to accept more connections. The original socket remains open and listens for new connection requests.
You might want to improve response time by using a thread to prevent blocking. You could notify the main thread using an event but be sure to invoke this properly to avoid problems in that area.