Left-hander Jeremy Affeldt and the San Francisco Giants have agreed to terms on a three-year contract, a person familiar with the negotiations said Monday night.