Есть ли в Си функция, читающая TCP без коллбеков?
В си вообще нету функции, которая что-то там читает из сокета - это делается либо функцией из состава Berkeley sockets для UNIX или Winsock для Windows.
И там и там имеется функция recv - она ничего циклом не нагружает, а усыпляет поток выполнения до прихода порции данных или сообщения об ошибке.
В С вообще есть любая функция :) Какую напишете :)
Есть socket(). Есть connect(). Есть bind(). Есть listen(). Есть read(). Есть accept(). Вот на них обычно и строится все.