When interacting with the network stack using the sequential API,
all operations are not handled by the calling thread, but instead
are passed to the lwIP network processing (TCP/IP) thread.
Inter-thread communication is used inside lwIP to ensure that
at the point the API function returns, operation is either complete,
or for asynchronous operations, under way.