diff --git a/network-multicast.cabal b/network-multicast.cabal
--- a/network-multicast.cabal
+++ b/network-multicast.cabal
@@ -1,6 +1,6 @@
 name:               network-multicast
-version:            0.0.8
-copyright:          2008-2012 Audrey Tang
+version:            0.0.9
+copyright:          2008-2013 Audrey Tang
 license:            PublicDomain
 license-file:       LICENSE
 author:             Audrey Tang <audreyt@audreyt.org>
diff --git a/src/Network/Multicast.hsc b/src/Network/Multicast.hsc
--- a/src/Network/Multicast.hsc
+++ b/src/Network/Multicast.hsc
@@ -75,15 +75,18 @@
 multicastReceiver :: HostName -> PortNumber -> IO Socket
 multicastReceiver host port = bracketOnError get close setup
   where
+    get :: IO Socket
     get = do
       proto <- getProtocolNumber "udp"
       sock  <- socket AF_INET Datagram proto
 #if defined(SO_REUSEPORT) && ! defined (__linux__)
       setSocketOption sock ReusePort 1
+      return sock
 #else
       setSocketOption sock ReuseAddr 1
       return sock
 #endif
+    setup :: Socket -> IO Socket
     setup sock = do
       (addrInfo:_) <- getAddrInfo Nothing (Just host) (Just $ show port)
       bindSocket sock $ addrAddress addrInfo
