I have a C++ app that uses standard socket calls and I want to know if I can tell if a socket is still open without sending or receiving any data. Is there a reliable
A socket being "open" doesn't help you with end-to-end connectivity. The only way to know for sure that you can communicate with the other end is to, well, communicate with the other end.
In any protocol you design, you should think about implementing this checking behavior. If it's not your protocol, there's sometimes ways to do it sneakily (for example FTP up a very small, useless file to check if the FTP ports are both still open).