Make robust to dropped connections

  • If client drops during server's turn to send message, server detects reset connection after attempting to send message and throws SocketException
  • If client drops during client's turn to send message, server immediately receives null message and throws NullPointerException
  • If server drops during server's turn to send message, client immediately receives null message and throws NullPointerException
  • If server drops during client's turn to send message, client receives null message after attempting to send message and throws NullPointerException