def _readable(self, watcher, events):
        """Called by the pyev watcher (self.read_watcher) whenever the socket
        is readable.

        Calls recv and checks for errors. If there are no errors then read_cb
        is called with the newly arrived bytes. Otherwise closes the socket
        and calls close_cb with the error.

        """
        try:
            data = self.sock.recv(4096)
            if len(data) == 0:
                self._close(ConnectionClosed())
            else:
                self.read_cb(data)
        except IOError as e:
            self._close(e)