On macOS High Sierra 10.13.6 in 32-bit and 64-bit:
If NetNameResolver useOldNetwork == false then only 1 SocketTest test passes, 2 fail and 11 raise errors. The plugin reports connect errors, one for each error:
sqConnectToAddressSize: Address family not supported by protocol family sqConnectToAddressSize: Address family not supported by protocol family sqConnectToAddressSize: Address family not supported by protocol family sqConnectToAddressSize: Address family not supported by protocol family sqConnectToAddressSize: Address family not supported by protocol family sqConnectToAddressSize: Address family not supported by protocol family sqConnectToAddressSize: Address family not supported by protocol family sqConnectToAddressSize: Address family not supported by protocol family sqConnectToAddressSize: Address family not supported by protocol family sqConnectToAddressSize: Address family not supported by protocol family sqConnectToAddressSize: Address family not supported by protocol family
If NetNameResolver useOldNetwork == true then only one test passes and there are 13 failures. Many (all?) fail with waitForConnectionFor:ifTimedOut:ifRefused: timing out.
When using new network, the tests use an IPv6-based localhost address for binding and connecting.
The local socket is opened in `setUp`: ```Smalltalk setUp
listenerSocket := Socket newTCP listenOn: self listenerPort backlogSize: 4 interface: self listenerAddress. ```
The `listenerAddress` is derived as follows: ```Smalltalk ^ NetNameResolver addressForName: 'localhost' ``` In `oldNetwork`, that's an IPv4, in `!oldNetwork` that's an IPv6. _this is good_
However, the _Socket_ is created as `newTCP`, that is, _explicitely IPv4_: ```Smalltalk newTCP "Create a socket and initialise it for TCP" ^self newTCP: SocketAddressInformation addressFamilyINET4 ``` This is bad. This is where the Error message comes from.
This should be changed to use the address familty that fits best to the current old/new-network.
On top of that, `#listenOn:backlogSize: interface:` *solely* deals with IPv4 adresses.
The correct way is to use the indirection of `SocketAddressInformation` in `#listenWithBacklog:`. This deals correctly with the address family.
Things to do: - [ ] fix the test setup to use the SAI info and/or discriminate old/new network - [ ] maybe Bail in the socket plugin earlier when a new-network socket is used in old-network-ipv4-only code.
Closed #428.
wait, this is fixed?
Oops. I was over optimistic. I assumed that Levente'se poll change applied to Mac. It doesn't. Mac needs kqueue. I'm reopening.
Reopened #428.
marvelous :D
vm-dev@lists.squeakfoundation.org