From 91b7b721ea7800b2cf503e4c1a7b5fb6d2e3d944 Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Tue, 9 Mar 2010 14:19:25 +0000 Subject: [PATCH] 2010-03-09 Tatsuhiro Tsujikawa For LPD sockets, bind IN_ADDRANY because binding multicast address fails under Windows. * src/LpdMessageReceiver.cc * test/LpdMessageDispatcherTest.cc --- ChangeLog | 7 +++++++ src/LpdMessageReceiver.cc | 5 +++++ test/LpdMessageDispatcherTest.cc | 4 ++++ 3 files changed, 16 insertions(+) diff --git a/ChangeLog b/ChangeLog index 6a967298..65cf891a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2010-03-09 Tatsuhiro Tsujikawa + + For LPD sockets, bind IN_ADDRANY because binding multicast address + fails under Windows. + * src/LpdMessageReceiver.cc + * test/LpdMessageDispatcherTest.cc + 2010-03-09 Tatsuhiro Tsujikawa Fixed the bug that error message is not propagated to Exception. diff --git a/src/LpdMessageReceiver.cc b/src/LpdMessageReceiver.cc index 14082310..2645e8ef 100644 --- a/src/LpdMessageReceiver.cc +++ b/src/LpdMessageReceiver.cc @@ -52,7 +52,12 @@ bool LpdMessageReceiver::init(const std::string& localAddr) { try { _socket.reset(new SocketCore(SOCK_DGRAM)); +#ifdef __MINGW32__ + // Binding multicast address fails under Windows. + _socket->bindWithFamily(_multicastPort, AF_INET); +#else // !__MINGW32__ _socket->bind(_multicastAddress, _multicastPort); +#endif // !__MINGW32__ if(_logger->debug()) { _logger->debug("Joining multicast group. %s:%u, localAddr=%s", _multicastAddress.c_str(), _multicastPort, diff --git a/test/LpdMessageDispatcherTest.cc b/test/LpdMessageDispatcherTest.cc index d712ef72..598178c6 100644 --- a/test/LpdMessageDispatcherTest.cc +++ b/test/LpdMessageDispatcherTest.cc @@ -43,7 +43,11 @@ void LpdMessageDispatcherTest::testCreateLpdRequest() void LpdMessageDispatcherTest::testSendMessage() { SharedHandle recvsock(new SocketCore(SOCK_DGRAM)); +#ifdef __MINGW32__ + recvsock->bindWithFamily(LPD_MULTICAST_PORT, AF_INET); +#else // !__MINGW32__ recvsock->bind(LPD_MULTICAST_ADDR, LPD_MULTICAST_PORT); +#endif // !__MINGW32__ recvsock->joinMulticastGroup(LPD_MULTICAST_ADDR, LPD_MULTICAST_PORT, ""); LpdMessageDispatcher d("cd41c7fdddfd034a15a04d7ff881216e01c4ceaf", 6000,