А точно подвисает на accept? Я бы предположил, что ты некорректно закрываешь соединение на клиенте и и з-за этого recv блокируется. Если это винда и все навтройки выстроены по умолчанию (не изменено время ожидания и соединение не отслеживает таймаут), то несколько минут винда будет думать, что соединение живое и recv не вернет 0.