Las funciones leerPCT y escribirPCT, no son bloqueantes.
"int leerPCT(void *buf, size_t len) Entrega como máximo len bytes recibidos por la conexión. En caso de no contar con datos devolverá 0."
Los send/recv son bloqueantes, por lo que pueden utilizar un select con timeOut para no quedar bloqueados en el send/receive del socket. El timeOut será el tiempo máximo que esperará por la llegada de datos.
Federico