Your best bet will be to use Java. First of all Java is cross platform compatible like C++ but integrates well with the SIP API. It also offers you the flexibility of C++ (since Java originally came out of C++) but can do a lot of things that .NET could do. Do remember thought that .NET is primarily a Microsoft invention and unless you use something like Mono it won't work with a Linux/Unix machine.
So for Java I would recommend that you check out the JAIN (Java APIs for Integrated Networks) work group which will allow you to work with SIP quite easily and should meet both your hardware and software needs.
If you are really against Java, your next choice will probably be C++ for the flexibility and cross platform compatibility it offers. It might be more of a challenge to work with SIP though unless you can find a really good library to help extract away the complexity.
Hope that helps you out.