2020-04-06 14:19:34 +02:00
|
|
|
{-# LANGUAGE OverloadedStrings #-}
|
|
|
|
|
|
|
|
module Main where
|
|
|
|
|
|
|
|
import Network.Socket hiding (send, sendTo, recv, recvFrom)
|
|
|
|
import Network.Socket.ByteString
|
|
|
|
import Control.Monad (forever)
|
|
|
|
import System.IO (
|
|
|
|
IOMode (ReadWriteMode)
|
|
|
|
)
|
|
|
|
import qualified Data.ByteString as BS
|
|
|
|
import qualified Data.ByteString.UTF8 as BSU
|
|
|
|
|
|
|
|
main = do
|
|
|
|
sock <- socket AF_INET6 Datagram defaultProtocol
|
2020-04-09 00:38:55 +02:00
|
|
|
setSocketOption sock IPv6Only 1
|
2020-04-06 14:19:34 +02:00
|
|
|
-- lookup destination to get a SockAddr
|
|
|
|
let hints = defaultHints { addrFamily = AF_INET6, addrSocketType = Datagram}
|
|
|
|
destAddr <- addrAddress . head <$> getAddrInfo (Just hints) (Just "::1") (Just "7331")
|
|
|
|
forever $ do
|
|
|
|
inp <- getLine
|
|
|
|
sendTo sock (BSU.fromString inp) destAddr
|
|
|
|
print "Yeah, sent sth."
|
|
|
|
-- important: as the socket is unconnected, it also accepts replies from a different source port
|
|
|
|
(msg, fromAddr) <- recvFrom sock 65535
|
|
|
|
putStrLn $ "Woop, received " ++ show msg ++ " from " ++ show fromAddr
|
|
|
|
return ()
|