diff options
Diffstat (limited to 'dht/src/Network/Tox.hs')
-rw-r--r-- | dht/src/Network/Tox.hs | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/dht/src/Network/Tox.hs b/dht/src/Network/Tox.hs index 4aed1c43..270a9036 100644 --- a/dht/src/Network/Tox.hs +++ b/dht/src/Network/Tox.hs | |||
@@ -36,6 +36,7 @@ import qualified Data.ByteString.Char8 as C8 | |||
36 | import Data.Data | 36 | import Data.Data |
37 | import qualified Data.Dependent.Map as DMap | 37 | import qualified Data.Dependent.Map as DMap |
38 | import Data.Dependent.Sum | 38 | import Data.Dependent.Sum |
39 | import Data.Functor | ||
39 | import Data.Functor.Identity | 40 | import Data.Functor.Identity |
40 | import Data.Functor.Contravariant | 41 | import Data.Functor.Contravariant |
41 | import Data.Maybe | 42 | import Data.Maybe |
@@ -56,6 +57,7 @@ import qualified Data.Word64Map (empty) | |||
56 | ;import Data.Word64Map (fitsInInt) | 57 | ;import Data.Word64Map (fitsInInt) |
57 | import qualified Data.Wrapper.PSQ as PSQ | 58 | import qualified Data.Wrapper.PSQ as PSQ |
58 | import Network.Address (IP, WantIP (..), getBindAddress) | 59 | import Network.Address (IP, WantIP (..), getBindAddress) |
60 | import Network.Bind as Bind | ||
59 | import Network.BitTorrent.DHT.Token as Token | 61 | import Network.BitTorrent.DHT.Token as Token |
60 | import Network.Kademlia.Bootstrap (bootstrap, forkPollForRefresh) | 62 | import Network.Kademlia.Bootstrap (bootstrap, forkPollForRefresh) |
61 | import qualified Network.Kademlia.Routing as R | 63 | import qualified Network.Kademlia.Routing as R |
@@ -262,14 +264,11 @@ newTox :: TVar Onion.AnnouncedKeys -- ^ Store of announced keys we are a rende | |||
262 | -- ( Int -> Onion.OnionMessage Encrypted -> IO () ) -- ^ TCP-bound onion responses. XXX ignored | 264 | -- ( Int -> Onion.OnionMessage Encrypted -> IO () ) -- ^ TCP-bound onion responses. XXX ignored |
263 | -> IO (Tox extra) | 265 | -> IO (Tox extra) |
264 | newTox keydb bindspecs onsess crypto usetcp = do | 266 | newTox keydb bindspecs onsess crypto usetcp = do |
265 | addrs <- mapM (`getBindAddress` True) bindspecs | 267 | msock <- Bind.udpTransport' True bindspecs |
266 | let tryBind addr next _ = udpTransport' addr `catchIOError` (next . Just) | 268 | let failedBind = do |
267 | failedBind mbe = do | 269 | dput XDHT $ "tox udp bind error: " ++ show bindspecs |
268 | forM_ mbe $ \e -> do | ||
269 | dput XDHT $ "tox udp bind error: " ++ show addrs ++ " " ++ show e | ||
270 | throwIO e | ||
271 | throwIO $ userError "Tox UDP listen port?" | 270 | throwIO $ userError "Tox UDP listen port?" |
272 | (udp,sock) <- foldr tryBind failedBind addrs Nothing | 271 | fromMaybe failedBind $ msock <&> \(udp,sock) -> do |
273 | addr <- getSocketName sock | 272 | addr <- getSocketName sock |
274 | dput XOnion $ "UDP bind address: " ++ show addr | 273 | dput XOnion $ "UDP bind address: " ++ show addr |
275 | (relay,sendTCP) <- | 274 | (relay,sendTCP) <- |