I've been switching all my devices to run over TLS if possible, but TCP if not. Polycom has been giving me the most grief lately. When changing from UDP to TCP on a Polycom SoundPoint IP 330 or 335, I would continually get the following message in my Asterisk logs:
[Jun 7 10:12:04] WARNING: chan_sip.c:3905 __sip_xmit: sip_xmit of 0xa0b1338 (len 583) to x.x.x.x:48356 returned -2: No such file or directory
Sometimes the "No such file or directory" would be "Success", which of course is even more confusing.
After debugging chan_sip, I discovered that the socket was being closed. I confirmed this with tcpdump. Just to be sure, I switched my registrar from Asterisk to Kamailio and the same behavior occurred.
Looking through the Polycom configuration, I couldn't see any option for "Close TCP Session After 90 Seconds". I tried enabling all the keep-alive options but saw no difference. The solution was to lower the registration timeout to 60 seconds. It's kind of a pain and not ideal, but it worked so I'll go with it.