http://bugs.winehq.org/show_bug.cgi?id=11640
Summary: Unable to use multiplayer in Sins of a Solar Empire: WSAIoctl unsupported WS_IOCTL cmd 98000004 + unknown address family Product: Wine Version: 0.9.55. Platform: Other OS/Version: other Status: NEW Severity: enhancement Priority: P2 Component: winsock AssignedTo: wine-bugs@winehq.org ReportedBy: scott@open-vote.org
Using Sins of a Solar Empire, neither hosting nor joining a multiplayer game works. I get the following fixmes when clicking the host button and another player attempts to join:
fixme:winsock:WSAIoctl unsupported WS_IOCTL cmd (98000004) fixme:winsock:WSAIoctl unsupported WS_IOCTL cmd (98000004) fixme:winsock:WSAIoctl unsupported WS_IOCTL cmd (98000004) fixme:winsock:WSAIoctl unsupported WS_IOCTL cmd (98000004) fixme:winsock:ws_sockaddr_u2ws Unknown address family 6408 fixme:winsock:ws_sockaddr_u2ws Unknown address family 16 fixme:winsock:ws_sockaddr_u2ws Unknown address family 17282 fixme:winsock:ws_sockaddr_u2ws Unknown address family 16 fixme:winsock:ws_sockaddr_u2ws Unknown address family 16 fixme:winsock:ws_sockaddr_u2ws Unknown address family 1 fixme:winsock:ws_sockaddr_u2ws Unknown address family 1 fixme:winsock:ws_sockaddr_u2ws Unknown address family 1 fixme:winsock:ws_sockaddr_u2ws Unknown address family 1 fixme:winsock:ws_sockaddr_u2ws Unknown address family 53136 fixme:winsock:ws_sockaddr_u2ws Unknown address family 16 fixme:winsock:ws_sockaddr_u2ws Unknown address family 53136 fixme:winsock:ws_sockaddr_u2ws Unknown address family 53136
http://bugs.winehq.org/show_bug.cgi?id=11640
Christian STurm athaba@inode.at changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |athaba@inode.at
--- Comment #1 from Christian STurm athaba@inode.at 2008-03-08 07:57:33 --- I'm getting (nearly) the same (wine-0.9.56): fixme:winsock:WSAIoctl unsupported WS_IOCTL cmd (98000004) fixme:winsock:WSAIoctl unsupported WS_IOCTL cmd (98000004) fixme:winsock:WSAIoctl unsupported WS_IOCTL cmd (98000004) fixme:winsock:WSAIoctl unsupported WS_IOCTL cmd (98000004) fixme:winsock:ws_sockaddr_u2ws Unknown address family 1 fixme:winsock:ws_sockaddr_u2ws Unknown address family 62996 fixme:winsock:ws_sockaddr_u2ws Unknown address family 62996 fixme:winsock:ws_sockaddr_u2ws Unknown address family 62996 fixme:winsock:ws_sockaddr_u2ws Unknown address family 48827 fixme:winsock:ws_sockaddr_u2ws Unknown address family 2314
If you join a multiplayergame the hoster can see you. If you get kicked you can use all the buttons again. The game/menu works again.
http://bugs.winehq.org/show_bug.cgi?id=11640
--- Comment #2 from Jeff Zaroyko jeffzaroyko@gmail.com 2008-03-21 21:49:11 --- It looks like connected udp sockets are not catered to in ws_sockaddr_u2ws after being called in WS2_recv. The msghdr struct contains a member msg_namelen which is zero when msg_name is not set after recv is called. This is the reason for the fixme's being printed, as a switch statement switches on uninitialized data.
http://bugs.winehq.org/show_bug.cgi?id=11640
--- Comment #3 from Jeff Zaroyko jeffzaroyko@gmail.com 2008-03-22 05:52:30 --- It appears that the demo for this doesn't have multiplayer.
Scott,
can you please attach a +winsock log?
http://bugs.winehq.org/show_bug.cgi?id=11640
--- Comment #4 from Christian Sturm athaba@inode.at 2008-03-22 06:40:57 --- I'm not Scott, but maybe this helps too. There are a lot of these: trace:winsock:WSASendTo socket 00d0, wsabuf 0x33fc5c, nbufs 1, flags 0, to (nil), tolen 0, ovl (nil), func (nil) trace:winsock:WSASendTo fd=55, options=0 trace:winsock:WSASendTo -> 0 bytes
http://bugs.winehq.org/show_bug.cgi?id=11640
--- Comment #5 from Jeff Zaroyko jeffzaroyko@gmail.com 2008-03-22 07:06:23 --- (In reply to comment #4)
I'm not Scott, but maybe this helps too. There are a lot of these: trace:winsock:WSASendTo socket 00d0, wsabuf 0x33fc5c, nbufs 1, flags 0, to (nil), tolen 0, ovl (nil), func (nil) trace:winsock:WSASendTo fd=55, options=0 trace:winsock:WSASendTo -> 0 bytes
yes, what I need you to do is pipe this output to a file, something like
cd ~/.wine/path/to/sins of a solar empire WINEDEBUG=+winsock wine foo.exe 2> winsock.txt bzip2 winsock.txt
Then attach winsock.txt.bz2 to bugzilla.
http://bugs.winehq.org/show_bug.cgi?id=11640
--- Comment #6 from Christian Sturm athaba@inode.at 2008-03-22 08:03:02 --- Created an attachment (id=11542) --> (http://bugs.winehq.org/attachment.cgi?id=11542) Trying to host
This is what I get, when I try to host.
http://bugs.winehq.org/show_bug.cgi?id=11640
--- Comment #7 from Christian Sturm athaba@inode.at 2008-03-22 08:04:42 --- Okay, here it is.
BTW: When I try to join an other game it detects that the host uses an other mod, version and such things.
http://bugs.winehq.org/show_bug.cgi?id=11640
Jeff Zaroyko jeffzaroyko@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |jeffzaroyko@gmail.com
--- Comment #8 from Jeff Zaroyko jeffzaroyko@gmail.com 2008-03-24 01:23:44 --- (In reply to comment #6)
Created an attachment (id=11542)
--> (http://bugs.winehq.org/attachment.cgi?id=11542) [details]
Trying to host
This is what I get, when I try to host.
(In reply to comment #2)
It looks like connected udp sockets are not catered to in ws_sockaddr_u2ws after being called in WS2_recv. The msghdr struct contains a member msg_namelen which is zero when msg_name is not set after recv is called. This is the reason for the fixme's being printed, as a switch statement switches on uninitialized data.
An update:
After some digging, I think, the "fixme:winsock:ws_sockaddr_u2ws Unknown address family" messages occur due to how tcp (not udp, I misspoke) is implemented on Linux and subsequently in wine an assumption made in WS2_recv that the msg_name member of the hdr parameter to recvmsg is always updated.
for reference, this is from a recent Linux 2.6 source tree, net/ipv4/tcp.c /* According to UNIX98, msg_name/msg_namelen are ignored * on connected socket. I was just happy when found this 8) --ANK */
My tests lead me to believe that msg_name is not updated on connected tcp sockets, that is, connect a tcp socket, call send() on it to send some data, then call recvfrom - which will cause ws_sockaddr_u2ws to be entered and the reading of initialized data occurs and the default case is reached where the Unknown address family message is printed.
In its current form, Linux appears to set the msg_namelen to zero if recvmsg is called on a connected tcp socket and msg_name is not updated with address details.
This differs from Windows, according to my interpretation of msdn, calling recvfrom does guarantee that address details are always updated.
I'm working on a test that can be added to the tests for ws2_32 and a possible fix also.
http://bugs.winehq.org/show_bug.cgi?id=11640
Regin cahrnah@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |cahrnah@gmail.com
http://bugs.winehq.org/show_bug.cgi?id=11640
--- Comment #9 from Scott Ritchie scott@open-vote.org 2008-05-13 19:23:22 --- Any progress?
Thank you so much for your effort.
http://bugs.winehq.org/show_bug.cgi?id=11640
--- Comment #10 from Jeff Zaroyko jeffzaroyko@gmail.com 2008-06-12 06:20:48 --- (In reply to comment #9)
Any progress?
Thank you so much for your effort.
Well, I have a test that reproduces bad codepath. After reading msdn a little more carefully, I discovered it says: "The lpFrom and lpFromlen parameters are ignored for connection-oriented sockets."
Cross compiling my test shows that statement to be correct. Which agrees with what happens with regular Linux sockets more or less.
http://bugs.winehq.org/show_bug.cgi?id=11640
--- Comment #11 from Jeff Zaroyko jeffzaroyko@gmail.com 2008-06-12 06:22:39 --- Created an attachment (id=13937) --> (http://bugs.winehq.org/attachment.cgi?id=13937) avoid updating lpFrom on connected sockets
http://bugs.winehq.org/show_bug.cgi?id=11640
Austin English austinenglish@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Keywords| |patch
--- Comment #12 from Austin English austinenglish@gmail.com 2008-06-12 07:39:30 --- Got a test case for this?
http://bugs.winehq.org/show_bug.cgi?id=11640
--- Comment #13 from Kai Blin kai.blin@gmail.com 2008-06-12 08:50:37 --- (In reply to comment #11)
Created an attachment (id=13937)
--> (http://bugs.winehq.org/attachment.cgi?id=13937) [details]
avoid updating lpFrom on connected sockets
Looks good. As Austin said, slap on a test case and send to wine-patches.
Thanks.
http://bugs.winehq.org/show_bug.cgi?id=11640
--- Comment #14 from Jeff Zaroyko jeffzaroyko@gmail.com 2008-06-12 21:11:05 --- (In reply to comment #13)
(In reply to comment #11)
Created an attachment (id=13937)
--> (http://bugs.winehq.org/attachment.cgi?id=13937) [details] [details]
avoid updating lpFrom on connected sockets
Looks good. As Austin said, slap on a test case and send to wine-patches.
Thanks.
I can't see a way to automatically test for the bug which my patch fixes, since hitting the default case when switching on uninitialized data doesn't modify the value-result argument lpFrom or change the return value, only a side effect occurs which is printing the fixme.
My current test can only show that there's problem by observing the erroneous fixme messages when run interactively, not a pass fail.
But, I can show in the test that lpFrom is ignored on a connected socket - confirming what msdn says.
http://bugs.winehq.org/show_bug.cgi?id=11640
--- Comment #15 from Jeff Zaroyko jeffzaroyko@gmail.com 2008-06-12 21:11:38 --- Created an attachment (id=13961) --> (http://bugs.winehq.org/attachment.cgi?id=13961) test that lpFrom is not updated on connection-oriented sockets in ws2 recv calls
http://bugs.winehq.org/show_bug.cgi?id=11640
--- Comment #16 from Kai Blin kai.blin@gmail.com 2008-06-13 02:27:24 --- That's really good. Just remove the trailing whitespace line 97 of the patch adds, combine with the fix and send to wine-patches. Note that Alexandre might prefer to not commit it until Wine 1.0 is released.
Thanks for digging into this.
http://bugs.winehq.org/show_bug.cgi?id=11640
Dan Kegel dank@kegel.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |dank@kegel.com URL| |http://www.sinsofasolarempir | |e.com Severity|enhancement |normal
--- Comment #17 from Dan Kegel dank@kegel.com 2008-06-13 10:17:00 --- Jeff posted the patch+test, http://winehq.org/pipermail/wine-patches/2008-June/055800.html
http://bugs.winehq.org/show_bug.cgi?id=11640
Austin English austinenglish@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Keywords| |testcase
http://bugs.winehq.org/show_bug.cgi?id=11640
--- Comment #18 from cruciz crucis@gmail.com 2008-06-14 21:48:01 --- I have applied the patch and it has resolved the "Unknown address family" errors when i host or join a game.
However the menus still hangs. The error returned is: fixme:winsock:WSAIoctl unsupported WS_IOCTL cmd (98000004) fixme:winsock:WSAIoctl unsupported WS_IOCTL cmd (98000004) fixme:winsock:WSAIoctl unsupported WS_IOCTL cmd (98000004) fixme:winsock:WSAIoctl unsupported WS_IOCTL cmd (98000004)
Thanks for the effort
http://bugs.winehq.org/show_bug.cgi?id=11640
--- Comment #19 from Jeff Zaroyko jeffzaroyko@gmail.com 2008-06-14 22:17:36 --- (In reply to comment #18)
I have applied the patch and it has resolved the "Unknown address family" errors when i host or join a game.
However the menus still hangs. The error returned is: fixme:winsock:WSAIoctl unsupported WS_IOCTL cmd (98000004)
Thanks for the effort
That's good to hear - thanks for testing, the WSAIoctl message is a different bug which will need to be looked at and fixed before this bug report can be closed.
http://bugs.winehq.org/show_bug.cgi?id=11640
Steve Dougherty asksteved.com@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |asksteved.com@gmail.com
--- Comment #20 from Steve Dougherty asksteved.com@gmail.com 2008-08-02 13:28:42 --- StarCraft: Brood War is also affected by a Winsock error when trying to play on LAN, something which worked before. Maybe Blizzard changed something, because I tried with 1.1.2 and 1.0.0... Its message is very similar:
fixme:winsock:WSAIoctl unsupported WS_IOCTL cmd (9800000c)
Should this be filed as a separate bug?
http://bugs.winehq.org/show_bug.cgi?id=11640
Alexandre Julliard julliard@winehq.org changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution| |FIXED Summary|Unable to use multiplayer in|Unable to use multiplayer in |Sins of a Solar Empire: |Sins of a Solar Empire: |WSAIoctl unsupported |unknown address family |WS_IOCTL cmd 98000004 + | |unknown address family | Target Milestone|--- |1.0.1
--- Comment #21 from Alexandre Julliard julliard@winehq.org 2008-10-16 07:57:46 --- Unknown address family bug fixed by 30e6b81dd1890ce21e9a5bb22d251887fbd8188a, marking fixed and nominating for 1.0.1. Please file new bugs for the ioctl issues.
http://bugs.winehq.org/show_bug.cgi?id=11640
Alexandre Julliard julliard@winehq.org changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|RESOLVED |CLOSED
--- Comment #22 from Alexandre Julliard julliard@winehq.org 2008-10-24 11:12:48 --- Closing bugs fixed in 1.1.7.