protonscr

Steam In-Home Streaming fails if IPv6 is disabled system-wide

steamclosed Streaming
ValveSoftware/steam-for-linux#5578 · opened 2018-07-25 by john5788 · updated 2020-11-06 · 7 comments · github
Jjohn5788 2018-07-25 github

Your system information

  • Steam client version (build number or date): Jul 24 2018, at 18:27:28
  • Distribution (e.g. Ubuntu): Gentoo
  • Opted into Steam client beta?: [Yes/No] No
  • Have you checked for system updates?: [Yes/No] Yes

Please describe your issue in as much detail as possible:

Describe what you expected should happen and what did happen. Please link any large code pastes as a Github Gist

Click Stream on Aim Hero game. A window pops up very briefly and immediately closes. Game is still running on Host machine, client is doing nothing. This happens with any game, not just just Aim Hero.

I used to be able to use IHS and stream any game including non-Steam games before the update. My host is a Windows 10 system with various games installed and is also running the latest update.

Steps for reproducing this issue:

  1. Launch Steam
  2. Select Aim Hero (or any game)
  3. Select Stream
  4. Client window crashes.
Jjohn5788 2018-07-27 github

I narrowed down the problem a little bit by executing the streaming_client command manually. I found the command and parameters by using the following strace:

$ strace -f -s999999 -o strace.log -e trace=clone,execve steam

This led me to:

$ /home/john5788/.local/share/Steam/ubuntu12_32/streaming_client --gameid 518030 --server 192.168.1.101:27031 --windowed --quality 2 --bitrate 50000 --captureres 0x0 bc85f0b599b2e{truncated}

When I execute that command, I see this:

/home/john5788/.local/share/Steam/ubuntu12_32/streaming_client: error while loading shared libraries: libtier0_s.so: cannot open shared object file: No such file or directory

I am using STEAM_RUNTIME, is this library missing from the latest update?

Edit:

There were a few missing libraries:

$ ldd steamclient.so  | grep not
	libtier0_s.so => not found  
	libvstdlib_s.so => not found  
	libopenal.so.1 => not found  
	libudev.so.0 => not found

So I included them manually with LD_LIBRARY_PATH by finding out where each of these missing libraries were and executed the same command again:

Edit: Disregard above comments about missing libraries. I understand now that opening streaming_client by itself on the command line will cause this problem because the environment was not setup by the steam.sh script. Loading the libraries manually like this is necessary in order to execute streaming_client to trace the actual error.

$ export LD_LIBRARY_PATH=/home/john5788/.local/share/Steam/ubuntu12_32/:/home/john5788/.local/share/Steam/ubuntu12_32/steam-runtime/i386/lib/i386-linux-gnu/

$ /home/john5788/.local/share/Steam/ubuntu12_32/streaming_client --gameid 518030 --server 192.168.1.101:27031 --windowed --quality 2 --bitrate 50000 --captureres 0x0 bc85f0b599b2e{truncated}

Installing breakpad exception handler for appid(streaming_client)/version(20180724182646)
Installing breakpad exception handler for appid(streaming_client)/version(1.0)
Initializing player
Refresh rate: 144.00
Effective rate: 143.75
Video size: 1920x1080, output size: 1920x1080
Video rect: 1920x1080 at 0,0
Texture rect: 1920x1080 at 0,0
Initialized player
Server available at address: 192.168.1.101:27031
Connecting to server at address: 192.168.1.101:27031
Couldn't create socket: ��^

Tracing the streaming_client command to figure out why it cannot create a socket:

7972  write(1, "Initialized player\n", 19) = 19
7972  gettid()                          = 7972
7972  gettid()                          = 7972
7972  write(1, "Server available at address: 192.168.1.101:27031\n", 49) = 49
7972  gettid()                          = 7972
7972  gettid()                          = 7972
7972  gettid()                          = 7972
7972  write(1, "Connecting to server at address: 192.168.1.101:27031\n", 53) = 53
7972  socket(AF_INET6, SOCK_DGRAM, IPPROTO_UDP) = -1 EAFNOSUPPORT (Address family not supported by protocol)
7972  gettid()                          = 7972
7972  write(1, "Couldn't create socket: \272\4c\364\n", 29) = 29
7972  exit_group(1)                     = ?
7975  <... ppoll resumed> <unfinished ...>) = ?
7975  +++ exited with 1 +++
7972  +++ exited with 1 +++

It looks like streaming_client is trying to open an IPv6 socket when it shouldn't? I don't have IPv6 support in my kernel. There should be a check for this instead of blindly opening the socket this way.

Although I understand it is possible to map an IPv4 destination with an IPv6 address, according to FreeBSD, it's not recommended: https://www.unix.com/man-page/FreeBSD/4/inet6/

By default, FreeBSD does not route IPv4 traffic to AF_INET6 sockets. The default behavior intentionally violates RFC2553 for security reasons. Listen to two sockets if you want to accept both IPv4 and IPv6 traffic. IPv4 traffic may be routed with certain per-socket/per-node configuration, however, it is not recommended to do so. Consult ip6(4) for details.

Jjohn5788 2018-07-27 github

Notifying @slouken and @kisak-valve to take a look at the debugging and to hopefully get a fix in place. As far as I know there are at least 3 other occurrences of this from other people on Reddit and the Steam forums.

Bbackwardscamel 2018-11-18 github

Would this be the same issue going the other way? The July timing seems about right where my in home streaming stopped working. Only in my case I am running linux as the host and a Steam Link as the client (Also tried from the android Steam Link app). As soon as I try to connect, Steam on the host crashes with a "Couldn't create socket" message. I have tried all combinations of having ipv6 enabled/disabled on the host with beta and standard steam. If you need me to gather any more information let me know.

Wwico 2018-12-26 github

After a long time of abstinence, today I tried to give my steamlink a chance - and I ran into the same issue as mentioned by https://github.com/ValveSoftware/steam-for-linux/issues/5578#issuecomment-408328577.

My host (Linux, Ubuntu 18.04.1 LTS) with a custom kernel and IPv6 disabled (not built in into the kernel because of reasons!) failed to serve. The error is the same: "Couldn't create socket: <random_special_chars>". Steam istself is latest beta (on Linux).

The streaming_client seems to brute-force open a IPv6 socket even if the kernel/system does not support it as @john5788 figured out. Is anyone at valve looking into that issue? Or do I have to introduce IPv6 now? :)

And, as a side note, I tried: https://www.reddit.com/r/archlinux/comments/99o83p/disabling_ipv6_breaks_steam_inhome_streaming/
This seems to help "a bit" (steam link can connect) but later failes with:
[...]
Bind to [::]:27050 failed: �����
[...]

Kkisak-valve maintainer 2020-10-02 github

Hello @john5788, are you still experiencing this issue on an up to date system?

Friendly side note that I'm a moderator for Valve's issue trackers and not a Valve developer myself.

Jjohn5788 2020-10-02 github

Hello @john5788, are you still experiencing this issue on an up to date system?

Friendly side note that I'm a moderator for Valve's issue trackers and not a Valve developer myself.

My personal fix was to recompile my kernel with IPv6 support enabled, although I don't even use it.

Kkisak-valve maintainer 2020-11-06 github

Thanks for the feedback. Closing pending confirmation that this issue still occurs.