Цимисхий построил лагерь и начал осаду. 25 апреля в Дунай вошел византийский флот и блокировал Доростол. Святослав приказал вытащить на берег ладьи, чтобы неприятель не сжег их «греческим огнем». 26–27 апреля произошло новое столкновение под стенами крепости. Исход боя решило появление в тылу у русов византийской конницы Святослав, опасаясь окружения, поспешно отступил в Доростол. В этом сражении погиб воевода Сфенкел.
В ночь на 29 апреля русы вырыли глубокий ров перед крепостными стенами. Чтобы прикрыть земляные работы и запастись продовольствием, отряд воинов Святослава на ладьях спустился по Дунаю и разорил окрестные селения, а также совершил нападение на византийский обоз, захватив богатую добычу. После этого Цимисхий расположил флот непосредственно перед Доростолом, а на суше распорядился перекопать все дороги, ведущие из крепости, и поставить на них дозоры. Однако через несколько дней Святослав предпринял еще одну успешную вылазку, уничтожив несколько осадных машин.
Но третья вылазка, последовавшая 20 июля, не удалась. Русы наступали фалангой. Византийцы тоже успели построиться в боевой порядок и отразили атаку. Понеся большие потери, Святослав возвратился в крепость. После этой неудачи он собрал военный совет, где прозвучали предложения либо начать мирные переговоры с византийцами, либо попытаться ночью прорваться из окружения. Однако князь предпочел дать генеральное сражение в открытом поле и постараться одолеть Цимисхия. Святослав объявил своим соратникам: «Деды и отцы завещали нам храбрые дела! Станем крепко. Нет у нас обычая спасать себя постыдным бегством. Или останемся живы и победим, или умрем со славой! Мертвые сраму не имут, а, убежав от битвы, как покажемся людям на глаза?»
Последнее сражение Святослава с византийцами произошло 22 июля. Русы атаковали первыми и потеснили противника, но были остановлены кавалерией, предводительствуемой самим императором. Чтобы выманить русов подальше от стен, Цимисхий пошел на хитрость. Часть византийского войска во главе с патрикием Романом и столоначальником Петром стала отступать. Когда русы стали преследовать отступающих, отряд византийцев под командованием Варды Склира отрезал их от стен Доростола. Лишь с большими потерями Святослав смог пробиться обратно в крепость.
После поражения у киевского князя не осталось другого выхода как вступить в мирные переговоры. По данным Льва Диакона, войско Святослава потеряло 15 тысяч убитых, византийцев же погибло только 350 человек, хотя многие были ранены.
Византийцы понимали, что штурм Доростола будет стоить больших жертв, равно как и продолжение осады, во время которой осаждающие, как и осажденные, жестоко страдали от болезней. Цимисхий заключил со Святославом мир, беспрепятственно пропустив войско и ладьи русов на родину и даже снабдив их продовольствием на дорогу: по две меры хлеба на человека. Русы были объявлены «союзниками и друзьями» Византии и получили право беспрепятственно торговать в Константинополе. Лев Диакон сообщает, что хлеб был выдан 22 тысячам воинов. Можно предположить, что во время осады Доростола в боях с византийцами и от болезней погибло около 8 тысяч русов.
Воевода Свенельд советовал Святославу идти сушей, но Святослав предпочел возвращаться морем, а затем идти вверх по Днепру к Киеву. У одного из днепровских порогов его ослабленное войско было почти полностью уничтожено печенегами. В Киев вернулся лишь небольшой отряд под командованием Свенельда. В русских летописях содержится утверждение, будто болгары («переяславцы») коварно предупредили печенегов, что русский князь будет возвращаться через днепровские пороги с небольшой дружиной. Византийский историк Иоанн Скилица пишет, что дело обстояло несколько иначе: «По просьбе Свендослава император отправил посольство к пацинакам (печенегам. — Авт.), предлагая им стать его друзьями и союзниками, не переходить через Истр и не опустошать Болгарию, а также беспрепятственно пропустить росов через их землю и возвратиться домой. Пацинаки приняли посольство и заключили договор на предложенных условиях, отказавшись только пропустить росов».
Цимисхий хотел сохранить отношения со Святославом, печенеги же, по свидетельству Скилицы, были очень недовольны, что киевский князь заключил договор с византийцами, и отомстили ему. О движении Святослава к Киеву печенеги вполне могли узнать и без византийской помощи. Они напали на киевского князя и перебили его со всей дружиной. Из черепа Святослава печенежский князь Куря сделал чашу и пил из нее на пирах. Считалось, что благодаря этому к нему перейдет вся сила и умение киевского князя — храброго и искусного воина.