summaryrefslogtreecommitdiff
path: root/src/Network/QueryResponse.hs
diff options
context:
space:
mode:
authorjoe <joe@jerkface.net>2018-05-27 01:40:05 -0400
committerjoe <joe@jerkface.net>2018-05-27 01:40:05 -0400
commit735fa5c892700efb78c7a9205b719f064ce429a6 (patch)
treef51b6e7039af4c59e2bf13667ba416b3e3d09b73 /src/Network/QueryResponse.hs
parent98000ec40f7ce9adfbc8464ec87d2230345a55d1 (diff)
WIP: "lan" command to announce this Tox node on the lan.
Diffstat (limited to 'src/Network/QueryResponse.hs')
-rw-r--r--src/Network/QueryResponse.hs12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/Network/QueryResponse.hs b/src/Network/QueryResponse.hs
index 0345dd88..4f65b886 100644
--- a/src/Network/QueryResponse.hs
+++ b/src/Network/QueryResponse.hs
@@ -519,14 +519,19 @@ saferSendTo sock bs saddr = void (B.sendTo sock bs saddr)
519-- low-level 'Transport' that can be transformed for higher-level protocols 519-- low-level 'Transport' that can be transformed for higher-level protocols
520-- using 'layerTransport'. 520-- using 'layerTransport'.
521udpTransport :: SockAddr -> IO (Transport err SockAddr ByteString) 521udpTransport :: SockAddr -> IO (Transport err SockAddr ByteString)
522udpTransport bind_address = do 522udpTransport bind_address = fst <$> udpTransport' bind_address
523
524-- | Like 'udpTransport' except also returns the raw socket (for broadcast use).
525udpTransport' :: SockAddr -> IO (Transport err SockAddr ByteString, Socket)
526udpTransport' bind_address = do
523 let family = sockAddrFamily bind_address 527 let family = sockAddrFamily bind_address
524 sock <- socket family Datagram defaultProtocol 528 sock <- socket family Datagram defaultProtocol
525 when (family == AF_INET6) $ do 529 when (family == AF_INET6) $ do
526 setSocketOption sock IPv6Only 0 530 setSocketOption sock IPv6Only 0
531 setSocketOption sock Broadcast 1
527 bind sock bind_address 532 bind sock bind_address
528 return Transport 533 let tr = Transport {
529 { awaitMessage = \kont -> do 534 awaitMessage = \kont -> do
530 r <- handle (ignoreEOF $ Just $ Right (B.empty, SockAddrInet 0 0)) $ do 535 r <- handle (ignoreEOF $ Just $ Right (B.empty, SockAddrInet 0 0)) $ do
531 Just . Right <$!> B.recvFrom sock udpBufferSize 536 Just . Right <$!> B.recvFrom sock udpBufferSize
532 kont $! r 537 kont $! r
@@ -547,3 +552,4 @@ udpTransport bind_address = do
547 _ -> \addr bs -> saferSendTo sock bs addr 552 _ -> \addr bs -> saferSendTo sock bs addr
548 , closeTransport = close sock 553 , closeTransport = close sock
549 } 554 }
555 return (tr, sock)