Hi Dave, Hi all,<br>
<br>
I have checked two images that I am updating frequently via the update stream and in both, EnableIPv6 is still set to false. In one of these fresh images, without new networking, the only error in the Network-Tests package is SocketTest>>#testTCPSocketReuse (SocketPrimitiveFailed). If I turn on new networking, I have 15 failures, 2 errors in total (Windows 21H1).<br>
<br>
So there are two considerations:<br>
<br>
1. The postscript apparently has not worked, or the change was lost by accident during Marcel's pragma refactoring.<br>
2. To me as an outsider, IPv6 does not yet look ready for productive use (at least on Windows). Are we able to get this working prior to the next release, or should we officially revert to the old networking for now?<br>
<br>
Thanks in advance!<br>
<br>
Best,<br>
Christoph<br>
<br>
<font color="#808080">---<br>
</font><i><font color="#808080">Sent from </font></i><i><u><a href="https://github.com/hpi-swa-lab/squeak-inbox-talk"><font color="#808080">Squeak Inbox Talk</font></a></u></i><br>
<br>
On 2020-04-23T17:36:12+02:00, leves@caesar.elte.hu wrote:<br>
<br>
> On Thu, 23 Apr 2020, Marcel Taeumel wrote:<br>
> <br>
> > Looking at "Socket newTCP", IPv6 is not even considered. One has to call "Socket newTCP: SocketAddressInformation addressFamilyINET6". Maybe out IPv6 preferences needs to be considered more often?<br>
> <br>
> Right, so #newTCP defines the family prematurely. In my opinion, it should <br>
> happen when the interface (which is actually an address not an interface) <br>
> is specified because the two address families can contradict, as the <br>
> example showed.<br>
> <br>
> Let's do it the "right" way:<br>
> <br>
> s := Socket newTCP: SocketAddressInformation addressFamilyINET6.<br>
> s listenOn: 60000 backlogSize: 8 interface: (NetNameResolver addressForName: '::1').<br>
> s "==> a Socket[destroyed]".<br>
> <br>
> Still destroyed. Why?<br>
> Perhaps because #listenOn:backlogSize:interface: tries to convert the <br>
> address with #asByteArray and (NetNameResolver addressForName: '::1') <br>
> asByteArray returns #[1] (what?).<br>
> So, let's remove that #asByteArray send hoping that the VM can handle the <br>
> new opaque addresses.<br>
> <br>
> s := Socket newTCP: SocketAddressInformation addressFamilyINET6.<br>
> s listenOn: 60000 backlogSize: 8 interface: (NetNameResolver <br>
> addressForName: '::1').<br>
> s "==> a Socket[destroyed]".<br>
> <br>
> Still destroyed, so that didn't help. Why?<br>
> Let's have a look at the plugin code (unix this time)[1]:<br>
> <br>
> void sqSocketListenOnPortBacklogSizeInterface(SocketPtr s, sqInt port, sqInt backlogSize, sqInt addr)<br>
> <br>
> Okay, addr must be a pointer to one of those opaque blobs.<br>
> <br>
> saddr.sin_port= htons((short)port);<br>
> <br>
> That short was meant to be unsigned short, right?<br>
> <br>
> saddr.sin_addr.s_addr= htonl(addr);<br>
> <br>
> The VM code expects addr to be a 4-byte unsigned integer (where's the <br>
> cast?) representing an IPv4 address in host byte order.<br>
> So, too bad, #listenOn:backlogSize:interface: <br>
> (primitiveSocketListenOnPortBacklogInterface) does not support IPv6. It <br>
> never did.<br>
> <br>
> <br>
> Levente<br>
> <br>
> [1] https://github.com/OpenSmalltalk/opensmalltalk-vm/blob/Cog/platforms/unix/plugins/SocketPlugin/sqUnixSocket.c#L708<br>
> <br>
> > Best,<br>
> > Marcel<br>
> ><br>
> > Am 23.04.2020 16:57:44 schrieb Levente Uzonyi <leves at caesar.elte.hu>:<br>
> ><br>
> > On Thu, 23 Apr 2020, Marcel Taeumel wrote:<br>
> ><br>
> > > Hi all!<br>
> > > I am on Windows 10. This is my output for the usual calls. Maybe it helps:<br>
> > ><br>
> > > SocketAddressInformation<br>
> > > forHost: 'localhost'<br>
> > > service: '12345'<br>
> > > flags: 0<br>
> > > addressFamily: 0<br>
> > > socketType: SocketAddressInformation socketTypeStream<br>
> > > protocol: SocketAddressInformation protocolTCP.<br>
> > ><br>
> > > " an OrderedCollection(::1(MOBILUS-TAB-NEW),12345(12345)-inet6-stream-tcp 127.0.0.1(MOBILUS-TAB-NEW),12345(12345)-inet4-stream-tcp)"<br>
> > ><br>
> > > NetNameResolver addressForName: 'localhost'.<br>
> > ><br>
> > > " ::1(MOBILUS-TAB-NEW),0(0)"<br>
> > ><br>
> > > ***<br>
> > ><br>
> > > Socket >> #connectTo: times out. Basically "WebClient httpGet: 'http://localhost:12345/test/auth'" does not work. ConnectionRefused.<br>
> ><br>
> > I suspect that the server only listens on the IPv4 address while, due to<br>
> > its undeterministic nature (it returns the first address no matter how<br>
> > many are there, and the order of the addresses is not defined),<br>
> > #addressForName: gives you the IPv6 address, so the client can't<br>
> > connect to the server.<br>
> ><br>
> > Another issue is that listening on IPv6 addresses is not possible (at<br>
> > least on my machine):<br>
> ><br>
> > IPv4 works:<br>
> ><br>
> > s := Socket newTCP.<br>
> > s listenOn: 60000 backlogSize: 8 interface: (NetNameResolver<br>
> > addressForName: '127.0.0.1').<br>
> > s "==> a Socket[waitingForConnection]"<br>
> ><br>
> > IPv6 does not work. It just fails silently:<br>
> ><br>
> > s := Socket newTCP.<br>
> > s listenOn: 60000 backlogSize: 8 interface: (NetNameResolver<br>
> > addressForName: '::1').<br>
> > s "==> a Socket[destroyed]"<br>
> > <br>
> ><br>
> > Levente<br>
> ><br>
> > ><br>
> > > Best,<br>
> > > Marcel<br>
> > ><br>
> > > Am 23.04.2020 09:42:00 schrieb John Pfersich via Squeak-dev :<br>
> > ><br>
> > > The network resolvers are definitely different in Linux and MacOS, the one in MacOS is less forgiving, or maybe its less robust.<br>
> > ><br>
> > > //For encrypted mail use jgpfersich at protonmail.com - Free account at ProtonMail.comWeb: https://objectnets.net and https://objectnets.org<br>
> > > https://datascilv.com https://datascilv.org<br>
> > ><br>
> > ><br>
> > > On Apr 22, 2020, at 18:36, David T. Lewis wrote:<br>
> > ><br>
> > > I have to suspect platform differences at this point. I think that you<br>
> > > are using OS X (is that right?) and I expect that the network resolver<br>
> > > may behave quite differently on different platforms, so we'll need to<br>
> > > collect a few more data points to see where the issues are.<br>
> > ><br>
> > ><br>
> > ><br>
> > <br>
> > <br>
> ><br>
> <br>