В си вообще нету функции, которая что-то там читает из сокета - это делается либо функцией из состава Berkeley sockets для UNIX или Winsock для Windows.
И там и там имеется функция recv - она ничего циклом не нагружает, а усыпляет поток выполнения до прихода порции данных или сообщения об ошибке.