diff --git a/hbs2-core/lib/HBS2/Net/Messaging/Unix.hs b/hbs2-core/lib/HBS2/Net/Messaging/Unix.hs index e4c6d2f3..7ce1e97c 100644 --- a/hbs2-core/lib/HBS2/Net/Messaging/Unix.hs +++ b/hbs2-core/lib/HBS2/Net/Messaging/Unix.hs @@ -287,13 +287,15 @@ runMessagingUnix env = do sock <- ContT $ bracket openSock closeSock + sockReady <- newTVarIO False + void $ ContT $ bracket (createQueues env who) dropQueuesFor let attemptConnect = do result <- liftIO $ try $ connect sock $ SockAddrUnix (msgUnixSockPath env) case result of Right _ -> do - none + atomically $ writeTVar sockReady True Left (e :: SomeException) -> do warn $ "MessagingUnix. failed to connect" <+> pretty sa <+> viaShow e @@ -306,6 +308,9 @@ runMessagingUnix env = do forever do + atomically do + readTVar sockReady `orElse` retry + -- Мы клиент. Шлём кому? **ЕМУ**, на том конце трубы. -- У нас один контрагент, имя сокета (файла) == адрес пира. -- Как в TCP порт сервиса (а отвечает тот с другого порта)