Византийцы рассчитывали, что русские воины не выдержат атаки конницы и их «стена» будет прорвана, но она оказалась значительно устойчивее, чем они могли предположить. Всего византийцы провели двенадцать атак, но так и не смогли прорвать сомкнутый строй. Единственным результатом этих атак было то, что воины Святослава организованно отступили за стены крепости.
После безрезультатного боя на следующий день Иоанн Цимисхий выстроил под Доростолом укрепленный лагерь с окружающими его глубоким рвом и земляным валом. 25 апреля к Доростолу подошел византийский флот, что означало начало полной блокады крепости. Вечером Святослав вывел из города свою конницу, но византийцы не решились ее атаковать (сам князь тоже не решился перейти в наступление), и бой не состоялся.
На следующий день под стенами крепости произошло новое крупное сражение. На этот раз, как и в первом бою, Святослав вывел тяжеловооруженных пеших воинов, которые были атакованы византийцами. Ожесточенный бой продолжался еще два дня, и в нем погиб Сфенкел. В конечном итоге русское войско было вынуждено отступить после того, как обозначилась реальная угроза захода в его тыл специально посланного императором отряда.
После закончившегося сражения, которое не принесло ему победы, Святослав дал команду выкопать вокруг крепости ров, что не давало возможности византийцам подойти непосредственно под стены и использовать их многочисленные стенобитные и камнеметные машины.
29 апреля Святослав совершенно неожиданно для противника провел вылазку из крепости в направлении Дуная, в ходе которой захватил большое количество продовольствия (что и дало ему возможность выдерживать последующую осаду) и разгромил захваченный врасплох вражеский отряд.
Далее началась длительная осада, и в конце концов византийцы сумели засыпать часть рва вокруг крепости и придвинуть вплотную стенобитные и камнеметные машины, использование которых сделало падение Доростола вопросом ближайшего времени. Это вынудило Святослава 19 июля выйти из крепости, чтобы попытаться уничтожить машины. Время для диверсионной вылазки было выбрано отнюдь не случайно. За время длительной осады русские воины прекрасно изучили распорядок дня противника. Они знали, что в обед византийцы обязательно получают вино и после принятия пищи большинство из них ложатся спать.
Поэтому Святослав напал на византийцев именно после обеда, и расчет его оказался верен. Сонные и отяжеленные принятым вином византийцы растерялись: осадные машины были сожжены, а их командир убит.
Удачная вылазка воодушевила Святослава, и на следующий день он опять вышел с войском из крепости. Византийцы встретили Святослава, выстроившись фалангой, – несмотря на ожесточенные атаки, ее не удалось пробить, и князь были вынужден отступить обратно в Доростол. Отметим, что после отступления византийцы обнаружили среди погибших русских воинов женщин в доспехах, которые сражались наравне с мужчинами.
21 июля Святослав собрал военный совет, на котором обсуждался вопрос о дальнейших действиях. Все присутствующие, кроме великого князя Киевского, были едины во мнении, что дальше удерживать Доростол не удастся, и расходились лишь во мнении, как надо его покинуть. Предлагались варианты от достижения соглашения с византийцами о пропуске русского войска до неожиданной попытки прорыва. Только сам Святослав решил, что Доростол сдавать он не будет. По свидетельству Льва Диакона великий князь Киевский сказал следующие слова: «Погибнет слава, сопутница русского оружия, без труда побеждавшего соседних народов и, без пролития крови, покорявшего целые страны, если мы теперь постыдно уступим римлянам. И так с храбростью предков наших и с тою мыслью, что русская сила была до сего времени непобедима, сразимся мужественно за жизнь нашу. У нас нет обычая бегством спасаться в отечество, но или жить победителями или, совершившим знаменитые подвиги, умереть со славою».