The Trunk: Network-fbs.140.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

The Trunk: Network-fbs.140.mcz

commits-2
Frank Shearar uploaded a new version of Network to project The Trunk:
http://source.squeak.org/trunk/Network-fbs.140.mcz

==================== Summary ====================

Name: Network-fbs.140
Author: fbs
Time: 1 March 2013, 10:39:25.076 am
UUID: 9f6d4989-84fc-4303-87ab-406d2296fd73
Ancestors: Network-fbs.139

If the user gives up on trying to resolve a name, fail the socket connect completely.

http://bugs.squeak.org/view.php?id=4025.

=============== Diff against Network-fbs.139 ===============

Item was changed:
  ----- Method: SocketStream class>>openConnectionToHostNamed:port: (in category 'instance creation') -----
  openConnectionToHostNamed: hostName port: portNumber
  | hostIP |
  hostIP := NetNameResolver addressForName: hostName timeout: 20.
+ hostIP ifNil: [NetworkError signal: ('Cannot resolve {1}.' format: {hostName})].
  ^self openConnectionToHost: hostIP port: portNumber!


Reply | Threaded
Open this post in threaded view
|

Re: The Trunk: Network-fbs.140.mcz

David T. Lewis
I am not sure how to reproduce the original problem (on Linux), but I'm
not sure if the proposed fix will work if the IPv6 networking is disabled
in preferences. The resolver behaves differently depending on whether the
new network primitives are being used, and may answer #[0 0 0 0] rather
than nil.

NetNameResolver useOldNetwork: true.
NetNameResolver addressForName: 'foo' timeout: 20 ==> #[0 0 0 0]

NetNameResolver useOldNetwork: false.
NetNameResolver addressForName: 'foo' timeout: 20 ==> nil

Dave

On Fri, Mar 01, 2013 at 10:39:44AM +0000, [hidden email] wrote:

> Frank Shearar uploaded a new version of Network to project The Trunk:
> http://source.squeak.org/trunk/Network-fbs.140.mcz
>
> ==================== Summary ====================
>
> Name: Network-fbs.140
> Author: fbs
> Time: 1 March 2013, 10:39:25.076 am
> UUID: 9f6d4989-84fc-4303-87ab-406d2296fd73
> Ancestors: Network-fbs.139
>
> If the user gives up on trying to resolve a name, fail the socket connect completely.
>
> http://bugs.squeak.org/view.php?id=4025.
>
> =============== Diff against Network-fbs.139 ===============
>
> Item was changed:
>   ----- Method: SocketStream class>>openConnectionToHostNamed:port: (in category 'instance creation') -----
>   openConnectionToHostNamed: hostName port: portNumber
>   | hostIP |
>   hostIP := NetNameResolver addressForName: hostName timeout: 20.
> + hostIP ifNil: [NetworkError signal: ('Cannot resolve {1}.' format: {hostName})].
>   ^self openConnectionToHost: hostIP port: portNumber!

Reply | Threaded
Open this post in threaded view
|

Re: The Trunk: Network-fbs.140.mcz

Frank Shearar-3
I reproduce it typically by not having a network connection!

