complete with non-blocking socket
complete with a time out select