On 21 Apr 2011, at 15:09, Stéphane Ducasse wrote:
> Yes!!!!
> I forwarded that mail to the network chapter authors.
> and we will really ask for feedback
This is actually a better variant (it does away with the wait by using the
semaphore twice):
| serverSocket dataSent dataRead clientStream semaphore |
semaphore := Semaphore new.
serverSocket := Socket newTCP listenOn: 9191 backlogSize: 5.
[ [ | clientSocket serverStream |
semaphore signal.
clientSocket := serverSocket waitForAcceptFor: 10.
serverStream := SocketStream on: clientSocket.
dataRead := serverStream upToEnd.
serverStream close.
semaphore signal ] ensure: [ serverSocket close ] ] forkAt: Processor
userBackgroundPriority.
semaphore wait.
dataSent := 'Hello there!'.
clientStream := SocketStream openConnectionToHostNamed: 'localhost'
port: 9191.
clientStream nextPutAll: dataSent.
clientStream close.
semaphore wait.
self assert: dataSent = dataRead.
dataRead
| serverSocket clientSocket dataSent dataRead semaphore |
semaphore := Semaphore new.
serverSocket := Socket newTCP listenOn: 9191 backlogSize: 5.
[ [ | clientConnectionSocket |
semaphore signal.
clientConnectionSocket := serverSocket waitForAcceptFor: 10.
dataRead := clientConnectionSocket receiveData.
clientConnectionSocket close.
semaphore signal ] ensure: [ serverSocket close ] ] forkAt: Processor
userBackgroundPriority.
semaphore wait.
dataSent := 'Hello there!'.
clientSocket := Socket newTCP connectToHostNamed: 'localhost' port:
9191.
clientSocket sendData: dataSent.
clientSocket close.
semaphore wait.
self assert: dataSent = dataRead.
dataRead