That might be the problem, but to know for sure, we must determine the inherent execution overhead in your time-critical loop.
Drop a pair of tick counts - one right at the beginning of the TCL loop and one right before the TCL goes to sleep. If the difference is close to 20ms we have our answer (assuming the TCL overhead doesn't vary much iteration to iteration).
If the difference is significantly smaller than 20ms, then there is plenty of time for NPL to accept TCP connection and talk, so we're dealing with a different kind of problem. Have you tried a simple TCP example just as a sanity check?