Могу ли я вызвать select перед recv_from в сокете, который блокирует?
Да.select () поддерживает как блокирующие, так и неблокирующие сокеты.