http://bugs.winehq.org/show_bug.cgi?id=33798
Bug #: 33798 Summary: Multicast issue. Fail to receive packets from a multicast. Product: Wine Version: 1.6-rc1 Platform: x86 OS/Version: Linux Status: UNCONFIRMED Severity: critical Priority: P2 Component: winsock AssignedTo: wine-bugs@winehq.org ReportedBy: MaximeSedDev@gmail.com Classification: Unclassified
I have an error while receiving packets from a multicast. I think it is due to the binding differences between POSIX and Windows.
On POSIX platforms, bind() acts like a filter. So when you specify a local interface (say 192.168.0.1) it only receive packets specifically addressed to there.
Since the multicast are addressed to a different interface (say 239.192.1.1), bind() 192.168.0.1 means it won't receive any of them. However it works on Windows and it means that you only want to receive packets from the local interface 192.168.0.1. On POSIX, you should bind() 239.192.1.1 or INADDR_ANY instead to receive the packets.
It seems that these differences are not handle in WINE(I checked on 1.4, 1.5 and 1.6).
A simple way to try this issue is with the msdn multicast sample: RX: http://msdn.microsoft.com/en-us/library/aa454098.aspx TX: http://msdn.microsoft.com/en-us/library/aa454073.aspx This will work on both Windows and Wine since it use "INADDR_ANY" but if you specify the interfaces it will fail to receive the datagram on WINE.
http://bugs.winehq.org/show_bug.cgi?id=33798
Bruno Jesus 00cpxxx@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Severity|critical |normal
--- Comment #1 from Bruno Jesus 00cpxxx@gmail.com 2013-06-14 08:01:32 CDT --- The examples do not work for me in XP (are they CE only?), when trying to run the recv example it fails in the setsockopt with error 10042.
What is your kernel version?
Not critical, read http://bugs.winehq.org/page.cgi?id=fields.html#importance
http://bugs.winehq.org/show_bug.cgi?id=33798
--- Comment #2 from Maxime S. MaximeSedDev@gmail.com 2013-06-14 09:21:54 CDT --- (In reply to comment #1)
The examples do not work for me in XP (are they CE only?), when trying to run the recv example it fails in the setsockopt with error 10042.
What is your kernel version?
Not critical, read http://bugs.winehq.org/page.cgi?id=fields.html#importance
I use XP so it should work. I just added the include "<ws2tcpip.h>" in order to build it. I edited the importance value.
http://bugs.winehq.org/show_bug.cgi?id=33798
--- Comment #3 from Bruno Jesus 00cpxxx@gmail.com 2013-06-14 09:28:46 CDT --- (In reply to comment #2)
I use XP so it should work. I just added the include "<ws2tcpip.h>" in order to build it. I edited the importance value.
I can compile the application in Visual Studio 6, but when I run it the setsockopt fails with error 10042.
http://bugs.winehq.org/show_bug.cgi?id=33798
--- Comment #4 from Maxime S. MaximeSedDev@gmail.com 2013-06-14 10:49:39 CDT --- (In reply to comment #3)
(In reply to comment #2)
I use XP so it should work. I just added the include "<ws2tcpip.h>" in order to build it. I edited the importance value.
I can compile the application in Visual Studio 6, but when I run it the setsockopt fails with error 10042.
I understood but I use Code::Blocks and I don't have any problem. I will search for this later. But that's just a example of multicast, take whatever works for you. It should work though.
http://bugs.winehq.org/show_bug.cgi?id=33798
--- Comment #5 from Bruno Jesus 00cpxxx@gmail.com 2013-06-14 11:06:02 CDT --- What is your kernel version? It may be related to bug 33753.
http://bugs.winehq.org/show_bug.cgi?id=33798
--- Comment #6 from Bruno Jesus 00cpxxx@gmail.com 2013-06-14 12:51:22 CDT --- OK, the example runs now. I was linking to the wrong library...
Let me see if I get this right. The example "as is" must work in both windows and wine, that is working for me.
Then I changed the bind address on the receive program to a specific interface address, it works in windows. In kernel <= 3.2 I get an interface bind error.
In kernel 3.10 it works in wine. But I'm only using a single computer to test, maybe in your scenario you have 2 or more computers.
http://bugs.winehq.org/show_bug.cgi?id=33798
--- Comment #7 from Maxime S. MaximeSedDev@gmail.com 2013-06-17 04:28:01 CDT --- (In reply to comment #6)
OK, the example runs now. I was linking to the wrong library...
Let me see if I get this right. The example "as is" must work in both windows and wine, that is working for me.
Then I changed the bind address on the receive program to a specific interface address, it works in windows. In kernel <= 3.2 I get an interface bind error.
In kernel 3.10 it works in wine. But I'm only using a single computer to test, maybe in your scenario you have 2 or more computers.
(In reply to comment #6)
OK, the example runs now. I was linking to the wrong library...
Let me see if I get this right. The example "as is" must work in both windows and wine, that is working for me.
Then I changed the bind address on the receive program to a specific interface address, it works in windows. In kernel <= 3.2 I get an interface bind error.
In kernel 3.10 it works in wine. But I'm only using a single computer to test, maybe in your scenario you have 2 or more computers.
Thank you for the support ! I'm surprised it works for you. I'm using < 3.5 kernels. It should work on multiple computer but it doesn't even work on a single computer for me. The bug 33753 is interesting too but it doesn't work with the 1.4 for me and it should be a regression since the 1.5.15.
To be sure we are using the same thing. You should have replaced in the listener: this: local_sin.sin_addr.s_addr = htonl (INADDR_ANY); with: local_sin.sin_addr.s_addr = inet_addr(YOUR_INTERFACE_IP);
And in the sender: this: source_sin.sin_addr.s_addr = htonl (INADDR_ANY); with: source_sin.sin_addr.s_addr = inet_addr(YOUR_INTERFACE_IP);
I will make some test with the 3.10 and the wine 1.6-rc2 (I just tested it quickly on another pc) as soon as possible.
http://bugs.winehq.org/show_bug.cgi?id=33798
Bruno Jesus 00cpxxx@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |00cpxxx@gmail.com
--- Comment #8 from Bruno Jesus 00cpxxx@gmail.com 2013-06-17 07:10:48 CDT --- (In reply to comment #7)
To be sure we are using the same thing. You should have replaced in the listener: this: local_sin.sin_addr.s_addr = htonl (INADDR_ANY); with: local_sin.sin_addr.s_addr = inet_addr(YOUR_INTERFACE_IP);
And in the sender: this: source_sin.sin_addr.s_addr = htonl (INADDR_ANY); with: source_sin.sin_addr.s_addr = inet_addr(YOUR_INTERFACE_IP);
I have changed only the receiver part, I'll change the sender too and test again.
I will make some test with the 3.10 and the wine 1.6-rc2 (I just tested it quickly on another pc) as soon as possible.
The kernel version is important because the attach to interface mechanism was implemented recently, read more at bug 7929.
http://bugs.winehq.org/show_bug.cgi?id=33798
--- Comment #9 from Bruno Jesus 00cpxxx@gmail.com 2013-06-17 09:43:19 CDT --- Created attachment 44841 --> http://bugs.winehq.org/attachment.cgi?id=44841 Test application
To be sure we are doing the test in the same way I'm attaching the programs I used. I added some prints to make it easier to compare results and this is my output (after pressing OK in the messageboxes):
wine@debian7:~$ wine rec_mcast.exe "192.168.237.136" & [1] 16255 wine@debian7:~$ wine send_mcast.exe "192.168.237.136" Multicasting message! Sending data succeeded! [1]+ Exit 1 ~/wine/wine rec_mcast.exe "192.168.237.136"
The IP after the .exe is the desired IP to bind.
http://bugs.winehq.org/show_bug.cgi?id=33798
Maxime S. MaximeSedDev@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |RESOLVED Resolution| |DUPLICATE
--- Comment #10 from Maxime S. MaximeSedDev@gmail.com 2013-06-26 10:04:37 CDT --- (In reply to comment #9)
Created attachment 44841 [details] Test application
To be sure we are doing the test in the same way I'm attaching the programs I used. I added some prints to make it easier to compare results and this is my output (after pressing OK in the messageboxes):
wine@debian7:~$ wine rec_mcast.exe "192.168.237.136" & [1] 16255 wine@debian7:~$ wine send_mcast.exe "192.168.237.136" Multicasting message! Sending data succeeded! [1]+ Exit 1 ~/wine/wine rec_mcast.exe "192.168.237.136"
The IP after the .exe is the desired IP to bind.
Yes, we are doing the same thing (never print "Multicast message!" with your test)... but I installed a new distrib (Ubuntu 13.04) with a newer Linux Kernel (3.8) and it now works ! Thank you for the help !
*** This bug has been marked as a duplicate of bug 7929 ***
http://bugs.winehq.org/show_bug.cgi?id=33798
Erich Hoover erich.e.hoover@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |erich.e.hoover@gmail.com
--- Comment #11 from Erich Hoover erich.e.hoover@gmail.com 2013-06-26 11:52:39 CDT --- (In reply to comment #10)
... *** This bug has been marked as a duplicate of bug 7929 ***
I love it when patches fix more than one program :)
http://bugs.winehq.org/show_bug.cgi?id=33798
Austin English austinenglish@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|RESOLVED |CLOSED
--- Comment #12 from Austin English austinenglish@gmail.com 2013-06-26 13:27:04 CDT --- Closing.