anchor.diff:      {noreply, State}.
   
   handle_info({'DOWN', ConnRef, process, _ConnPid, _Reason},
  +            State = #?STATE{conn_ref = ConnRef,
  +                            monitor_ref = MonRef}) when is_reference(MonRef) ->
  +    ?WARN("[~p] monitor down: ~p ~n", [?MODULE, MonRef]),
  +    signal_connect(self()),
  +    erlang:demonitor(ConnRef),
  +    {noreply, State};
  +handle_info({'DOWN', ConnRef, process, _ConnPid, _Reason},
               State = #?STATE{conn_ref = ConnRef}) ->
       signal_connect(self()),
       erlang:demonitor(ConnRef),
  
positive.code:                   conn_ref               :: reference(),
                    connection_timeout = 0 :: integer(),
                    monitor_pid            :: pid(),
                    monitor_ref            :: reference()}).
  
  %% ------------------------------------------------------------------
  %% API Function Exports
  
negative.code:             {ok, Socket} ->
                  case eovsdb_protocol_sup:start_child(Socket) of
                      {ok, Conn} ->
                          case State#?STATE.monitor_ref of
                              Ref when is_reference(Ref) ->
                                  ?INFO("[~p] monitor reconnecting: ~p ~n", [?MODULE, Ref]),
                                  gen_tcp:controlling_process(Socket, Conn),
                                  MRef = erlang:monitor(process, Conn),
                                  eovsdb_protocol:monitor(Conn,
                                                          State#?STATE.monitor_pid,
                                                          State#?STATE.database,
                                                          State#?STATE.monitor_select),
                                  State#?STATE{ conn_ref = MRef, conn_pid = Conn };
                              _ ->
                                  gen_tcp:controlling_process(Socket, Conn),
                                  MRef = erlang:monitor(process, Conn),
                                  State#?STATE{ conn_ref = MRef, conn_pid = Conn }
                          end;
                      {error, ChildReason} ->
                          HostStr = inet_parse:ntoa(Host),
                          ?WARN("[~p] can't start eovsdb_protocol for ~s:~p: ~p~n", [?MODULE, HostStr, Port, ChildReason]),
                          retry_connect(self(), TimeOut),
                          State
                  end;
              {error, TcpReason} ->
                  HostStr = inet_parse:ntoa(Host),
                  ?WARN("[~p] tcp error connecting to ~s:~p: ~p~n", [?MODULE, HostStr, Port, TcpReason]),
                  retry_connect(self(), TimeOut),
                  State
          end,
  