OK, so the solution is more complicated: NetNameResolver >>
#addressForName:timeout: must have a way of signalling not only a name
lookup failure (which loops via the exception's defaultAction) but
also a name lookup failure where the user gives up. Given the return
values, how about

    result := NetNameResolver addressForName: 'foo' timeout: 20.
    (NetNameResolver useOldNetwork and: [result = #[0 0 0 0]])
        ifTrue: ["Signal failure"].
    (NetNameResolver useOldNetwork not and: [result isNil])
        ifTrue: ["Signal failure"].

?

frank

On 2 March 2013 16:02, David T. Lewis <[hidden email]> wrote:

> I am not sure how to reproduce the original problem (on Linux), but I'm
> not sure if the proposed fix will work if the IPv6 networking is disabled
> in preferences. The resolver behaves differently depending on whether the
> new network primitives are being used, and may answer #[0 0 0 0] rather
> than nil.
>
> NetNameResolver useOldNetwork: true.
> NetNameResolver addressForName: 'foo' timeout: 20 ==> #[0 0 0 0]
>
> NetNameResolver useOldNetwork: false.
> NetNameResolver addressForName: 'foo' timeout: 20 ==> nil
>
> Dave
>
> On Fri, Mar 01, 2013 at 10:39:44AM +0000, [hidden email] wrote:
>> Frank Shearar uploaded a new version of Network to project The Trunk:
>> http://source.squeak.org/trunk/Network-fbs.140.mcz
>>
>> ==================== Summary ====================
>>
>> Name: Network-fbs.140
>> Author: fbs
>> Time: 1 March 2013, 10:39:25.076 am
>> UUID: 9f6d4989-84fc-4303-87ab-406d2296fd73
>> Ancestors: Network-fbs.139
>>
>> If the user gives up on trying to resolve a name, fail the socket connect completely.
>>
>> http://bugs.squeak.org/view.php?id=4025.
>>
>> =============== Diff against Network-fbs.139 ===============
>>
>> Item was changed:
>>   ----- Method: SocketStream class>>openConnectionToHostNamed:port: (in category 'instance creation') -----
>>   openConnectionToHostNamed: hostName port: portNumber
>>       | hostIP |
>>       hostIP := NetNameResolver addressForName: hostName timeout: 20.
>> +     hostIP ifNil: [NetworkError signal: ('Cannot resolve {1}.' format: {hostName})].
>>       ^self openConnectionToHost: hostIP port: portNumber!
>

Reply | Threaded
Open this post in threaded view
|

Re: The Trunk: Network-fbs.140.mcz

David T. Lewis
On Sat, Mar 02, 2013 at 06:40:10PM +0000, Frank Shearar wrote:

> I reproduce it typically by not having a network connection!
>
> OK, so the solution is more complicated: NetNameResolver >>
> #addressForName:timeout: must have a way of signalling not only a name
> lookup failure (which loops via the exception's defaultAction) but
> also a name lookup failure where the user gives up. Given the return
> values, how about
>
>     result := NetNameResolver addressForName: 'foo' timeout: 20.
>     (NetNameResolver useOldNetwork and: [result = #[0 0 0 0]])
>         ifTrue: ["Signal failure"].
>     (NetNameResolver useOldNetwork not and: [result isNil])
>         ifTrue: ["Signal failure"].
>
> ?
>
> frank
>

I would think that just a check for nil or #[0 0 0 0] would be sufficient,
regardless of the useOldNetwork setting.

  (hostIP isNil or: [hostIP = #[0 0 0 0]])
    ifTrue: ["Signal failure"].

I am also not sure if different platforms handle this the same way (I would
want to at least check Windows, though I can't do that right now). But my
guess is that checking for nil or #[0 0 0 0] is likely to do the right thing
an any case, regardless of platform differences (if any).

Dave

> On 2 March 2013 16:02, David T. Lewis <[hidden email]> wrote:
> > I am not sure how to reproduce the original problem (on Linux), but I'm
> > not sure if the proposed fix will work if the IPv6 networking is disabled
> > in preferences. The resolver behaves differently depending on whether the
> > new network primitives are being used, and may answer #[0 0 0 0] rather
> > than nil.
> >
> > NetNameResolver useOldNetwork: true.
> > NetNameResolver addressForName: 'foo' timeout: 20 ==> #[0 0 0 0]
> >
> > NetNameResolver useOldNetwork: false.
> > NetNameResolver addressForName: 'foo' timeout: 20 ==> nil
> >
> > Dave
> >
> > On Fri, Mar 01, 2013 at 10:39:44AM +0000, [hidden email] wrote:
> >> Frank Shearar uploaded a new version of Network to project The Trunk:
> >> http://source.squeak.org/trunk/Network-fbs.140.mcz
> >>
> >> ==================== Summary ====================
> >>
> >> Name: Network-fbs.140
> >> Author: fbs
> >> Time: 1 March 2013, 10:39:25.076 am
> >> UUID: 9f6d4989-84fc-4303-87ab-406d2296fd73
> >> Ancestors: Network-fbs.139
> >>
> >> If the user gives up on trying to resolve a name, fail the socket connect completely.
> >>
> >> http://bugs.squeak.org/view.php?id=4025.
> >>
> >> =============== Diff against Network-fbs.139 ===============
> >>
> >> Item was changed:
> >>   ----- Method: SocketStream class>>openConnectionToHostNamed:port: (in category 'instance creation') -----
> >>   openConnectionToHostNamed: hostName port: portNumber
> >>       | hostIP |
> >>       hostIP := NetNameResolver addressForName: hostName timeout: 20.
> >> +     hostIP ifNil: [NetworkError signal: ('Cannot resolve {1}.' format: {hostName})].
> >>       ^self openConnectionToHost: hostIP port: portNumber!
> >