Checking to see whether the opposite side has disconnected is even trickier. When programming using the POSIX API, you would normally recv() as usual and check to see if it returns with 0 bytes received, which in turn informs you that the opposite side wants to terminate the connection. You have to terminate your end of the connection as well, once you are done sending the last bytes to the opposite side. This is done by calling shutdown( socketHandle, SHUT_WR ) on the socket. Once both sides have done this the connection is truly disconnected and only then should the socketHandles be closed().
SFML doesn't perform a clean TCP connection shutdown as I already stated here (http://en.sfml-dev.org/forums/index.php?topic=11235.msg78412#msg78412), which could lead to problems in some cases.
In order to check if the opposite side wants to disconnect with SFML, you would have to do something like:
std::size_t dummy;
if( socket.receive(&dummy, 0, dummy) == sf::Socket::Disconnected ) {
// Opposite side wants to disconnect.
// Time to lament that there is no clean way
// to perform a clean connection termination with SFML.
}