Sri Lanka defeated South Africa in the second one-day international in Colombo on Tuesday, to take a 2-0 lead in the five-match series.
South Africa, set a revised target of 176 from 29 overs in the rain-affected match, were 104-5 in 21 overs when another downpour at the Premadasa stadium forced the match to be called off.
With 121-5 being the par score at that stage, the Proteas lost by 17 runs as per the Duckworth-Lewis system.
Earlier, fast bowler Morne Morkel claimed 3-34 as South Africa restricted Sri Lanka to 223-9 from 49.2 overs.
Sri Lanka's stand-in captain Dinesh Chandimal and opener Tillakaratne Dilshan top-scored with 43 apiece before heavy rain ended the innings with four deliveries still to be bowled at the Premadasa stadium.
South Africa, thrashed by 180 runs in the first match on Saturday, recovered to keep the free-stroking Sri Lankan batsmen in check on the slow wicket after the hosts elected to take first strike.
But the Proteas suffered a setback when star batsman Hashim Amla, who missed the first game due to a neck strain, injured his left knee while fielding and was rushed to hospital for precautionary scans.
It was not immediately clear if Amla will be able to bat in what is almost certain to be an overs-reduced innings.
Sri Lanka lost opener Upul Tharanga in the fourth over before a second wicket stand of 59 between Dilshan and Kumar Sangakkara helped them recover to 66-1 in the 18th over.
Sangakkara, who smashed a career-best 169 on Saturday, hit six boundaries in his 37 before he mistimed a drive off left-arm spinner Aaron Phangiso and was caught in the covers.
South Africa pegged the hosts down to 123-4 in 30 overs as Mahela Jayawardene was bowled by Robin Peterson for 17 and Dilshan was caught behind off Morkel soon after.
Chandimal, leading Sri Lanka in place of the banned Angelo Mathews, boosted the total with four boundaries in his 51-ball innings.
Two Sri Lankan umpires officiated the game after Australia's Rod Tucker, who was due to stand at one end, fell ill before the start.