The last time this came up for a TCP implementation I used to maintain, our interpretation of Robustness Principle applied to this problem dictated that we shouldn't send segments with checksum fields set to all ones (that is, we shouldn't send ~(+0)), but that we had to accept either ~(+0) or ~(-0) in received segments. Strictly speaking, either zero state is completely legal, but one is (apparently) more surprising to most implementors than the other, due to the implementation techniques that suggest themselves on most modern processors.