diff --git a/apps/consul_proxy/src/consul_proxy.app.src b/apps/consul_proxy/src/consul_proxy.app.src
index 418155c9ae2df6fbe4bc7ba919b83f8064ddc561..fdc2b866a830b6f23874ecb932cdc8c8b8fee64c 100644
--- a/apps/consul_proxy/src/consul_proxy.app.src
+++ b/apps/consul_proxy/src/consul_proxy.app.src
@@ -1,6 +1,6 @@
 {application, consul_proxy, [
     {description, "Proxy for docker swarm using consul and vegur"},
-    {vsn, "0.4.3"},
+    {vsn, "0.4.4"},
     {registered, []},
     {mod, {consul_proxy_app, []}},
     {applications, [
diff --git a/apps/consul_proxy/src/consul_proxy_middleware_hijack.erl b/apps/consul_proxy/src/consul_proxy_middleware_hijack.erl
index d01fb12db92139b578ddb2e5ac15ea0dd8f70a5e..da8199f773ee7be0ec5313b4f02eae52c194fbfb 100644
--- a/apps/consul_proxy/src/consul_proxy_middleware_hijack.erl
+++ b/apps/consul_proxy/src/consul_proxy_middleware_hijack.erl
@@ -104,7 +104,8 @@ loop(State = #socket_state{socket = Socket, transport = Transport, timeout = Tim
             gen_server:cast(?SERVER, {socket_close, Socket});
         {error, Reason} ->
             lager:error("Error receiving data: ~p", [Reason]),
-            Transport:close(Socket)
+            Transport:close(Socket),
+            gen_server:cast(?SERVER, {socket_close, Socket})
     end.
 
 %%====================================================================
@@ -114,7 +115,6 @@ loop(State = #socket_state{socket = Socket, transport = Transport, timeout = Tim
 init(Args) ->
     lager:info("Args: ~p", [Args]),
     Tab = ets:new(hijacked_domains, [bag, {read_concurrency, true}]),
-    process_flag(trap_exit, true),
     {ok, #state{domain_tab = Tab}}.
 
 handle_call({socket_recv, Terms = #{<<"action">> := <<"login">>}, SocketState}, _From, State) ->
@@ -190,10 +190,6 @@ handle_cast(Request, State) ->
     lager:warning("Unhandled cast: ~p", [Request]),
     {noreply, State}.
 
-handle_info({'EXIT', Socket, Reason}, State) when is_port(Socket) ->
-    gen_server:cast(?SERVER, {socket_close, Socket, Reason}),
-    {noreply, State};
-
 handle_info(Info, State) ->
     lager:warning("Unhandled message: ~p", [Info]),
     {noreply, State}.
@@ -253,8 +249,19 @@ hijack([{_Host, Mode, RE, Socket, Transport} | Patterns], Req, From) ->
         _ ->
             B64Pid = base64:encode(term_to_binary(From)),
             {Map, Req2} = request_to_map(Req1),
-            Transport:send(Socket, msgpack:pack(Map#{<<"from">> => B64Pid})),
-            {hijacked, Mode, Req2}
+            case Transport:send(Socket, msgpack:pack(Map#{<<"from">> => B64Pid})) of
+                ok ->
+                    {hijacked, Mode, Req2};
+                {error, closed} ->
+                    lager:warning("Stale ~p socket: ~p", [Transport, Socket]),
+                    gen_server:cast(?SERVER, {socket_close, Socket}),
+                    hijack(Patterns, Req, From);
+                {error, Reason} ->
+                    lager:error("Error sending data to ~p socket ~: ~p", [Transport, Socket, Reason]),
+                    Transport:close(Socket),
+                    gen_server:cast(?SERVER, {socket_close, Socket}),
+                    hijack(Patterns, Req, From)
+            end
     end.
 
 send(#socket_state{socket = Socket, transport = Transport}, Data) ->
diff --git a/rebar.config b/rebar.config
index 8a68d211260b01c5f0038c90536439f73ac301ab..4c582557c650f1347014f6afb616098cd1e453d0 100644
--- a/rebar.config
+++ b/rebar.config
@@ -18,7 +18,7 @@
 ]}.
 
 {relx, [
-    {release, {consul_proxy, "0.4.3"}, [consul_proxy]}, {sys_config, "./config/sys.config"},
+    {release, {consul_proxy, "0.4.4"}, [consul_proxy]}, {sys_config, "./config/sys.config"},
     {vm_args, "./config/vm.args"},
     {dev_mode, true},
     {include_erts, false},