Skip to content

Multicast support - #614

Merged
kazu-yamamoto merged 5 commits into
haskell:masterfrom
gev:master
May 11, 2026
Merged

Multicast support#614
kazu-yamamoto merged 5 commits into
haskell:masterfrom
gev:master

Conversation

@gev

@gevgev commented May 6, 2026

Copy link
Copy Markdown
Contributor

Add multicast.

Tested on Linux, Windows, Mac OS.

Example:

moduleDiscovery.ScannerwhereimportControl.ExceptionimportControl.MonadimportData.List.NonEmptyqualifiedasNEimportNetwork.SocketimportNetwork.Socket.ByteStringrunScanner::HostName->HostName->ServiceName->IO()
runScanner host group port =do
host' <- resolve host
group' <- resolve group
let multicast =MulticastGroup (hostAddress group'.addrAddress) Nothing
bracket (socket AF_INETDatagram defaultProtocol) close \sock ->do
bind sock host'.addrAddress
setSockOpt sock AddMembership multicast
forever do
msg <- recv sock 1024print msg
where
resolve addr =NE.head<$> getAddrInfo Nothing (Just addr) (Just port)
hostAddress::SockAddr->HostAddress
hostAddress (SockAddrInet _ addr) = addr
hostAddress _ =error"Unsupported socket address"
moduleDiscovery.AnnoncerwhereimportControl.ConcurrentimportControl.ExceptionimportControl.MonadimportData.List.NonEmptyqualifiedasNEimportNetwork.SocketimportNetwork.Socket.ByteStringrunAnnoncer::HostName->ServiceName->IO()
runAnnoncer group port =do
group' <- resolve group
bracket (socket AF_INETDatagram defaultProtocol) close \sock ->do
forever do
sendAllTo sock "hello" group'.addrAddress
threadDelay 1_000_000where
resolve addr =NE.head<$> getAddrInfo Nothing (Just addr) (Just port)
importControl.Concurrent.AsyncimportControl.MonadimportDiscovery.AnnoncerimportDiscovery.Scannermain::IO()
main = void $ concurrently
do runAnnoncer "239.0.0.1""2026"do runScanner "0.0.0.0""239.0.0.1""2026"

@kazu-yamamoto
kazu-yamamoto requested review from kazu-yamamoto and removed request for kazu-yamamotoMay 11, 2026 02:34

@kazu-yamamotokazu-yamamoto left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a nice work!

@kazu-yamamoto
kazu-yamamoto merged commit fe9fcd2 into haskell:masterMay 11, 2026
1 check passed
@kazu-yamamoto

Copy link
Copy Markdown
Collaborator

Merged.
Thank you!

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@gev@kazu-yamamoto