[squeak-dev] The Trunk: Network-nice.246.mcz
commits at source.squeak.org
commits at source.squeak.org
Mon Apr 12 15:35:11 UTC 2021
Nicolas Cellier uploaded a new version of Network to project The Trunk:
http://source.squeak.org/trunk/Network-nice.246.mcz
==================== Summary ====================
Name: Network-nice.246
Author: nice
Time: 12 April 2021, 5:35:00.782058 pm
UUID: 09001f79-2f03-bb46-be00-2b54f5b89d36
Ancestors: Network-mt.245
Redo the fix from Network-ct.242 with a slighlty different implementation:
1) use exception retry
2) avoid using in: aBlock where a temporary would do the job.
Thanks to Christophe for original report and fix!
(https://source.squeak.org/treated/Network-ct.242.diff)
Original commit message below:
Fixes two MNUs that can occur during connecting to an unavailable network resource.
Bug #1 (stream>>>#timeout:)
Steps to reproduce:
1. Start your image while an internet connection is available. Make any connection attempt (e.g. refresh a Monticello HTTP(s) repository) to ensure that the network is initialized (NetNameResolver initializeNetwork).
2. There are two alternative scenarios:
2.(i) Do it:
WebClient httpGet: 'https://foo.bar'.
2.(ii) Turn off your internet connection (e.g. disable your WLAN adapter). Then make another connection attempt.
In both scenarios, you will see the following error:
MessageNotUnderstood: UndefinedObject>>timeout: (stream)
WebClient>>connect
WebClient>>sendRequest:contentBlock:
...
This bug occurred because there was no check for the presence of any network socket for the request host/port.
Bug #2 (#findNextHandlerContextStarting):
Steps to reproduce:
Do it:
WebClient httpGet: 'https://'.
Error:
MessageNotUnderstood: UndefinedObject>>findNextHandlerContextStarting
Context>>nextHandlerContext
ConnectionRefused(Exception)>>pass
...
=============== Diff against Network-mt.245 ===============
Item was changed:
----- Method: SocketStream class>>openConnectionToHostNamed:port: (in category 'instance creation') -----
openConnectionToHostNamed: hostName port: portNumber
+ | addressInformations stream |
NetNameResolver useOldNetwork
ifTrue: [ | hostIP |
hostIP := NetNameResolver addressForName: hostName timeout: 20.
hostIP ifNil: [NetworkError signal: ('Cannot resolve {1}.' format: {hostName})].
+ ^self openConnectionToHost: hostIP port: portNumber].
+ addressInformations := SocketAddressInformation
+ forHost: hostName
+ service: portNumber asString
+ flags: 0
+ addressFamily: 0
+ socketType: SocketAddressInformation socketTypeStream
+ protocol: SocketAddressInformation protocolTCP.
+ addressInformations ifEmpty: [
+ NoNetworkError signal: ('Could not find a network for {1} on port {2}' translated format: {hostName. portNumber})].
+ stream := addressInformations readStream.
+ ^ [self on: stream next connect] on: NetworkError
+ do: [:exc | stream atEnd
+ ifTrue:
+ ["No more address to retry, pass the exception to upper level"
+ exc pass]
+ ifFalse:
+ ["retry with next address"
+ exc retry]].!
- ^self openConnectionToHost: hostIP port: portNumber]
- ifFalse: [| addressInformations lastError |
- addressInformations := SocketAddressInformation
- forHost: hostName
- service: portNumber asString
- flags: 0
- addressFamily: 0
- socketType: SocketAddressInformation socketTypeStream
- protocol: SocketAddressInformation protocolTCP.
- addressInformations do: [:addressInformation |
- [^ self on: addressInformation connect] on: NetworkError do: [:e | lastError := e]].
- ^ lastError ifNotNil: [:e | e pass]]!
More information about the Squeak-dev
mailing list
|