<p>Let's say I'm running a simple server and have <code>accept()</code>ed a connection from a client.</p>

<p>What is the best way to tell when the client has disconnected? Normally, a client is supposed to send a close command, but what if it disconnects manually or loses network connection altogether? How can the server detect or handle this?</p>

select (with the read mask set) will return with the handle signalled, but when you use ioctl* to check the number of bytes pending to be read, it will be zero. This is a sign that the socket has been disconnected.
This is a great discussion on the various methods of checking that the client has disconnected:
Stephen Cleary, Detection of Half-Open (Dropped) Connections
.
* for Windows use ioctlsocket.