'From Pharo2.0 of 7 March 2013 [Latest update: #20618] on 4 August 2013 at 4:35:21 pm'! !Socket methodsFor: 'connection open/close' stamp: 'PierceNg 8/3/2013 15:50'! connectTo: socketAddress | status | status := self primSocketConnectionStatus: socketHandle. (status = Unconnected) ifFalse: [ InvalidSocketStatusException signal: 'Socket status must be Unconnected before opening a new connection.' ]. self primSocket: socketHandle connectTo: socketAddress! ! !Socket methodsFor: 'initialize-destroy' stamp: 'PierceNg 8/3/2013 15:46'! initialize: socketType self initialize: socketType withDomain: 0! ! !Socket methodsFor: 'initialize-destroy' stamp: 'PierceNg 8/3/2013 15:45'! initialize: socketType withDomain: socketDomain "Initialize a new socket handle. If socket creation fails, socketHandle will be set to nil." | semaIndex readSemaIndex writeSemaIndex | semaphore := Semaphore new. readSemaphore := Semaphore new. writeSemaphore := Semaphore new. semaIndex := Smalltalk registerExternalObject: semaphore. readSemaIndex := Smalltalk registerExternalObject: readSemaphore. writeSemaIndex := Smalltalk registerExternalObject: writeSemaphore. socketHandle := self primSocketCreateNetwork: socketDomain type: socketType receiveBufferSize: 8000 sendBufSize: 8000 semaIndex: semaIndex readSemaIndex: readSemaIndex writeSemaIndex: writeSemaIndex. socketHandle isNil ifTrue: [ "socket creation failed" Smalltalk unregisterExternalObject: semaphore. Smalltalk unregisterExternalObject: readSemaphore. Smalltalk unregisterExternalObject: writeSemaphore. readSemaphore := writeSemaphore := semaphore := nil ] ifFalse: [ self register ]! ! !NetNameResolver class methodsFor: 'lookups' stamp: 'PierceNg 8/3/2013 16:33'! addressForSocketPath: aSocketPathString | size sa | self initializeNetwork. NetNameResolver primGetAddressInfoHost: '' service: aSocketPathString flags: 0 family: 1 type: 0 protocol: 0. size := NetNameResolver primGetAddressInfoSize. sa := SocketAddress new: size withAll: 0. NetNameResolver primGetAddressInfoResult: sa. ^ sa! ! !Socket class methodsFor: 'instance creation' stamp: 'PierceNg 8/3/2013 15:56'! newIPC "Create a socket and initialise it for IPC aka Unix domain." self initializeNetwork. ^[ super new initialize: TCPSocketType withDomain: 1 ] repeatWithGCIf: [ :socket | socket isValid not ]! !