diff --git a/examples/sender.hs b/examples/sender.hs
--- a/examples/sender.hs
+++ b/examples/sender.hs
@@ -7,8 +7,6 @@
 main :: IO ()
 main = withSocketsDo $ do
     (sock, addr) <- multicastSender "224.0.0.99" 9999
-    setTimeToLive sock 10
-    setInterface sock "192.168.2.1"
     let loop = do
         msg <- fmap show getClockTime
         sendTo sock msg addr
diff --git a/network-multicast.cabal b/network-multicast.cabal
--- a/network-multicast.cabal
+++ b/network-multicast.cabal
@@ -1,5 +1,5 @@
 name:               network-multicast
-version:            0.0.3
+version:            0.0.4
 copyright:          2008 Audrey Tang
 license:            BSD3
 license-file:       LICENSE
@@ -17,7 +17,7 @@
 library
     extensions:         ForeignFunctionInterface, CPP
     exposed-modules:    Network.Multicast
-    build-depends:      base, network
+    build-depends:      base >= 2 && < 4, network
     hs-source-dirs:     src
     if os(win32)
         extra-libraries: ws2_32
diff --git a/src/Network/Multicast.hsc b/src/Network/Multicast.hsc
--- a/src/Network/Multicast.hsc
+++ b/src/Network/Multicast.hsc
@@ -82,30 +82,29 @@
     addMembership sock host
     return sock
 
-doSetSocketOption :: Storable a => Socket -> a -> IO CInt
-doSetSocketOption (MkSocket s _ _ _ _) x = alloca $ \ptr -> do
+doSetSocketOption :: Storable a => CInt -> Socket -> a -> IO CInt
+doSetSocketOption ip_multicast_option (MkSocket s _ _ _ _) x = alloca $ \ptr -> do
     poke ptr x
-    c_setsockopt s _IPPROTO_IP _IP_MULTICAST_LOOP (castPtr ptr) (toEnum $ sizeOf x)
+    c_setsockopt s _IPPROTO_IP ip_multicast_option (castPtr ptr) (toEnum $ sizeOf x)
 
 -- | Enable or disable the loopback mode on a socket created by 'multicastSender'.
 -- Loopback is enabled by default; disabling it may improve performance a little bit.
 setLoopbackMode :: Socket -> LoopbackMode -> IO ()
 setLoopbackMode sock mode = maybeIOError "setLoopbackMode" $ do
     let loop = if mode then 1 else 0 :: CUChar
-    doSetSocketOption sock loop
-    where
+    doSetSocketOption _IP_MULTICAST_LOOP sock loop
 
 -- | Set the Time-to-Live of the multicast.
 setTimeToLive :: Socket -> TimeToLive -> IO ()
 setTimeToLive sock ttl = maybeIOError "setTimeToLive" $ do
     let val = toEnum ttl :: CInt
-    doSetSocketOption sock val
+    doSetSocketOption _IP_MULTICAST_TTL sock val
 
 -- | Set the outgoing interface address of the multicast.
 setInterface :: Socket -> HostName -> IO ()
 setInterface sock host = maybeIOError "setInterface" $ do
     addr <- inet_addr host
-    doSetSocketOption sock addr
+    doSetSocketOption _IP_MULTICAST_IF sock addr
 
 -- | Make the socket listen on multicast datagrams sent by the specified 'HostName'.
 addMembership :: Socket -> HostName -> IO ()
