[squeak-dev] The Trunk: Network-eem.242.mcz

commits at source.squeak.org commits at source.squeak.org
Fri Sep 25 20:16:45 UTC 2020


Eliot Miranda uploaded a new version of Network to project The Trunk:
http://source.squeak.org/trunk/Network-eem.242.mcz

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

Name: Network-eem.242
Author: eem
Time: 25 September 2020, 1:16:43.056168 pm
UUID: 555fce79-4be7-49f4-a0d6-b976a406942e
Ancestors: Network-eem.241

Sockets:
Add an inst var to Socket to remember the address family (INET4 vs INET6) for a new-style socket.
Add family-specific lookup facilities to NetNameResolver.

=============== Diff against Network-eem.241 ===============

Item was added:
+ ----- Method: NetNameResolver class>>addressForName:family: (in category 'lookups') -----
+ addressForName: hostName family: addressFamily
+ 	"NetNameResolver addressForName: 'squeak.org' family: SocketAddressInformation addressFamilyINET4"
+ 	"NetNameResolver addressForName: 'localhost' family: SocketAddressInformation addressFamilyINET6"
+ 	"NetNameResolver addressForName: '127.0.0.1' family: SocketAddressInformation addressFamilyINET6"
+ 	| addresses |
+ 	self useOldNetwork ifTrue:
+ 		[^self oldAddressForName: hostName].
+ 	addresses := self addressesForName: hostName family: addressFamily.
+ 	^addresses
+ 		ifEmpty: [nil]
+ 		ifNotEmpty: [addresses first socketAddress]!

Item was changed:
  ----- Method: NetNameResolver class>>addressesForName: (in category 'lookup') -----
  addressesForName: hostName
  	"NetNameResolver addressesForName: 'impara.de' "
  	
+ 	^SocketAddressInformation
- 	| addresses |
- 	addresses := SocketAddressInformation
  		forHost: hostName
  		service: ''
  		flags: 0
  		addressFamily: 0
  		socketType: SocketAddressInformation socketTypeStream
+ 		protocol: SocketAddressInformation protocolTCP!
- 		protocol: SocketAddressInformation protocolTCP.
- 	^addresses!

Item was added:
+ ----- Method: NetNameResolver class>>addressesForName:family: (in category 'lookup') -----
+ addressesForName: hostName family: addressFamily
+ 	"NetNameResolver
+ 		addressesForName: 'squeak.org'
+ 		family: SocketAddressInformation addressFamilyINET4"
+ 	"NetNameResolver
+ 		addressesForName: 'impara.de'
+ 		family: SocketAddressInformation addressFamilyINET6"
+ 	
+ 	^SocketAddressInformation
+ 		forHost: hostName
+ 		service: ''
+ 		flags: 0
+ 		addressFamily: addressFamily
+ 		socketType: SocketAddressInformation socketTypeStream
+ 		protocol: SocketAddressInformation protocolTCP!

Item was changed:
  Object subclass: #Socket
+ 	instanceVariableNames: 'semaphore socketHandle readSemaphore writeSemaphore family'
- 	instanceVariableNames: 'semaphore socketHandle readSemaphore writeSemaphore'
  	classVariableNames: 'Connected DeadServer DefaultReceiveBufferSize DefaultSendBufferSize InvalidSocket MaximumReadSemaphoreWaitTimeout OtherEndClosed Registry TCPSocketType ThisEndClosed UDPSocketType Unconnected WaitingForConnection'
  	poolDictionaries: ''
  	category: 'Network-Kernel'!
  
  !Socket commentStamp: 'gk 12/13/2005 00:43' prior: 0!
  A Socket represents a network connection point. Current sockets are designed to support the TCP/IP and UDP protocols. Sockets are the lowest level of networking object in Squeak and are not normally used directly. SocketStream is a higher level object wrapping a Socket in a stream like protocol.
  
  ProtocolClient and subclasses are in turn wrappers around a SocketStream to provide support for specific network protocols such as POP, NNTP, HTTP, and FTP.!

Item was added:
+ ----- Method: Socket>>addressFamily (in category 'accessing') -----
+ addressFamily
+ 	^family!

Item was changed:
  ----- Method: Socket>>initialize:family: (in category 'initialize-destroy') -----
+ initialize: socketType family: addressFamily
- initialize: socketType family: family
  	"Initialize a new socket handle. If socket creation fails, socketHandle will be set to nil."
  
+ 	family := addressFamily.
  	NetNameResolver useOldNetwork ifTrue: [ ^self initialize: socketType ].
  	self initializeSocketHandleUsing: [ :semaIndex :readSemaIndex :writeSemaIndex |
  		self primSocketCreateNetwork: family
  			type: socketType
  			receiveBufferSize: DefaultReceiveBufferSize
  			sendBufSize: DefaultSendBufferSize
  			semaIndex: semaIndex
  			readSemaIndex: readSemaIndex
  			writeSemaIndex: writeSemaIndex ]!

Item was changed:
  ----- Method: Socket>>waitForDataIfClosed: (in category 'waiting') -----
  waitForDataIfClosed: closedBlock
  	"Wait indefinitely for data to arrive.  This method will block until
  	data is available or the socket is closed."
  
+ 	[socketHandle ifNil: [^closedBlock value ].
+ 	(self primSocketReceiveDataAvailable: socketHandle) ifTrue: [ ^self ].
+ 	 self isConnected ifFalse: [ ^closedBlock value ].
+ 	 "ul 8/13/2014 21:16
+ 	  Providing a maximum for the time for waiting is a workaround for a VM bug which
+ 	  causes sockets waiting for data forever in some rare cases, because the semaphore
+ 	  doesn't get signaled. Replace the ""waitTimeoutMSecs: self class maximumReadSemaphoreWaitTimeout""
+ 	  part with ""wait"" when the bug is fixed."
+ 	 readSemaphore waitTimeoutMSecs: self class maximumReadSemaphoreWaitTimeout ] repeat!
- 	socketHandle ifNil: [ ^closedBlock value ].
- 	[
- 		(self primSocketReceiveDataAvailable: socketHandle) ifTrue: [ ^self ].
- 		 self isConnected ifFalse: [ ^closedBlock value ].
- 		 "ul 8/13/2014 21:16
- 		  Providing a maximum for the time for waiting is a workaround for a VM bug which
- 		  causes sockets waiting for data forever in some rare cases, because the semaphore
- 		  doesn't get signaled. Replace the ""waitTimeoutMSecs: self class maximumReadSemaphoreWaitTimeout""
- 		  part with ""wait"" when the bug is fixed."
- 		 readSemaphore waitTimeoutMSecs: self class maximumReadSemaphoreWaitTimeout ] repeat!



More information about the Squeak-dev mailing list