Socket.st
changeset 5001 11cbbbcbc87e
parent 4961 a1c49a18e83d
child 5196 f2b4c109c24f
--- a/Socket.st	Fri Jun 07 01:11:34 2019 +0200
+++ b/Socket.st	Fri Jun 07 01:45:51 2019 +0200
@@ -71,7 +71,7 @@
 #endif /* ! __win32__ */
 
 #define SOCKET_FROM_FILE(f)             (SOCKET_FROM_FD(fileno(f)))
-#define SOCKET_FROM_FILE_OBJECT(f)      (__INST(handleType) == @symbol(socketHandle) ? SOCKET_FROM_FD(__FILEVal(f)) : SOCKET_FROM_FILE(__FILEVal(f)))
+#define SOCKET_FROM_FILE_OBJECT(f)      (__INST(handleType) == @symbol(socketHandle) ? SOCKET_FROM_FD((INT)(__FILEVal(f))) : SOCKET_FROM_FILE(__FILEVal(f)))
 
 #ifndef __MINGW__
 # include <stdio.h>
@@ -259,457 +259,457 @@
 examples
 "
     example (get help info from an nntp server):
-                                                                        [exBegin]
-        |sock|
-
-        sock := Socket newTCPclientToHost:'smtp.exept.de' port:'smtp'.
-        sock isNil ifTrue:[
-            self warn:'no smtp daemon is running'.
-            ^ self
-        ].
-        Transcript showCR:sock nextLine.
-
-        sock nextPutAll:'HELO STX socket test'; cr.
-        Transcript showCR:sock nextLine.
-        sock close
-                                                                        [exEnd]
+									[exBegin]
+	|sock|
+
+	sock := Socket newTCPclientToHost:'smtp.exept.de' port:'smtp'.
+	sock isNil ifTrue:[
+	    self warn:'no smtp daemon is running'.
+	    ^ self
+	].
+	Transcript showCR:sock nextLine.
+
+	sock nextPutAll:'HELO STX socket test'; cr.
+	Transcript showCR:sock nextLine.
+	sock close
+									[exEnd]
 
 
     example (connect to finger daemon, get users entry):
-                                                                        [exBegin]
-        |sock entry|
-
-        sock := Socket newTCPclientToHost:'localhost' port:'finger'.
-        sock isNil ifTrue:[
-            self warn:'no finger daemon is running'.
-            ^ self
-        ].
-        sock useCRLF:true.
-        sock buffered:false.
-        sock isNil ifTrue:[
-            Transcript showCR:'cannot connect to local finger daemon'
-        ] ifFalse:[
-            sock nextPutAll:(OperatingSystem getLoginName).
-            sock cr.
-
-            entry := sock nextLine.
-            Transcript showCR:entry.
-
-            sock close
-        ]
-                                                                        [exEnd]
+									[exBegin]
+	|sock entry|
+
+	sock := Socket newTCPclientToHost:'localhost' port:'finger'.
+	sock isNil ifTrue:[
+	    self warn:'no finger daemon is running'.
+	    ^ self
+	].
+	sock useCRLF:true.
+	sock buffered:false.
+	sock isNil ifTrue:[
+	    Transcript showCR:'cannot connect to local finger daemon'
+	] ifFalse:[
+	    sock nextPutAll:(OperatingSystem getLoginName).
+	    sock cr.
+
+	    entry := sock nextLine.
+	    Transcript showCR:entry.
+
+	    sock close
+	]
+									[exEnd]
 
     example (connect to an ftp server):
-                                                                        [exBegin]
-        |sock|
-
-        sock := Socket newTCPclientToHost:'www.exept.de' port:'ftp'.
-
-        sock buffered:false.
-        Transcript showCR:sock nextLine.
-        sock nextPutAll:('USER ' , 'anonymous'); cr.
-        Transcript showCR:sock nextLine.
-        sock nextPutAll:('PASS ' , 'fooBar'); cr.
-        Transcript showCR:sock nextLine.
-        sock nextPutAll:'HELP'; cr.
-        [
-            |line|
-            line := sock nextLine.
-            Transcript showCR:line.
-            (line at:4) = $-
-        ] whileTrue.
-        sock close.
-
-        'don't know enough of the ftp protocol to continue here ...'
-                                                                        [exEnd]
+									[exBegin]
+	|sock|
+
+	sock := Socket newTCPclientToHost:'www.exept.de' port:'ftp'.
+
+	sock buffered:false.
+	Transcript showCR:sock nextLine.
+	sock nextPutAll:('USER ' , 'anonymous'); cr.
+	Transcript showCR:sock nextLine.
+	sock nextPutAll:('PASS ' , 'fooBar'); cr.
+	Transcript showCR:sock nextLine.
+	sock nextPutAll:'HELP'; cr.
+	[
+	    |line|
+	    line := sock nextLine.
+	    Transcript showCR:line.
+	    (line at:4) = $-
+	] whileTrue.
+	sock close.
+
+	'don't know enough of the ftp protocol to continue here ...'
+									[exEnd]
 
 
     example (connect to an snmp server [UDP]):
     Note: this is not a real connection, only the destination address is
-          being fixed.
-                                                                        [exBegin]
-        |sock port|
-
-        sock := Socket newUDP.
-        port := Socket portOfService:'snmp'.
-        sock connectTo:'224.1.2.3' port:port.
-        sock buffered:false.
-        Transcript showCR:'got it'.
-        sock close.
-                                                                        [exEnd]
+	  being fixed.
+									[exBegin]
+	|sock port|
+
+	sock := Socket newUDP.
+	port := Socket portOfService:'snmp'.
+	sock connectTo:'224.1.2.3' port:port.
+	sock buffered:false.
+	Transcript showCR:'got it'.
+	sock close.
+									[exEnd]
 
 
     example (await connection from a client and read some data):
-                                                                        [exBegin]
-        |connectSock sock|
-
-        connectSock := Socket newTCPserverAtPort:9998.
-        connectSock isNil ifTrue:[
-            Transcript showCR:'socket setup failed.'.
-        ] ifFalse:[
-            Transcript showCR:'listen ..'.
-            (connectSock listenFor:5) ifFalse:[
-                Transcript showCR:'listen failed.'.
-            ] ifTrue:[
-                Transcript showCR:'wait'.
-                connectSock readWait.
-                Transcript showCR:'accept'.
-                sock := connectSock accept.
-                sock isNil ifTrue:[
-                    Transcript showCR:'accept failed.'.
-                ] ifFalse:[
-                    sock buffered:false.
-                    Transcript showCR:'server: got it'.
-                    'can now do transfer via sock'.
-                    Transcript showCR:'read'.
-                    Transcript showCR:('got: ' , sock nextLine).
-
-                    Transcript showCR:'close'.
-                    sock close
-                ].
-                connectSock close.
-            ]
-        ]
-                                                                        [exEnd]
+									[exBegin]
+	|connectSock sock|
+
+	connectSock := Socket newTCPserverAtPort:9998.
+	connectSock isNil ifTrue:[
+	    Transcript showCR:'socket setup failed.'.
+	] ifFalse:[
+	    Transcript showCR:'listen ..'.
+	    (connectSock listenFor:5) ifFalse:[
+		Transcript showCR:'listen failed.'.
+	    ] ifTrue:[
+		Transcript showCR:'wait'.
+		connectSock readWait.
+		Transcript showCR:'accept'.
+		sock := connectSock accept.
+		sock isNil ifTrue:[
+		    Transcript showCR:'accept failed.'.
+		] ifFalse:[
+		    sock buffered:false.
+		    Transcript showCR:'server: got it'.
+		    'can now do transfer via sock'.
+		    Transcript showCR:'read'.
+		    Transcript showCR:('got: ' , sock nextLine).
+
+		    Transcript showCR:'close'.
+		    sock close
+		].
+		connectSock close.
+	    ]
+	]
+									[exEnd]
 
 
     example (connect to above server and send some data):
-                                                                        [exBegin]
-        |sock|
-
-        sock := Socket newTCPclientToHost:'localhost' port:9998.
-        sock isNil ifTrue:[
-            Transcript showCR:'nope'
-        ] ifFalse:[
-            sock buffered:false.
-            Transcript showCR:'client: got it'.
-            'can now do transfer via sock'.
-            Transcript showCR:'sending <hello>'.
-            sock nextPutLine:'hello'.
-            sock close
-        ]
-                                                                        [exEnd]
+									[exBegin]
+	|sock|
+
+	sock := Socket newTCPclientToHost:'localhost' port:9998.
+	sock isNil ifTrue:[
+	    Transcript showCR:'nope'
+	] ifFalse:[
+	    sock buffered:false.
+	    Transcript showCR:'client: got it'.
+	    'can now do transfer via sock'.
+	    Transcript showCR:'sending <hello>'.
+	    sock nextPutLine:'hello'.
+	    sock close
+	]
+									[exEnd]
 
     example: UNIX domain socket (await connection from a client and read some data):
 
-        |connectSock sock|
-
-        '/tmp/ud_socket' asFilename remove.
-        connectSock := Socket newUNIXserverAt:'/tmp/ud_socket'.
-        connectSock isNil ifTrue:[
-            Transcript showCR:'socket setup failed.'.
-        ] ifFalse:[
-            Transcript showCR:'listen ..'.
-            (connectSock listenFor:5) ifFalse:[
-                Transcript showCR:'listen failed.'.
-            ] ifTrue:[
-                Transcript showCR:'wait'.
-                connectSock buffered:false.
-                connectSock readWait.
-                Transcript showCR:'accept'.
-                sock := connectSock accept.
-                sock isNil ifTrue:[
-                    Transcript showCR:'accept failed.'.
-                ] ifFalse:[
-                    sock buffered:false.
-                    Transcript showCR:'server: got it'.
-                    'can now do transfer via sock'.
-                    Transcript showCR:'read'.
-                    Transcript showCR:('got: ' , sock nextLine).
-
-                    Transcript showCR:'close'.
-                    sock close
-                ].
-                connectSock close.
-            ]
-        ]
+	|connectSock sock|
+
+	'/tmp/ud_socket' asFilename remove.
+	connectSock := Socket newUNIXserverAt:'/tmp/ud_socket'.
+	connectSock isNil ifTrue:[
+	    Transcript showCR:'socket setup failed.'.
+	] ifFalse:[
+	    Transcript showCR:'listen ..'.
+	    (connectSock listenFor:5) ifFalse:[
+		Transcript showCR:'listen failed.'.
+	    ] ifTrue:[
+		Transcript showCR:'wait'.
+		connectSock buffered:false.
+		connectSock readWait.
+		Transcript showCR:'accept'.
+		sock := connectSock accept.
+		sock isNil ifTrue:[
+		    Transcript showCR:'accept failed.'.
+		] ifFalse:[
+		    sock buffered:false.
+		    Transcript showCR:'server: got it'.
+		    'can now do transfer via sock'.
+		    Transcript showCR:'read'.
+		    Transcript showCR:('got: ' , sock nextLine).
+
+		    Transcript showCR:'close'.
+		    sock close
+		].
+		connectSock close.
+	    ]
+	]
 
 
     example (connect to above server and send some data;
-             Notice, this fails, if above server code is executed in the same ST/X image
-                     (at least on LINUX), since the OS does not correctly handle
-                     a connect from within an interrupted accept system call
-                     On SGI's SVR4, this works ok
-                                                                        [exBegin]
-        |sock|
-
-        sock := Socket newUNIXclientTo:'/tmp/ud_socket'.
-        sock isNil ifTrue:[
-            Transcript showCR:'nope'
-        ] ifFalse:[
-            sock buffered:false.
-            Transcript showCR:'client: got it'.
-            'can now do transfer via sock'.
-            Transcript showCR:'sending <hello>'.
-            sock nextPutLine:'hello'.
-            sock close
-        ]
-                                                                        [exEnd]
+	     Notice, this fails, if above server code is executed in the same ST/X image
+		     (at least on LINUX), since the OS does not correctly handle
+		     a connect from within an interrupted accept system call
+		     On SGI's SVR4, this works ok
+									[exBegin]
+	|sock|
+
+	sock := Socket newUNIXclientTo:'/tmp/ud_socket'.
+	sock isNil ifTrue:[
+	    Transcript showCR:'nope'
+	] ifFalse:[
+	    sock buffered:false.
+	    Transcript showCR:'client: got it'.
+	    'can now do transfer via sock'.
+	    Transcript showCR:'sending <hello>'.
+	    sock nextPutLine:'hello'.
+	    sock close
+	]
+									[exEnd]
 
 
     example (UDP await packet from a client and read some data):
-                                                                        [exBegin]
-        |udpSock sock addr n dataBuffer|
-
-        udpSock := Socket newUDPserverAtPort:9999.
-        udpSock isNil ifTrue:[
-            Transcript showCR:'socket setup failed.'.
-        ] ifFalse:[
-            Transcript showCR:'wait'.
-            udpSock readWait.
-
-            addr := IPSocketAddress new.
-            dataBuffer := ByteArray new:1000.
-            n := udpSock receiveFrom:addr buffer:dataBuffer start:1 for:dataBuffer size.
-            n > 0 ifTrue:[
-                Transcript showCR:('got: ' , n printString , 'bytes  from ' , addr printString).
-                Transcript showCR:('data: ' , (dataBuffer copyTo:n) printString).
-            ] ifFalse:[
-                Transcript showCR:'read failed'.
-            ].
-
-            Transcript showCR:'close'.
-            udpSock close
-        ]
-                                                                        [exEnd]
+									[exBegin]
+	|udpSock sock addr n dataBuffer|
+
+	udpSock := Socket newUDPserverAtPort:9999.
+	udpSock isNil ifTrue:[
+	    Transcript showCR:'socket setup failed.'.
+	] ifFalse:[
+	    Transcript showCR:'wait'.
+	    udpSock readWait.
+
+	    addr := IPSocketAddress new.
+	    dataBuffer := ByteArray new:1000.
+	    n := udpSock receiveFrom:addr buffer:dataBuffer start:1 for:dataBuffer size.
+	    n > 0 ifTrue:[
+		Transcript showCR:('got: ' , n printString , 'bytes  from ' , addr printString).
+		Transcript showCR:('data: ' , (dataBuffer copyTo:n) printString).
+	    ] ifFalse:[
+		Transcript showCR:'read failed'.
+	    ].
+
+	    Transcript showCR:'close'.
+	    udpSock close
+	]
+									[exEnd]
 
     example (connect to above UDP server and send some data;
-                                                                        [exBegin]
-        |sock|
-
-        sock := Socket newUDP.
-        sock isNil ifTrue:[
-            Transcript showCR:'nope'
-        ] ifFalse:[
-            sock 
-                sendTo:(IPSocketAddress hostName:'127.0.0.1' port:9999) buffer:'hello world'.
-            sock close
-        ]
-                                                                        [exEnd]
+									[exBegin]
+	|sock|
+
+	sock := Socket newUDP.
+	sock isNil ifTrue:[
+	    Transcript showCR:'nope'
+	] ifFalse:[
+	    sock
+		sendTo:(IPSocketAddress hostName:'127.0.0.1' port:9999) buffer:'hello world'.
+	    sock close
+	]
+									[exEnd]
 
 
     example (UDP await packet from a client and read some multicast data):
-                                                                        [exBegin]
-        |udpSock sock addr n dataBuffer|
-
-        udpSock := Socket newUDPserverAtPort:9999.
-        udpSock isNil ifTrue:[
-            Transcript showCR:'socket setup failed.'.
-        ] ifFalse:[
-            udpSock setSocketOption:#'IP_ADD_MEMBERSHIP' argument:#[224 1 2 3] argument:#[0 0 0 0].
-            Transcript showCR:'wait'.
-            udpSock readWait.
-
-            addr := IPSocketAddress new.
-            dataBuffer := ByteArray new:1000.
-            n := udpSock receiveFrom:addr buffer:dataBuffer start:1 for:dataBuffer size.
-            n > 0 ifTrue:[
-                Transcript showCR:('got: ' , n printString , 'bytes  from ' , addr printString).
-                Transcript showCR:('data: ' , (dataBuffer copyTo:n) printString).
-            ] ifFalse:[
-                Transcript showCR:'read failed'.
-            ].
-
-            Transcript showCR:'close'.
-            udpSock close
-        ]
-                                                                        [exEnd]
+									[exBegin]
+	|udpSock sock addr n dataBuffer|
+
+	udpSock := Socket newUDPserverAtPort:9999.
+	udpSock isNil ifTrue:[
+	    Transcript showCR:'socket setup failed.'.
+	] ifFalse:[
+	    udpSock setSocketOption:#'IP_ADD_MEMBERSHIP' argument:#[224 1 2 3] argument:#[0 0 0 0].
+	    Transcript showCR:'wait'.
+	    udpSock readWait.
+
+	    addr := IPSocketAddress new.
+	    dataBuffer := ByteArray new:1000.
+	    n := udpSock receiveFrom:addr buffer:dataBuffer start:1 for:dataBuffer size.
+	    n > 0 ifTrue:[
+		Transcript showCR:('got: ' , n printString , 'bytes  from ' , addr printString).
+		Transcript showCR:('data: ' , (dataBuffer copyTo:n) printString).
+	    ] ifFalse:[
+		Transcript showCR:'read failed'.
+	    ].
+
+	    Transcript showCR:'close'.
+	    udpSock close
+	]
+									[exEnd]
 
     example (connect to above UDP server and send some multicast data):
-                                                                        [exBegin]
-        |sock|
-
-        sock := Socket newUDP.
-        sock isNil ifTrue:[
-            Transcript showCR:'nope'
-        ] ifFalse:[
-            sock 
-                setSocketOption:#'IP_MULTICAST_TTL' argument:3 argument:nil;
-                sendTo:(IPSocketAddress hostName:'224.1.2.3' port:9999) buffer:'hello world'.
-            sock close
-        ]
-                                                                        [exEnd]
+									[exBegin]
+	|sock|
+
+	sock := Socket newUDP.
+	sock isNil ifTrue:[
+	    Transcript showCR:'nope'
+	] ifFalse:[
+	    sock
+		setSocketOption:#'IP_MULTICAST_TTL' argument:3 argument:nil;
+		sendTo:(IPSocketAddress hostName:'224.1.2.3' port:9999) buffer:'hello world'.
+	    sock close
+	]
+									[exEnd]
 
     example: pingWalk (try to ping hosts on the local network)
     Note: it dosen't use ICMP ping, but tries to reache the echo service,
-          which is disabled on most OS.
-                                                                        [exBegin]
-        |myAddress list top hosts walkProcess port|
-
-        myAddress := OperatingSystem getNetworkAddresses
-                        keysAndValuesSelect:[:eachIFName :eachAddress|
-                            eachAddress isLocal not
-                            and:[eachIFName = 'wlan0']
-                        ].
-        myAddress := myAddress first hostAddress.
-
-        port := Socket portOfService:'echo'.
-        port isNil ifTrue:[
-            self error:'dont know echo port'.
-            ^ self
-        ].
-
-        top := StandardSystemView new.
-        top label:'PING net walk'.
-
-        list := ScrollableView for:ListView in:top.
-        list origin:0.0@0.0 corner:1.0@1.0.
-
-        top openAndWait.
-
-        walkProcess := [
-            |l low hi direction tryHostID dottedName hostName conn addr|
-
-            l := SortedCollection new.
-
-            ' only works with type C-net
-              the code below could simply do 1 to:254 do:[:hostID }
-              but, to probe likely hosts earlier, the probing is done
-              ping-pong like around my ip-address (assuming, that other machines
-              have numbers around my own)'.
-
-            low := hi := (myAddress at:4).
-            direction := 1.
-
-            [low > 0 or:[hi < 255]] whileTrue:[
-                direction > 0 ifTrue:[
-                    hi := hi + 1.
-                    tryHostID := hi.
-                    direction := -1.
-                ] ifFalse:[
-                    low := low - 1.
-                    tryHostID := low.
-                    direction := 1.
-                ].
-                (tryHostID between:1 and:254) ifTrue:[
-                    dottedName := (myAddress at:1) printString
-                                  , '.' , (myAddress at:2) printString
-                                  , '.' , (myAddress at:3) printString
-                                  , '.' , tryHostID printString.
-
-                    top label:'PING net walk - trying ' , dottedName.
-
-                    top windowGroup withCursor:Cursor wait do:[
-                        conn := Socket newTCPclientToHost:dottedName port:port withTimeout:1000.
-                        conn notNil ifTrue:[
-                            addr := Socket ipAddressOfHost:dottedName.
-                            hostName := Socket hostWithIpAddress:addr.
-                            hostName isNil ifTrue:[
-                                hostName :='?'
-                            ].
-                            l add:(dottedName paddedTo:15 with:Character space)
-                                   , ' '
-                                   , (hostName paddedTo:15 with:Character space)
-                                   , ' up & reachable'.
-                            list list:l.
-                            conn close.
-                        ]
-                    ].
-                ].
-            ].
-            top label:'PING reachable hosts'.
-        ] forkAt:(Processor userBackgroundPriority).
-        walkProcess name:'ping net walker'.
-                                                                        [exEnd]
-
-
-        This example creates a simple UDP server that accepts
-        single packets from anybody and broadcasts them to all
-        clients that have connected so far.
-
-                                                                        [exBegin]
-        | socket address buffer msgSize clients |
-        clients := Set new.
-        address := IPSocketAddress new.
-        buffer := String new: 1024.
-
-        socket := self newUDPserverAtPort: 6666.
-
-        Transcript showCR: 'server starting'.
-
-        [
-            [true] whileTrue: [
-                (socket readWaitWithTimeoutMs: 200) ifFalse: [
-                    msgSize := socket
-                            receiveFrom: address
-                            buffer: buffer
-                            start: 1
-                            for: buffer size.
-
-                    clients add: address copy.
-                    clients do: [ :clientAddress |
-                            socket
-                                    sendTo: clientAddress
-                                    buffer: buffer
-                                    start: 1
-                                    for: msgSize]]
-            ]
-        ] ensure:[
-            Transcript showCR: 'server shutting down'.
-            socket close
-        ]
-                                                                        [exEnd]
+	  which is disabled on most OS.
+									[exBegin]
+	|myAddress list top hosts walkProcess port|
+
+	myAddress := OperatingSystem getNetworkAddresses
+			keysAndValuesSelect:[:eachIFName :eachAddress|
+			    eachAddress isLocal not
+			    and:[eachIFName = 'wlan0']
+			].
+	myAddress := myAddress first hostAddress.
+
+	port := Socket portOfService:'echo'.
+	port isNil ifTrue:[
+	    self error:'dont know echo port'.
+	    ^ self
+	].
+
+	top := StandardSystemView new.
+	top label:'PING net walk'.
+
+	list := ScrollableView for:ListView in:top.
+	list origin:0.0@0.0 corner:1.0@1.0.
+
+	top openAndWait.
+
+	walkProcess := [
+	    |l low hi direction tryHostID dottedName hostName conn addr|
+
+	    l := SortedCollection new.
+
+	    ' only works with type C-net
+	      the code below could simply do 1 to:254 do:[:hostID }
+	      but, to probe likely hosts earlier, the probing is done
+	      ping-pong like around my ip-address (assuming, that other machines
+	      have numbers around my own)'.
+
+	    low := hi := (myAddress at:4).
+	    direction := 1.
+
+	    [low > 0 or:[hi < 255]] whileTrue:[
+		direction > 0 ifTrue:[
+		    hi := hi + 1.
+		    tryHostID := hi.
+		    direction := -1.
+		] ifFalse:[
+		    low := low - 1.
+		    tryHostID := low.
+		    direction := 1.
+		].
+		(tryHostID between:1 and:254) ifTrue:[
+		    dottedName := (myAddress at:1) printString
+				  , '.' , (myAddress at:2) printString
+				  , '.' , (myAddress at:3) printString
+				  , '.' , tryHostID printString.
+
+		    top label:'PING net walk - trying ' , dottedName.
+
+		    top windowGroup withCursor:Cursor wait do:[
+			conn := Socket newTCPclientToHost:dottedName port:port withTimeout:1000.
+			conn notNil ifTrue:[
+			    addr := Socket ipAddressOfHost:dottedName.
+			    hostName := Socket hostWithIpAddress:addr.
+			    hostName isNil ifTrue:[
+				hostName :='?'
+			    ].
+			    l add:(dottedName paddedTo:15 with:Character space)
+				   , ' '
+				   , (hostName paddedTo:15 with:Character space)
+				   , ' up & reachable'.
+			    list list:l.
+			    conn close.
+			]
+		    ].
+		].
+	    ].
+	    top label:'PING reachable hosts'.
+	] forkAt:(Processor userBackgroundPriority).
+	walkProcess name:'ping net walker'.
+									[exEnd]
+
+
+	This example creates a simple UDP server that accepts
+	single packets from anybody and broadcasts them to all
+	clients that have connected so far.
+
+									[exBegin]
+	| socket address buffer msgSize clients |
+	clients := Set new.
+	address := IPSocketAddress new.
+	buffer := String new: 1024.
+
+	socket := self newUDPserverAtPort: 6666.
+
+	Transcript showCR: 'server starting'.
+
+	[
+	    [true] whileTrue: [
+		(socket readWaitWithTimeoutMs: 200) ifFalse: [
+		    msgSize := socket
+			    receiveFrom: address
+			    buffer: buffer
+			    start: 1
+			    for: buffer size.
+
+		    clients add: address copy.
+		    clients do: [ :clientAddress |
+			    socket
+				    sendTo: clientAddress
+				    buffer: buffer
+				    start: 1
+				    for: msgSize]]
+	    ]
+	] ensure:[
+	    Transcript showCR: 'server shutting down'.
+	    socket close
+	]
+									[exEnd]
 
    send a datagram to above server:
-                                                                        [exBegin]
-
-        | socket address buffer host msg |
-
-        host := Dialog
-                request: 'What is the name of the server''s host?'
-                initialAnswer: 'localhost'.
-
-        socket := self newUDP.
-
-        address := IPSocketAddress hostName: host port: 6666.
-
-        buffer := ByteArray new: 1000.
-        [
-            [(msg := Dialog request: 'Say something') isEmpty] whileFalse:[
-                | replySize stream |
-
-                socket writeWait.
-                stream := buffer writeStream.
-                stream nextPutAll: msg.
-                socket sendTo:address buffer:buffer start:1 for:stream position.
-                socket readWait.
-
-                replySize := socket receiveFrom:address buffer:buffer.
-                replySize > 0 ifTrue: [
-                    Transcript cr; nextPutAll: 'Server acknowledged: '.
-                    Transcript show: ((buffer copyFrom: 1 to: replySize) asString)
-                ]
-            ]
-        ] ensure: [socket close].
-        Transcript cr
-                                                                        [exEnd]
+									[exBegin]
+
+	| socket address buffer host msg |
+
+	host := Dialog
+		request: 'What is the name of the server''s host?'
+		initialAnswer: 'localhost'.
+
+	socket := self newUDP.
+
+	address := IPSocketAddress hostName: host port: 6666.
+
+	buffer := ByteArray new: 1000.
+	[
+	    [(msg := Dialog request: 'Say something') isEmpty] whileFalse:[
+		| replySize stream |
+
+		socket writeWait.
+		stream := buffer writeStream.
+		stream nextPutAll: msg.
+		socket sendTo:address buffer:buffer start:1 for:stream position.
+		socket readWait.
+
+		replySize := socket receiveFrom:address buffer:buffer.
+		replySize > 0 ifTrue: [
+		    Transcript cr; nextPutAll: 'Server acknowledged: '.
+		    Transcript show: ((buffer copyFrom: 1 to: replySize) asString)
+		]
+	    ]
+	] ensure: [socket close].
+	Transcript cr
+									[exEnd]
 
 
    loopBack:
-                                                                        [exBegin]
-
-        |readerTask readingSocket writingSocket|
-
-        readingSocket := self newTCPserverAtPort:9999.
-        readerTask :=
-            [
-                |connection|
-
-                readingSocket listenFor:1.
-                connection := readingSocket accept.
-                readingSocket close.
-                [connection atEnd] whileFalse:[
-                    Transcript showCR:(connection nextLine).
-                ].
-                connection close.
-            ] fork.
-
-        Delay waitForSeconds:1.
-        writingSocket := self newTCPclientToHost:'localhost' port:9999.
-        writingSocket nextPutLine:'Hello'.
-        writingSocket nextPutLine:'World'.
-        writingSocket close.
-                                                                        [exEnd]
+									[exBegin]
+
+	|readerTask readingSocket writingSocket|
+
+	readingSocket := self newTCPserverAtPort:9999.
+	readerTask :=
+	    [
+		|connection|
+
+		readingSocket listenFor:1.
+		connection := readingSocket accept.
+		readingSocket close.
+		[connection atEnd] whileFalse:[
+		    Transcript showCR:(connection nextLine).
+		].
+		connection close.
+	    ] fork.
+
+	Delay waitForSeconds:1.
+	writingSocket := self newTCPclientToHost:'localhost' port:9999.
+	writingSocket nextPutLine:'Hello'.
+	writingSocket nextPutLine:'World'.
+	writingSocket close.
+									[exEnd]
 "
 ! !
 
@@ -782,14 +782,14 @@
 
     newSock := self newIPv6.
     (newSock notNil and:[portNrOrServiceName notNil]) ifTrue:[
-        [
-            socketAddressClass := newSock socketAddressClass.
-            socketAddress := socketAddressClass hostName:nil serviceName:portNrOrServiceName type:#stream.
-            socketAddress hostAddress:socketAddressClass anyAddress.
-            newSock bindTo:socketAddress reuseAddress:true.
-        ] ifCurtailed:[
-            newSock close.
-        ]
+	[
+	    socketAddressClass := newSock socketAddressClass.
+	    socketAddress := socketAddressClass hostName:nil serviceName:portNrOrServiceName type:#stream.
+	    socketAddress hostAddress:socketAddressClass anyAddress.
+	    newSock bindTo:socketAddress reuseAddress:true.
+	] ifCurtailed:[
+	    newSock close.
+	]
     ].
     ^ newSock
 
@@ -798,13 +798,13 @@
      (Socket newIPv6:9996).
 
      test (eval the code below, then open a browser on (replace by your own IPv6 address)
-        http://[2003:a:e4d:bb01:a17f:9312:54cb:fed7]:9997/
-     
-     (Socket newIPv6:9997) 
-        listenFor:1;
-        readWait;
-        accept.
-        
+	http://[2003:a:e4d:bb01:a17f:9312:54cb:fed7]:9997/
+
+     (Socket newIPv6:9997)
+	listenFor:1;
+	readWait;
+	accept.
+
     "
 
     "Created: / 27-05-2019 / 14:06:49 / Claus Gittinger"
@@ -829,21 +829,21 @@
 
     newSock := self newTCP.
     (newSock notNil and:[portNrOrServiceName notNil]) ifTrue:[
-        [
-            socketAddressClass := newSock socketAddressClass.
-            socketAddress := socketAddressClass hostName:nil serviceName:portNrOrServiceName type:#stream.
-            socketAddress hostAddress:socketAddressClass anyAddress.
-            newSock bindTo:socketAddress reuseAddress:true.
-        ] ifCurtailed:[
-            newSock close.
-        ]
+	[
+	    socketAddressClass := newSock socketAddressClass.
+	    socketAddress := socketAddressClass hostName:nil serviceName:portNrOrServiceName type:#stream.
+	    socketAddress hostAddress:socketAddressClass anyAddress.
+	    newSock bindTo:socketAddress reuseAddress:true.
+	] ifCurtailed:[
+	    newSock close.
+	]
     ].
     ^ newSock
 
 
     "
-        Socket newTCP:'http-alt'.
-        Socket newTCP:9996.
+	Socket newTCP:'http-alt'.
+	Socket newTCP:9996.
     "
 
     "Modified (comment): / 17-05-2019 / 13:10:18 / Claus Gittinger"
@@ -868,18 +868,18 @@
     |port socketAddress|
 
     aService isString ifTrue:[
-        port := self portOfService:aService protocol:#tcp.
+	port := self portOfService:aService protocol:#tcp.
     ] ifFalse:[
-        port := aService.
+	port := aService.
     ].
     socketAddress := aSocketAddressOrByteArray isSocketAddress
-                        ifTrue:[aSocketAddressOrByteArray]
-                        ifFalse:[
-                            "Passing ByteArrays is obsolete and only supported for IPv4"
-                            IPSocketAddress hostAddress:aSocketAddressOrByteArray
-                        ].
+			ifTrue:[aSocketAddressOrByteArray]
+			ifFalse:[
+			    "Passing ByteArrays is obsolete and only supported for IPv4"
+			    IPSocketAddress hostAddress:aSocketAddressOrByteArray
+			].
     port notNil ifTrue:[
-        socketAddress port:port.
+	socketAddress port:port.
     ].
     ^ self newTCPclientToAddress:socketAddress withTimeout:milliSecondsOrTimeDuration
 
@@ -896,14 +896,14 @@
 
     socket := self domain:aSocketAddress domain type:#stream.
     ^ [
-        (socket connectTo:aSocketAddress withTimeout:milliSecondsOrTimeDuration) 
-        ifTrue:[socket] ifFalse:[socket close. nil]
+	(socket connectTo:aSocketAddress withTimeout:milliSecondsOrTimeDuration)
+	ifTrue:[socket] ifFalse:[socket close. nil]
     ] ifCurtailed:[
-        socket close.
+	socket close.
     ].
 
     "
-        self newTCPclientToAddress:(IPv6SocketAddress hostName:'www.exept.de' port:80) withTimeout:nil
+	self newTCPclientToAddress:(IPv6SocketAddress hostName:'www.exept.de' port:80) withTimeout:nil
     "
 
     "Modified (format): / 19-01-2018 / 18:22:30 / stefan"
@@ -943,40 +943,40 @@
     |socket addressList lastDomainSymbol lastNotification|
 
     hostNameOrAddress isString ifFalse:[
-        ^ self newTCPclientToAddress:hostNameOrAddress port:aPortOrServiceName withTimeout:milliSecondsOrTimeDuration.
+	^ self newTCPclientToAddress:hostNameOrAddress port:aPortOrServiceName withTimeout:milliSecondsOrTimeDuration.
     ].
 
     addressList := SocketAddress
-                        allForHostName:hostNameOrAddress
-                        serviceName:aPortOrServiceName
-                        domain:aDomainSymbolOrNil
-                        type:#stream.
+			allForHostName:hostNameOrAddress
+			serviceName:aPortOrServiceName
+			domain:aDomainSymbolOrNil
+			type:#stream.
 
     addressList do:[:eachAddress|
-        |domainSymbol|
-
-        domainSymbol := eachAddress domain.
-        domainSymbol ~~ lastDomainSymbol ifTrue:[
-            socket notNil ifTrue:[
-                socket close.
-            ].
-            socket := self new domain:domainSymbol type:#stream.
-            lastDomainSymbol := domainSymbol.
-        ].
-        [
-            (socket connectTo:eachAddress withTimeout:milliSecondsOrTimeDuration) ifTrue:[
-                ^ socket.
-            ].
-        ] on:SocketErrorNotification do:[:ex|
-            lastNotification := ex.
-        ].
+	|domainSymbol|
+
+	domainSymbol := eachAddress domain.
+	domainSymbol ~~ lastDomainSymbol ifTrue:[
+	    socket notNil ifTrue:[
+		socket close.
+	    ].
+	    socket := self new domain:domainSymbol type:#stream.
+	    lastDomainSymbol := domainSymbol.
+	].
+	[
+	    (socket connectTo:eachAddress withTimeout:milliSecondsOrTimeDuration) ifTrue:[
+		^ socket.
+	    ].
+	] on:SocketErrorNotification do:[:ex|
+	    lastNotification := ex.
+	].
     ].
     socket notNil ifTrue:[
-        socket close.
+	socket close.
     ].
     lastNotification notNil ifTrue:[
-        "if someone is interested in the notification - raise the last one"
-        lastNotification raiseRequest.
+	"if someone is interested in the notification - raise the last one"
+	lastNotification raiseRequest.
     ].
     ^ nil.
 
@@ -986,10 +986,10 @@
       Socket newTCPclientToHost:'www.exept.de' port:80 domain:nil withTimeout:1000.
 
       [
-        "if nobody is listening (Connection refused") the timeout does not apply"
-        Socket newTCPclientToHost:'localhost' port:'nntp' withTimeout:10s
+	"if nobody is listening (Connection refused") the timeout does not apply"
+	Socket newTCPclientToHost:'localhost' port:'nntp' withTimeout:10s
       ] on:SocketErrorNotification do:[:ex|
-        ex halt.
+	ex halt.
       ].
 EOC"
 
@@ -1006,10 +1006,10 @@
      and return nil."
 
     ^ self
-        newTCPclientToHost:hostNameOrAddress
-        port:aPortOrServiceName
-        domain:self defaultIpDomainForConnect
-        withTimeout:milliSecondsOrTimeDuration
+	newTCPclientToHost:hostNameOrAddress
+	port:aPortOrServiceName
+	domain:self defaultIpDomainForConnect
+	withTimeout:milliSecondsOrTimeDuration
 
     "Modified (format): / 19-01-2018 / 18:24:57 / stefan"
 !
@@ -1108,23 +1108,23 @@
 
     socket := self newUNIX.
     socket isNil ifTrue:[
-        ^ nil.
+	^ nil.
     ].
     ^ [
-        (socket connectTo:(UDSocketAddress name:pathName) withTimeout:milliSecondsOrTimeDuration)
-        ifTrue:[socket] ifFalse:[socket close. nil]
+	(socket connectTo:(UDSocketAddress name:pathName) withTimeout:milliSecondsOrTimeDuration)
+	ifTrue:[socket] ifFalse:[socket close. nil]
     ] ifCurtailed:[
-        socket close.
+	socket close.
     ].
 
     "
-        Socket newUNIXclientTo:'/tmp/foo'
-
-        [
-            Socket newUNIXclientTo:'/tmp/foo'
-        ] on:SocketErrorNotification do:[:ex|
-            ex halt.
-        ]
+	Socket newUNIXclientTo:'/tmp/foo'
+
+	[
+	    Socket newUNIXclientTo:'/tmp/foo'
+	] on:SocketErrorNotification do:[:ex|
+	    ex halt.
+	]
     "
 
     "Modified (format): / 19-01-2018 / 18:23:24 / stefan"
@@ -1755,7 +1755,7 @@
 noTimeout
     "disable timeouts - dummy for now"
 
-    ^ self 
+    ^ self
 !
 
 peerName
@@ -1806,8 +1806,8 @@
 
     newSock := self class new.
     (newSock primAcceptOn:self blocking:true) ifFalse:[
-        "should raise an error here - primitive code raises a notification"
-        ^ nil
+	"should raise an error here - primitive code raises a notification"
+	^ nil
     ].
     ^ newSock
 
@@ -1859,15 +1859,15 @@
      Notify with a SocketErrorNotification on error.
 
      The interpretation of hostOrPathNameOrSocketAddrOrNil portNrOrName depends on the domain:
-        Best use a SocketAddress
-        For backward compatibility:
-            AF_INET domain can also use (4byte) byteArray like internet numbers,
-            AF_UNIX domain cab use pathname strings."
+	Best use a SocketAddress
+	For backward compatibility:
+	    AF_INET domain can also use (4byte) byteArray like internet numbers,
+	    AF_UNIX domain cab use pathname strings."
 
     ^ self
-        bindTo:portNrOrNameString
-        address:addressString
-        reuseAddress:true
+	bindTo:portNrOrNameString
+	address:addressString
+	reuseAddress:true
 
     "Modified (comment): / 19-01-2018 / 13:36:54 / stefan"
 !
@@ -1878,10 +1878,10 @@
      - returns true if ok, false otherwise.
 
      The interpretation of hostOrPathNameOrSocketAddrOrNil portNrOrName depends on the domain:
-        Best use a SocketAddress
-        For backward compatibility:
-            AF_INET domain can also use (4byte) byteArray like internet numbers,
-            AF_UNIX domain can use pathname strings.
+	Best use a SocketAddress
+	For backward compatibility:
+	    AF_INET domain can also use (4byte) byteArray like internet numbers,
+	    AF_UNIX domain can use pathname strings.
 
      The reuse boolean argument controls if the SO_REUSEADDR socket option
      is to be set (to avoid the 'bind: address in use' error).
@@ -1890,35 +1890,35 @@
     |socketAddress|
 
     handle isNil ifTrue:[
-        ^ self errorNotOpen
+	^ self errorNotOpen
     ].
 
     hostOrPathNameOrSocketAddrOrNil isNil ifTrue:[
-        socketAddress := self socketAddressClass anyHost.
+	socketAddress := self socketAddressClass anyHost.
     ] ifFalse:[
-        (hostOrPathNameOrSocketAddrOrNil isSocketAddress) ifTrue:[
-            socketAddress := hostOrPathNameOrSocketAddrOrNil.
-        ] ifFalse:[
-            "backward compatibility: support for byteArray and string arg"
-            hostOrPathNameOrSocketAddrOrNil isString ifTrue:[
-                socketAddress := self socketAddressClass hostName:hostOrPathNameOrSocketAddrOrNil.
-            ] ifFalse:[
-                hostOrPathNameOrSocketAddrOrNil isByteCollection ifFalse:[
-                    ^ self error:'bindTo: bad host (socketAddress) argument'
-                ].
-                socketAddress := self socketAddressClass hostAddress:hostOrPathNameOrSocketAddrOrNil.
-            ].
-        ].
+	(hostOrPathNameOrSocketAddrOrNil isSocketAddress) ifTrue:[
+	    socketAddress := hostOrPathNameOrSocketAddrOrNil.
+	] ifFalse:[
+	    "backward compatibility: support for byteArray and string arg"
+	    hostOrPathNameOrSocketAddrOrNil isString ifTrue:[
+		socketAddress := self socketAddressClass hostName:hostOrPathNameOrSocketAddrOrNil.
+	    ] ifFalse:[
+		hostOrPathNameOrSocketAddrOrNil isByteCollection ifFalse:[
+		    ^ self error:'bindTo: bad host (socketAddress) argument'
+		].
+		socketAddress := self socketAddressClass hostAddress:hostOrPathNameOrSocketAddrOrNil.
+	    ].
+	].
     ].
     portNrOrNameOrNil notNil ifTrue:[
-        socketAddress port:portNrOrNameOrNil.
+	socketAddress port:portNrOrNameOrNil.
     ].
 
     ^ self bindTo:socketAddress reuseAddress:reuse.
 
     "
      (Socket domain:#'AF_INET' type:#stream)
-         bindTo:2144 address:nil; yourself
+	 bindTo:2144 address:nil; yourself
     "
 
     "Modified (comment): / 19-01-2018 / 13:37:13 / stefan"
@@ -1936,17 +1936,17 @@
     |ok error socketAddress|
 
     handle isNil ifTrue:[
-        ^ self errorNotOpen
+	^ self errorNotOpen
     ].
     socketAddress := aSocketAddress.
     socketAddress isNil ifTrue:[
-        "ok, get an all zero socket address, so it is for anyHost
-         and the port will be assigned"
-        socketAddress := self socketAddressClass new.
+	"ok, get an all zero socket address, so it is for anyHost
+	 and the port will be assigned"
+	socketAddress := self socketAddressClass new.
     ].
     domain == #'AF_INET6' ifTrue:[
-        "accept also IPv4 connections on IPv6 sockets (this is off by default for windows"
-        self setSocketOption:#'IPV6_V6ONLY' argument:false argument:nil.
+	"accept also IPv4 connections on IPv6 sockets (this is off by default for windows"
+	self setSocketOption:#'IPV6_V6ONLY' argument:false argument:nil.
     ].
     ok := false.
 
@@ -1960,52 +1960,52 @@
     int sockAddrOffs;
 
     if (fp == nil) {
-        goto getOutOfHere;
+	goto getOutOfHere;
     }
 
     if (! __isBytes(socketAddress)) {
-        error = __mkSmallInteger(-1);
-        goto getOutOfHere;
+	error = __mkSmallInteger(-1);
+	goto getOutOfHere;
     }
     /* get the socket-address */
     if (__isNonNilObject(socketAddress)){
-        int nIndex;
-        OBJ cls = __qClass(socketAddress);
-
-        sockAddrOffs = __OBJS2BYTES__(__intVal(__ClassInstPtr(cls)->c_ninstvars));
-        nIndex = __qSize(socketAddress) - OHDR_SIZE;
-        sockaddr_size = nIndex - sockAddrOffs;
-        if (sockaddr_size > sizeof(sa)) {
-            error=__mkSmallInteger(-2);
-            goto getOutOfHere;
-        }
-        memcpy(&sa, __byteArrayVal(socketAddress) + sockAddrOffs, sockaddr_size);
+	int nIndex;
+	OBJ cls = __qClass(socketAddress);
+
+	sockAddrOffs = __OBJS2BYTES__(__intVal(__ClassInstPtr(cls)->c_ninstvars));
+	nIndex = __qSize(socketAddress) - OHDR_SIZE;
+	sockaddr_size = nIndex - sockAddrOffs;
+	if (sockaddr_size > sizeof(sa)) {
+	    error=__mkSmallInteger(-2);
+	    goto getOutOfHere;
+	}
+	memcpy(&sa, __byteArrayVal(socketAddress) + sockAddrOffs, sockaddr_size);
     }
 
     sock = SOCKET_FROM_FILE_OBJECT(fp);
 
 # ifdef SO_REUSEADDR
     if (reuse == true) {
-        int on = 1;
-        if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char *) &on, sizeof (on)) < 0) {
-            DBGPRINTF(("SOCKET: setsockopt - SO_REUSEADDR failed\n"));
-        }
+	int on = 1;
+	if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char *) &on, sizeof (on)) < 0) {
+	    DBGPRINTF(("SOCKET: setsockopt - SO_REUSEADDR failed\n"));
+	}
     }
 # endif /* SO_REUSEADDR */
 
 # ifdef BIND_BLOCKS
 #  ifdef DO_WRAP_CALLS
     do {
-        __threadErrno = 0;
-        ret = STX_WSA_NOINT_CALL3("bind", bind, sock, &sa, sockaddr_size);
+	__threadErrno = 0;
+	ret = STX_WSA_NOINT_CALL3("bind", bind, sock, &sa, sockaddr_size);
     } while ((ret < 0) && (__threadErrno == EINTR));
     if (ret < 0) {
-        errno = __threadErrno;
+	errno = __threadErrno;
     }
 #  else
     __BEGIN_INTERRUPTABLE__
     do {
-        ret = bind(sock, (struct sockaddr *)&sa, sockaddr_size);
+	ret = bind(sock, (struct sockaddr *)&sa, sockaddr_size);
     } while ((ret < 0) && (errno == EINTR));
     __END_INTERRUPTABLE__
 #  endif
@@ -2015,68 +2015,68 @@
 # endif
     if (ret < 0) {
 # ifdef __win32__
-        if (errno == 0) {
-            errno = WSAGetLastError();
-        }
+	if (errno == 0) {
+	    errno = WSAGetLastError();
+	}
 # endif
-        DBGPRINTF(("SOCKET: bind failed errno=%d\n", errno));
-        error = __INST(lastErrorNumber) = __MKSMALLINT(errno);
-        goto getOutOfHere;
+	DBGPRINTF(("SOCKET: bind failed errno=%d\n", errno));
+	error = __INST(lastErrorNumber) = __MKSMALLINT(errno);
+	goto getOutOfHere;
     } else {
-        ok = true;
+	ok = true;
     }
 #endif /* NO_SOCKET */
 
 getOutOfHere: ;
 %}.
     ok ifFalse:[
-        |errorHolder errorString|
-
-        error isInteger ifTrue:[
-            errorHolder := OperatingSystem errorHolderForNumber:error.
-            errorString := errorHolder errorString.
-        ] ifFalse:[
-            errorString := error.
-        ].
-        OpenError newException
-            errorString:('cannot bind socket to address: %1 (%2)'
-                            bindWith:socketAddress
-                            with:errorString);
-            errorCode:error;
-            osErrorHolder:errorHolder;
-            parameter:self;
-            raiseRequest.
-        "maybe someone catches the error and binds to some other port..."
-        ^ true.
+	|errorHolder errorString|
+
+	error isInteger ifTrue:[
+	    errorHolder := OperatingSystem errorHolderForNumber:error.
+	    errorString := errorHolder errorString.
+	] ifFalse:[
+	    errorString := error.
+	].
+	OpenError newException
+	    errorString:('cannot bind socket to address: %1 (%2)'
+			    bindWith:socketAddress
+			    with:errorString);
+	    errorCode:error;
+	    osErrorHolder:errorHolder;
+	    parameter:self;
+	    raiseRequest.
+	"maybe someone catches the error and binds to some other port..."
+	^ true.
     ].
 
     port := socketAddress port.
     port == 0 ifTrue:[
-        "this is a bind to a random port, now we can get the real port"
-        port := self getFullSocketAddress port.
+	"this is a bind to a random port, now we can get the real port"
+	port := self getFullSocketAddress port.
     ].
     ^ true
 
     "
      (Socket domain:#'AF_INET' type:#stream)
-        bindTo:(IPSocketAddress anyHost port:445) reuseAddress:false;
-        yourself.
+	bindTo:(IPSocketAddress anyHost port:445) reuseAddress:false;
+	yourself.
 
      (Socket domain:#'AF_INET' type:#stream)
-        bindTo:139 reuseAddress:false;
-        yourself.
+	bindTo:139 reuseAddress:false;
+	yourself.
 
      (Socket domain:#'AF_INET6' type:#stream)
-        bindTo:nil reuseAddress:false;
-        yourself.
+	bindTo:nil reuseAddress:false;
+	yourself.
 
      (Socket domain:#'AF_INET' type:#stream)
-        bindTo:(IPSocketAddress localHost port:2122) reuseAddress:false;
-        yourself.
+	bindTo:(IPSocketAddress localHost port:2122) reuseAddress:false;
+	yourself.
 
      (Socket domain:#'AF_UNIX' type:#stream)
-        bindTo:nil reuseAddress:false;
-        yourself.
+	bindTo:nil reuseAddress:false;
+	yourself.
     "
 
     "Modified: / 19-01-2018 / 13:37:21 / stefan"
@@ -2091,7 +2091,7 @@
     |err|
 
     handle isNil ifTrue:[
-        ^ self errorNotOpen
+	^ self errorNotOpen
     ].
 %{
 #ifndef NO_SOCKET
@@ -2100,9 +2100,9 @@
     int ret;
 
     if (! __isSmallInteger(aNumber)) {
-        DBGPRINTF(("SOCKET: invalid arg\n"));
-        err = @symbol(badArgument);
-        goto out;
+	DBGPRINTF(("SOCKET: invalid arg\n"));
+	err = @symbol(badArgument);
+	goto out;
     }
 
     sock = SOCKET_FROM_FILE_OBJECT(fp);
@@ -2110,16 +2110,16 @@
 #ifdef LISTEN_BLOCKS
 # ifdef DO_WRAP_CALLS
     do {
-        __threadErrno = 0;
-        ret = STX_WSA_NOINT_CALL2("listen", listen, sock, __intVal(aNumber));
+	__threadErrno = 0;
+	ret = STX_WSA_NOINT_CALL2("listen", listen, sock, __intVal(aNumber));
     } while ((ret < 0) && (__threadErrno == EINTR));
     if (ret < 0) {
-        errno = __threadErrno;
+	errno = __threadErrno;
     }
 # else
     __BEGIN_INTERRUPTABLE__
     do {
-        ret = listen(sock, __intVal(aNumber));
+	ret = listen(sock, __intVal(aNumber));
     } while ((ret < 0) && (errno == EINTR));
     __END_INTERRUPTABLE__
 # endif
@@ -2130,13 +2130,13 @@
 
     if (ret < 0) {
 # ifdef __win32__
-        if (errno == 0) {
-            errno = WSAGetLastError();
-        }
+	if (errno == 0) {
+	    errno = WSAGetLastError();
+	}
 # endif
-        err = __MKSMALLINT(errno);
-        DBGPRINTF(("SOCKET: listen call failed errno=%d\n", errno));
-        goto out;
+	err = __MKSMALLINT(errno);
+	DBGPRINTF(("SOCKET: listen call failed errno=%d\n", errno));
+	goto out;
     }
 #else
     RETURN (false);
@@ -2144,10 +2144,10 @@
 out:;
 %}.
     err notNil ifTrue:[
-        err isSymbol ifTrue:[
-            self error:err.
-        ].
-        ^ self reportError:err.
+	err isSymbol ifTrue:[
+	    self error:err.
+	].
+	^ self reportError:err.
     ].
 
     listening := aNumber.
@@ -2155,12 +2155,12 @@
 
     "
        [
-           |sock|
-           sock := Socket newTCP.
-           sock listenFor:1.
-           sock
+	   |sock|
+	   sock := Socket newTCP.
+	   sock listenFor:1.
+	   sock
        ] on:SocketErrorNotification do:[:ex|
-           ex halt.
+	   ex halt.
        ].
     "
 
@@ -2242,26 +2242,26 @@
     |domainClass socketAddress|
 
     (hostOrPathNameOrSocketAddr isSocketAddress) ifTrue:[
-        socketAddress := hostOrPathNameOrSocketAddr.
-        portNrOrNameOrNil notNil ifTrue:[
-            socketAddress port:portNrOrNameOrNil.
-        ].
+	socketAddress := hostOrPathNameOrSocketAddr.
+	portNrOrNameOrNil notNil ifTrue:[
+	    socketAddress port:portNrOrNameOrNil.
+	].
     ] ifFalse:[
-        "backward compatibility: support for byteArray and string arg"
-        domainClass := self class socketAddressClassForDomain:domain.
-        domainClass isNil ifTrue:[
-            ^ self error:'invalid (unsupported) domain'.
-        ].
-
-        hostOrPathNameOrSocketAddr isString ifTrue:[
-            socketAddress := domainClass hostName:hostOrPathNameOrSocketAddr serviceName:portNrOrNameOrNil type:#SOCK_STREAM.
-            peerName := hostOrPathNameOrSocketAddr.
-        ] ifFalse:[
-            hostOrPathNameOrSocketAddr isByteCollection ifFalse:[
-                ^ self error:'connectTo: bad host (socketAddress) argument'
-            ].
-            socketAddress := domainClass hostAddress:hostOrPathNameOrSocketAddr port:portNrOrNameOrNil.
-        ].
+	"backward compatibility: support for byteArray and string arg"
+	domainClass := self class socketAddressClassForDomain:domain.
+	domainClass isNil ifTrue:[
+	    ^ self error:'invalid (unsupported) domain'.
+	].
+
+	hostOrPathNameOrSocketAddr isString ifTrue:[
+	    socketAddress := domainClass hostName:hostOrPathNameOrSocketAddr serviceName:portNrOrNameOrNil type:#SOCK_STREAM.
+	    peerName := hostOrPathNameOrSocketAddr.
+	] ifFalse:[
+	    hostOrPathNameOrSocketAddr isByteCollection ifFalse:[
+		^ self error:'connectTo: bad host (socketAddress) argument'
+	    ].
+	    socketAddress := domainClass hostAddress:hostOrPathNameOrSocketAddr port:portNrOrNameOrNil.
+	].
     ].
 
     ^ self connectTo:socketAddress withTimeout:milliSecondsOrTimeDuration.
@@ -2293,7 +2293,7 @@
     |isAsync err timeoutMs milliSeconds|
 
     handle isNil ifTrue:[
-        ^ self errorNotOpen
+	^ self errorNotOpen
     ].
     isAsync := false.
 
@@ -2314,25 +2314,25 @@
     int sockaddr_size;
 
     if (!__isNonNilObject(aSocketAddress) || !__isBytes(aSocketAddress)) {
-        DBGPRINTF(("SOCKET: invalid socketAddress\n"));
-        err = @symbol(argumentError);
-        goto out;
+	DBGPRINTF(("SOCKET: invalid socketAddress\n"));
+	err = @symbol(argumentError);
+	goto out;
     }
 
     {
-        int sockAddrOffs = 0;
-        int nIndex =__byteArraySize(aSocketAddress);
-        OBJ cls = __qClass(aSocketAddress);
-
-        //if (cls != @global(ByteArray))
-        //    sockAddrOffs = __OBJS2BYTES__(__intVal(__ClassInstPtr(cls)->c_ninstvars));
-        sockaddr_size = nIndex - sockAddrOffs;
-        if (sockaddr_size > sizeof(sa)) {
-            DBGPRINTF(("SOCKET: invalid (short) socketAddress\n"));
-            err = @symbol(argumentError);
-            goto out;
-        }
-        memcpy(&sa, __byteArrayVal(aSocketAddress) + sockAddrOffs, sockaddr_size);
+	int sockAddrOffs = 0;
+	int nIndex =__byteArraySize(aSocketAddress);
+	OBJ cls = __qClass(aSocketAddress);
+
+	//if (cls != @global(ByteArray))
+	//    sockAddrOffs = __OBJS2BYTES__(__intVal(__ClassInstPtr(cls)->c_ninstvars));
+	sockaddr_size = nIndex - sockAddrOffs;
+	if (sockaddr_size > sizeof(sa)) {
+	    DBGPRINTF(("SOCKET: invalid (short) socketAddress\n"));
+	    err = @symbol(argumentError);
+	    goto out;
+	}
+	memcpy(&sa, __byteArrayVal(aSocketAddress) + sockAddrOffs, sockaddr_size);
     }
 
     sock = SOCKET_FROM_FILE_OBJECT(fp);
@@ -2359,18 +2359,18 @@
 
 
     do {
-        DBGFPRINTF((stderr, "SOCKET: (sock=%d) connect...\n", sock));
-        ret = STX_WSA_NOINT_CALL3("connect", connect, sock, &sa, (INT)sockaddr_size);
-        DBGFPRINTF((stderr, "SOCKET: connect(%d) -> %"_ld_" (%d)\n", sock, (INT)ret, __threadErrno));
+	DBGFPRINTF((stderr, "SOCKET: (sock=%d) connect...\n", sock));
+	ret = STX_WSA_NOINT_CALL3("connect", connect, sock, &sa, (INT)sockaddr_size);
+	DBGFPRINTF((stderr, "SOCKET: connect(%d) -> %"_ld_" (%d)\n", sock, (INT)ret, __threadErrno));
     } while ((ret < 0) && (__threadErrno == EINTR));
 
     if (ret < 0) {
-        int optLen = sizeof(errno);
-        errno = __threadErrno;
+	int optLen = sizeof(errno);
+	errno = __threadErrno;
 #if 0
-        if (getsockopt(sock, SOL_SOCKET, SO_ERROR, &errno, &optLen) == SOCKET_ERROR) {
-            DBGFPRINTF((stderr, "SOCKET: getsockopt(SO_ERROR) failed: %d\n", WSAGetLastError()));
-        }
+	if (getsockopt(sock, SOL_SOCKET, SO_ERROR, &errno, &optLen) == SOCKET_ERROR) {
+	    DBGFPRINTF((stderr, "SOCKET: getsockopt(SO_ERROR) failed: %d\n", WSAGetLastError()));
+	}
 #endif // 0
     }
 
@@ -2381,16 +2381,16 @@
     __BEGIN_INTERRUPTABLE__
 #  endif
     do {
-        ret = connect(sock, (struct sockaddr *)&sa, sockaddr_size);
+	ret = connect(sock, (struct sockaddr *)&sa, sockaddr_size);
     } while ((ret < 0)
 #  ifdef __win32__
-             && (errno = WSAGetLastError())
+	     && (errno = WSAGetLastError())
 #  endif
-             && ((errno == EINTR)
+	     && ((errno == EINTR)
 #  ifdef EAGAIN
-                 || (errno == EAGAIN)
+		 || (errno == EAGAIN)
 #  endif
-                ));
+		));
 #  if !defined(__win32__) && !defined(O_NONBLOCK)
     __END_INTERRUPTABLE__
 #  endif
@@ -2403,47 +2403,47 @@
 
     if (ret < 0) {
 # if defined(EINPROGRESS) || defined(EALREADY)
-        if (0
+	if (0
 #  ifdef __win32__
-            || (errno == WSAEWOULDBLOCK)
+	    || (errno == WSAEWOULDBLOCK)
 #  endif
 #  ifdef EINPROGRESS
-            || (errno == EINPROGRESS)
+	    || (errno == EINPROGRESS)
 #  endif
 #  ifdef EALREADY
-            || (errno == EALREADY)
+	    || (errno == EALREADY)
 #  endif
-        ) {
-            /*
-             * This was a nonblocking operation that will take some time.
-             * Do a select on read to get informed when the operation is ready.
-             */
-            DBGFPRINTF((stderr, "SOCKET: isAsync is true\n"));
-            isAsync = true;
-        } else
+	) {
+	    /*
+	     * This was a nonblocking operation that will take some time.
+	     * Do a select on read to get informed when the operation is ready.
+	     */
+	    DBGFPRINTF((stderr, "SOCKET: isAsync is true\n"));
+	    isAsync = true;
+	} else
 # endif /* EINPROGRESS or EALREADY */
-        {
-            DBGFPRINTF((stderr, "SOCKET: connect failed ret=%"_ld_" errno=%d __threadErrno=%d\n",
-                        (INT)ret, errno, __threadErrno ));
+	{
+	    DBGFPRINTF((stderr, "SOCKET: connect failed ret=%"_ld_" errno=%d __threadErrno=%d\n",
+			(INT)ret, errno, __threadErrno ));
 # ifdef DUMP_ADDRESS
-            {
-                unsigned char *cp = (unsigned char *)(&sa);
-                int i;
-
-                console_printf("address data:\n");
-                for (i=0; i<sockaddr_size; i++) {
-                    console_printf(" %02x\n", *cp++);
-                }
-            }
+	    {
+		unsigned char *cp = (unsigned char *)(&sa);
+		int i;
+
+		console_printf("address data:\n");
+		for (i=0; i<sockaddr_size; i++) {
+		    console_printf(" %02x\n", *cp++);
+		}
+	    }
 # endif
-            err = __MKSMALLINT(errno);
-        }
+	    err = __MKSMALLINT(errno);
+	}
     }
 
 # ifdef __win32__
     {
-        int off = 0;
-        ioctlsocket(sock, FIONBIO, &off);
+	int off = 0;
+	ioctlsocket(sock, FIONBIO, &off);
     }
 # elif defined(O_NONBLOCK) // Linux / Unix
     fcntl(sock, F_SETFL, oldFlags);
@@ -2456,33 +2456,33 @@
 %}.
 
     err notNil ifTrue:[
-        err isSymbol ifTrue:[
-            self primitiveFailed:err.
-        ].
-        ^ self reportError:err.
+	err isSymbol ifTrue:[
+	    self primitiveFailed:err.
+	].
+	^ self reportError:err.
     ].
     isAsync ifTrue:[
-        milliSeconds := milliSecondsOrTimeDuration.
-        milliSecondsOrTimeDuration isTimeDuration ifTrue:[
-            milliSeconds := milliSecondsOrTimeDuration asMilliseconds.
-        ].
-        (self writeExceptionWaitWithTimeoutMs:milliSeconds) ifTrue:[
-            "/ a timeout occurred
-            "/ should I cancel the connect?
-            ^ self reportError:(OperatingSystem errorNumberFor:#ETIMEDOUT).
-        ].
-        err := self getSocketError.
-        err ~~ 0 ifTrue:[
-            ^ self reportError:err.
-        ].
+	milliSeconds := milliSecondsOrTimeDuration.
+	milliSecondsOrTimeDuration isTimeDuration ifTrue:[
+	    milliSeconds := milliSecondsOrTimeDuration asMilliseconds.
+	].
+	(self writeExceptionWaitWithTimeoutMs:milliSeconds) ifTrue:[
+	    "/ a timeout occurred
+	    "/ should I cancel the connect?
+	    ^ self reportError:(OperatingSystem errorNumberFor:#ETIMEDOUT).
+	].
+	err := self getSocketError.
+	err ~~ 0 ifTrue:[
+	    ^ self reportError:err.
+	].
     ].
 
 
     peer := aSocketAddress.
     port isNil ifTrue:[
-        "socket has not been explicitly bound,
-         after connect it has been bound implicitly - fetch the port"
-        port := self getFullSocketAddress port.
+	"socket has not been explicitly bound,
+	 after connect it has been bound implicitly - fetch the port"
+	port := self getFullSocketAddress port.
     ].
     ^ true
 
@@ -2493,12 +2493,12 @@
        sock
 
        [
-           |sock|
-           sock := Socket newTCP.
-           sock connectTo:(IPSocketAddress localHost port:21) withTimeout:1000.
-           sock
+	   |sock|
+	   sock := Socket newTCP.
+	   sock connectTo:(IPSocketAddress localHost port:21) withTimeout:1000.
+	   sock
        ] on:SocketErrorNotification do:[:ex|
-           ex halt.
+	   ex halt.
        ].
 
        |sock|
@@ -2525,67 +2525,67 @@
     OBJ fp = __INST(handle);
 
     if (fp != nil) {
-        SOCKET sock;
-        INT objSize, offs;
-        INT n;
-        char *extPtr;
-        unsigned char *buffer;
-        unsigned char *allocatedBuffer = NULL;
-        INT flags = 0;
-
-        sock = SOCKET_FROM_FILE_OBJECT(fp);
-
-        if (! setupBufferParameters(aDataBuffer, startIndex, &extPtr, &offs, &objSize)) goto bad;
-        if (__isSmallInteger(nBytes)) {
-            if (__intVal(nBytes) < objSize) {
-                objSize = __intVal(nBytes);
-            }
-        }
+	SOCKET sock;
+	INT objSize, offs;
+	INT n;
+	char *extPtr;
+	unsigned char *buffer;
+	unsigned char *allocatedBuffer = NULL;
+	INT flags = 0;
+
+	sock = SOCKET_FROM_FILE_OBJECT(fp);
+
+	if (! setupBufferParameters(aDataBuffer, startIndex, &extPtr, &offs, &objSize)) goto bad;
+	if (__isSmallInteger(nBytes)) {
+	    if (__intVal(nBytes) < objSize) {
+		objSize = __intVal(nBytes);
+	    }
+	}
 
 # ifdef DO_WRAP_CALLS
-        if (extPtr) {
-            buffer = extPtr + offs;
-        } else {
-            allocatedBuffer = buffer = (char *)malloc(objSize);
-        }
-
-        do {
-            __threadErrno = 0;
-            n = (INT)STX_WSA_NOINT_CALL4("recv", recv, sock, buffer, objSize, flags);
-        } while ((n < 0) && (__threadErrno == EINTR));
-        if (n < 0) {
-            errno = __threadErrno;
-        }
-
-        if (allocatedBuffer) {
-            if (n > 0) {
-                memcpy((char *)__InstPtr(aDataBuffer) + offs, allocatedBuffer, n);
-            }
-            free(allocatedBuffer);
-        }
+	if (extPtr) {
+	    buffer = extPtr + offs;
+	} else {
+	    allocatedBuffer = buffer = (char *)malloc(objSize);
+	}
+
+	do {
+	    __threadErrno = 0;
+	    n = (INT)STX_WSA_NOINT_CALL4("recv", recv, sock, buffer, objSize, flags);
+	} while ((n < 0) && (__threadErrno == EINTR));
+	if (n < 0) {
+	    errno = __threadErrno;
+	}
+
+	if (allocatedBuffer) {
+	    if (n > 0) {
+		memcpy((char *)__InstPtr(aDataBuffer) + offs, allocatedBuffer, n);
+	    }
+	    free(allocatedBuffer);
+	}
 # else
-        __BEGIN_INTERRUPTABLE__
-        do {
-            if (extPtr) {
-                n = recv(sock, extPtr + offs, objSize, flags);
-            } else {
-                n = recv(sock, (char *)__InstPtr(aDataBuffer) + offs, objSize, flags);
-            }
-        } while ((n < 0) && (errno == EINTR));
-        __END_INTERRUPTABLE__
+	__BEGIN_INTERRUPTABLE__
+	do {
+	    if (extPtr) {
+		n = recv(sock, extPtr + offs, objSize, flags);
+	    } else {
+		n = recv(sock, (char *)__InstPtr(aDataBuffer) + offs, objSize, flags);
+	    }
+	} while ((n < 0) && (errno == EINTR));
+	__END_INTERRUPTABLE__
 # endif
 
-        if (n < 0) {
-            error = __INST(lastErrorNumber) = __MKSMALLINT(errno);
-        } else {
-            RETURN(__MKSMALLINT(n));
-        }
+	if (n < 0) {
+	    error = __INST(lastErrorNumber) = __MKSMALLINT(errno);
+	} else {
+	    RETURN(__MKSMALLINT(n));
+	}
     }
 #endif
 bad: ;
 %}.
     error notNil ifTrue:[
-        ^ self readError:error.
+	^ self readError:error.
     ].
     "
      arrive here if you try to receive into an invalid buffer (i.e. not ByteArray-like)
@@ -2632,17 +2632,17 @@
 
     domainClass := self class socketAddressClassForDomain:domain.
     domainClass isNil ifTrue:[
-        ^ self error:'invalid (unsupported) domain'.
+	^ self error:'invalid (unsupported) domain'.
     ].
     aSocketAddress isSocketAddress ifTrue:[
-        aSocketAddress class == domainClass ifFalse:[
-            ^ self error:'addressBuffer class mismatch (domain)'.
-        ].
-        addr := aSocketAddress.
+	aSocketAddress class == domainClass ifFalse:[
+	    ^ self error:'addressBuffer class mismatch (domain)'.
+	].
+	addr := aSocketAddress.
     ] ifFalse:[
-        aSocketAddress notNil ifTrue:[
-            addr := domainClass new.
-        ].
+	aSocketAddress notNil ifTrue:[
+	    addr := domainClass new.
+	].
     ].
 
 %{
@@ -2650,103 +2650,103 @@
     OBJ fp = __INST(handle);
 
     if (fp != nil) {
-        SOCKET sock;
-        size_t objSize;
-        union sockaddr_u sa;
-        socklen_t alen = 0;
-        INT n, offs;
-        int _flags = __longIntVal(flags);
-        char *extPtr;
-        unsigned char *allocatedBuffer = NULL, *buffer = NULL;
-
-        sock = SOCKET_FROM_FILE_OBJECT(fp);
-
-        if (! setupBufferParameters(aDataBuffer, startIndex, &extPtr, &offs, &objSize)) goto bad;
-        if (__isSmallInteger(nBytes)) {
-            if (__intVal(nBytes) < objSize) {
-                objSize = __intVal(nBytes);
-            }
-        }
+	SOCKET sock;
+	size_t objSize;
+	union sockaddr_u sa;
+	socklen_t alen = 0;
+	INT n, offs;
+	int _flags = __longIntVal(flags);
+	char *extPtr;
+	unsigned char *allocatedBuffer = NULL, *buffer = NULL;
+
+	sock = SOCKET_FROM_FILE_OBJECT(fp);
+
+	if (! setupBufferParameters(aDataBuffer, startIndex, &extPtr, &offs, &objSize)) goto bad;
+	if (__isSmallInteger(nBytes)) {
+	    if (__intVal(nBytes) < objSize) {
+		objSize = __intVal(nBytes);
+	    }
+	}
 # ifdef DO_WRAP_CALLS
-        if (extPtr) {
-            buffer = extPtr + offs;
-        } else {
-            allocatedBuffer = buffer = (char *)malloc(objSize);
-        }
-
-        do {
-            __threadErrno = 0;
-            alen = sizeof(sa);
-            n = (INT)STX_WSA_NOINT_CALL6("recvfrom", recvfrom, sock, buffer, objSize, _flags, (struct sockaddr *)&sa, &alen);
-        } while ((n < 0) && (__threadErrno == EINTR));
-        if (n < 0) {
-            errno = __threadErrno;
-        }
-
-        if (allocatedBuffer) {
-            if (n > 0) {
-                memcpy((char *)__InstPtr(aDataBuffer) + offs, allocatedBuffer, n);
-            }
-            free(allocatedBuffer);
-        }
+	if (extPtr) {
+	    buffer = extPtr + offs;
+	} else {
+	    allocatedBuffer = buffer = (char *)malloc(objSize);
+	}
+
+	do {
+	    __threadErrno = 0;
+	    alen = sizeof(sa);
+	    n = (INT)STX_WSA_NOINT_CALL6("recvfrom", recvfrom, sock, buffer, objSize, _flags, (struct sockaddr *)&sa, &alen);
+	} while ((n < 0) && (__threadErrno == EINTR));
+	if (n < 0) {
+	    errno = __threadErrno;
+	}
+
+	if (allocatedBuffer) {
+	    if (n > 0) {
+		memcpy((char *)__InstPtr(aDataBuffer) + offs, allocatedBuffer, n);
+	    }
+	    free(allocatedBuffer);
+	}
 # else
-        __BEGIN_INTERRUPTABLE__
-        do {
-            alen = sizeof(sa);
-            if (extPtr) {
-                n = recvfrom(sock, extPtr + offs, objSize, _flags, (struct sockaddr *) &sa, &alen);
-            } else {
-                n = recvfrom(sock, (char *)__InstPtr(aDataBuffer) + offs, objSize, _flags, (struct sockaddr *) &sa, &alen);
-            }
-        } while ((n < 0) && (errno == EINTR));
-        __END_INTERRUPTABLE__
+	__BEGIN_INTERRUPTABLE__
+	do {
+	    alen = sizeof(sa);
+	    if (extPtr) {
+		n = recvfrom(sock, extPtr + offs, objSize, _flags, (struct sockaddr *) &sa, &alen);
+	    } else {
+		n = recvfrom(sock, (char *)__InstPtr(aDataBuffer) + offs, objSize, _flags, (struct sockaddr *) &sa, &alen);
+	    }
+	} while ((n < 0) && (errno == EINTR));
+	__END_INTERRUPTABLE__
 # endif
 
-        if (n >= 0) {
-            if (__isNonNilObject(addr)) {
-                char *addrPtr;
-                OBJ oClass;
-                int nInstVars, nInstBytes, objSize;
-
-                oClass = __qClass(addr);
-                if (! __isBytes(addr) )
-                    goto bad;
-                nInstVars = __intVal(__ClassInstPtr(oClass)->c_ninstvars);
-                nInstBytes = OHDR_SIZE + (nInstVars * sizeof(OBJ));
-                objSize = __qSize(addr) - nInstBytes;
-                addrPtr = (char *)__InstPtr(addr) + nInstBytes;
-                if (objSize < alen)
-                    goto bad;
-
-                /*
-                 * extract the datagrams address
-                 */
-                memcpy(addrPtr, (char *)&sa, alen);
-                addrLen = __MKSMALLINT(alen);
-            }
-        }
-        if (n < 0) {
-            error = __INST(lastErrorNumber) = __MKSMALLINT(errno);
-        }
-        nReceived = __MKSMALLINT(n);
+	if (n >= 0) {
+	    if (__isNonNilObject(addr)) {
+		char *addrPtr;
+		OBJ oClass;
+		int nInstVars, nInstBytes, objSize;
+
+		oClass = __qClass(addr);
+		if (! __isBytes(addr) )
+		    goto bad;
+		nInstVars = __intVal(__ClassInstPtr(oClass)->c_ninstvars);
+		nInstBytes = OHDR_SIZE + (nInstVars * sizeof(OBJ));
+		objSize = __qSize(addr) - nInstBytes;
+		addrPtr = (char *)__InstPtr(addr) + nInstBytes;
+		if (objSize < alen)
+		    goto bad;
+
+		/*
+		 * extract the datagrams address
+		 */
+		memcpy(addrPtr, (char *)&sa, alen);
+		addrLen = __MKSMALLINT(alen);
+	    }
+	}
+	if (n < 0) {
+	    error = __INST(lastErrorNumber) = __MKSMALLINT(errno);
+	}
+	nReceived = __MKSMALLINT(n);
     }
 #endif
 bad: ;
 %}.
     error notNil ifTrue:[
-        ^ self readError:error.
+	^ self readError:error.
     ].
 
     nReceived notNil ifTrue:[
-        addrLen notNil ifTrue:[
-            (addr == aSocketAddress) ifFalse:[
-                self obsoleteFeatureWarning:'please use a socketAddress argument'.
-
-                "can be a ByteArray for backward compatibility"
-                aSocketAddress replaceFrom:1 to:addrLen with:(addr hostAddress).
-            ].
-        ].
-        ^ nReceived
+	addrLen notNil ifTrue:[
+	    (addr == aSocketAddress) ifFalse:[
+		self obsoleteFeatureWarning:'please use a socketAddress argument'.
+
+		"can be a ByteArray for backward compatibility"
+		aSocketAddress replaceFrom:1 to:addrLen with:(addr hostAddress).
+	    ].
+	].
+	^ nReceived
     ].
     "
      arrive here if you try to receive into an invalid buffer
@@ -2772,68 +2772,68 @@
     if ((fp != nil)
      && __isSmallInteger(startIndex)
      && __isSmallInteger(nBytes)) {
-        SOCKET sock;
-        INT objSize, n, offs;
-        char *extPtr;
-        int _flags = __longIntVal(flags);
-        unsigned long norder;
-        unsigned char *buffer, *allocatedBuffer = NULL;
-
-        sock = SOCKET_FROM_FILE_OBJECT(fp);
-
-        if (! setupBufferParameters(aDataBuffer, startIndex, &extPtr, &offs, &objSize)) goto bad;
-        if (__isSmallInteger(nBytes)) {
-            if (__intVal(nBytes) < objSize) {
-                objSize = __intVal(nBytes);
-            }
-        }
+	SOCKET sock;
+	INT objSize, n, offs;
+	char *extPtr;
+	int _flags = __longIntVal(flags);
+	unsigned long norder;
+	unsigned char *buffer, *allocatedBuffer = NULL;
+
+	sock = SOCKET_FROM_FILE_OBJECT(fp);
+
+	if (! setupBufferParameters(aDataBuffer, startIndex, &extPtr, &offs, &objSize)) goto bad;
+	if (__isSmallInteger(nBytes)) {
+	    if (__intVal(nBytes) < objSize) {
+		objSize = __intVal(nBytes);
+	    }
+	}
 
 # ifdef DGRAM_DEBUG
-        console_printf("sending %d bytes ...\n", nBytes);
+	console_printf("sending %d bytes ...\n", nBytes);
 # endif
 
 #ifdef DO_WRAP_CALLS
-        if (extPtr) {
-            buffer = extPtr + offs;
-        } else {
-            allocatedBuffer = buffer = (char *)malloc(objSize);
-            memcpy(allocatedBuffer, (char *)__InstPtr(aDataBuffer) + offs, objSize);
-        }
-
-        do {
-            __threadErrno = 0;
-            n = (INT)STX_WSA_NOINT_CALL4("send", send, sock, buffer, objSize, _flags);
-        } while ((n < 0) && (__threadErrno == EINTR));
-        if (n < 0) {
-            errno = __threadErrno;
-        }
-
-        if (allocatedBuffer) {
-            free(allocatedBuffer);
-        }
+	if (extPtr) {
+	    buffer = extPtr + offs;
+	} else {
+	    allocatedBuffer = buffer = (char *)malloc(objSize);
+	    memcpy(allocatedBuffer, (char *)__InstPtr(aDataBuffer) + offs, objSize);
+	}
+
+	do {
+	    __threadErrno = 0;
+	    n = (INT)STX_WSA_NOINT_CALL4("send", send, sock, buffer, objSize, _flags);
+	} while ((n < 0) && (__threadErrno == EINTR));
+	if (n < 0) {
+	    errno = __threadErrno;
+	}
+
+	if (allocatedBuffer) {
+	    free(allocatedBuffer);
+	}
 #else
-        __BEGIN_INTERRUPTABLE__
-        do {
-            if (extPtr) {
-                n = send(sock, extPtr + offs, objSize, _flags);
-            } else {
-                n = send(sock, (char *)__InstPtr(aDataBuffer) + offs, objSize, _flags);
-            }
-        } while ((n < 0) && (errno == EINTR));
-        __END_INTERRUPTABLE__
+	__BEGIN_INTERRUPTABLE__
+	do {
+	    if (extPtr) {
+		n = send(sock, extPtr + offs, objSize, _flags);
+	    } else {
+		n = send(sock, (char *)__InstPtr(aDataBuffer) + offs, objSize, _flags);
+	    }
+	} while ((n < 0) && (errno == EINTR));
+	__END_INTERRUPTABLE__
 #endif
 
-        if (n < 0) {
-            error = __INST(lastErrorNumber) = __MKSMALLINT(errno);
-        } else {
-            RETURN (__MKSMALLINT(n));
-        }
+	if (n < 0) {
+	    error = __INST(lastErrorNumber) = __MKSMALLINT(errno);
+	} else {
+	    RETURN (__MKSMALLINT(n));
+	}
     }
 #endif
 bad: ;
 %}.
     error notNil ifTrue:[
-        self writeError:error.
+	self writeError:error.
     ].
 
     "
@@ -2847,8 +2847,8 @@
 sendTo:aSocketAddress buffer:buffer
     "send datagramm data - fetch address of destination host from
      aSocketAddress, data from aDataBuffer.
-     aDataBuffer must be ByteArray-like. 
-     aSocketAddress must be a valid SocketAddress for my domain 
+     aDataBuffer must be ByteArray-like.
+     aSocketAddress must be a valid SocketAddress for my domain
      (i.e. for IPv4, an IPSocketAddress).
      For backward compatibility, a ByteArray is still supported in aSocketAddress
      (i.e. for IPv4, a 4-byte byteArray).
@@ -2862,8 +2862,8 @@
 sendTo:aSocketAddress buffer:buffer start:startIndex for:count
     "send datagramm data - fetch address of destination host from
      aSocketAddress, data from aDataBuffer.
-     aDataBuffer must be ByteArray-like. 
-     aSocketAddress must be a valid SocketAddress for my domain 
+     aDataBuffer must be ByteArray-like.
+     aSocketAddress must be a valid SocketAddress for my domain
      (i.e. for IPv4, an IPSocketAddress).
      For backward compatibility, a ByteArray is still supported in aSocketAddress
      (i.e. for IPv4, a 4-byte byteArray).
@@ -2878,8 +2878,8 @@
     "send datagramm data - fetch address of destination host from
      aSocketAddress, data from aDataBuffer starting at startIndex,
      sending count bytes.
-     aDataBuffer must be ByteArray-like. 
-     aSocketAddress must be a valid SocketAddress for my domain 
+     aDataBuffer must be ByteArray-like.
+     aSocketAddress must be a valid SocketAddress for my domain
      (i.e. for IPv4, an IPSocketAddress).
      For backward compatibility, a ByteArray is still supported in aSocketAddress
      (i.e. for IPv4, a 4-byte byteArray).
@@ -2888,16 +2888,16 @@
     |domainClass addr error|
 
     aSocketAddress isSocketAddress ifTrue:[
-        addr := aSocketAddress.
+	addr := aSocketAddress.
     ] ifFalse:[
-        aSocketAddress isByteArray ifFalse:[
-            ^ self error:'bad socketAddress argument'
-        ].
-        domainClass := self class socketAddressClassForDomain:domain.
-        domainClass isNil ifTrue:[
-            ^ self error:'invalid (unsupported) domain'.
-        ].
-        addr := domainClass hostAddress:aSocketAddress.
+	aSocketAddress isByteArray ifFalse:[
+	    ^ self error:'bad socketAddress argument'
+	].
+	domainClass := self class socketAddressClassForDomain:domain.
+	domainClass isNil ifTrue:[
+	    ^ self error:'invalid (unsupported) domain'.
+	].
+	addr := domainClass hostAddress:aSocketAddress.
     ].
 %{
 #ifndef NO_SOCKET
@@ -2906,90 +2906,90 @@
     if ((fp != nil)
      && __isSmallInteger(startIndex)
      && __isSmallInteger(nBytes)) {
-        SOCKET sock;
-        INT objSize;
-        struct sockaddr *sockaddr_ptr;
-        union sockaddr_u sa;
-        socklen_t sockaddr_size, alen = 0;
-        INT sockAddrOffs;
-        INT n, offs;
-        char *extPtr;
-        int _flags = __longIntVal(flags);
-        unsigned long norder;
-        unsigned char *buffer;
-        unsigned char *allocatedBuffer = NULL;
-
-        sock = SOCKET_FROM_FILE_OBJECT(fp);
-
-        if (! __isBytes(addr)) {
-            sockaddr_size = 0;
-            sockaddr_ptr = (struct sockaddr *)0;
-        } else {
-            int nIndex;
-            OBJ cls;
-
-            sockAddrOffs = 0;
-            if ((cls = __qClass(addr)) != @global(ByteArray))
-                sockAddrOffs += __OBJS2BYTES__(__intVal(__ClassInstPtr(cls)->c_ninstvars));
-            nIndex = __qSize(addr) - OHDR_SIZE;
-            sockaddr_size = nIndex - sockAddrOffs;
-            if (sockaddr_size > sizeof(sa)) {
-                console_fprintf(stderr, "Socket [warning]: bad socketAddr\n");
-                goto bad;
-            }
-            memcpy(&sa, (__byteArrayVal(addr) + sockAddrOffs), sockaddr_size);
-            sockaddr_ptr = (struct sockaddr *)(&sa);
-        }
-
-        if (! setupBufferParameters(aDataBuffer, startIndex, &extPtr, &offs, &objSize)) goto bad;
-        if (__isSmallInteger(nBytes)) {
-            if (__intVal(nBytes) < objSize) {
-                objSize = __intVal(nBytes);
-            }
-        }
+	SOCKET sock;
+	INT objSize;
+	struct sockaddr *sockaddr_ptr;
+	union sockaddr_u sa;
+	socklen_t sockaddr_size, alen = 0;
+	INT sockAddrOffs;
+	INT n, offs;
+	char *extPtr;
+	int _flags = __longIntVal(flags);
+	unsigned long norder;
+	unsigned char *buffer;
+	unsigned char *allocatedBuffer = NULL;
+
+	sock = SOCKET_FROM_FILE_OBJECT(fp);
+
+	if (! __isBytes(addr)) {
+	    sockaddr_size = 0;
+	    sockaddr_ptr = (struct sockaddr *)0;
+	} else {
+	    int nIndex;
+	    OBJ cls;
+
+	    sockAddrOffs = 0;
+	    if ((cls = __qClass(addr)) != @global(ByteArray))
+		sockAddrOffs += __OBJS2BYTES__(__intVal(__ClassInstPtr(cls)->c_ninstvars));
+	    nIndex = __qSize(addr) - OHDR_SIZE;
+	    sockaddr_size = nIndex - sockAddrOffs;
+	    if (sockaddr_size > sizeof(sa)) {
+		console_fprintf(stderr, "Socket [warning]: bad socketAddr\n");
+		goto bad;
+	    }
+	    memcpy(&sa, (__byteArrayVal(addr) + sockAddrOffs), sockaddr_size);
+	    sockaddr_ptr = (struct sockaddr *)(&sa);
+	}
+
+	if (! setupBufferParameters(aDataBuffer, startIndex, &extPtr, &offs, &objSize)) goto bad;
+	if (__isSmallInteger(nBytes)) {
+	    if (__intVal(nBytes) < objSize) {
+		objSize = __intVal(nBytes);
+	    }
+	}
 
 #ifdef DO_WRAP_CALLS
-        if (extPtr) {
-            buffer = extPtr + offs;
-        } else {
-            allocatedBuffer = buffer = (char *)malloc(objSize);
-            memcpy(allocatedBuffer, (char *)__InstPtr(aDataBuffer) + offs, objSize);
-        }
-
-        do {
-            __threadErrno = 0;
-            n = (INT)STX_WSA_NOINT_CALL6("sendto", sendto, sock, buffer, objSize, _flags, sockaddr_ptr, sockaddr_size);
-        } while ((n < 0) && (__threadErrno == EINTR));
-        if (n < 0) {
-            errno = __threadErrno;
-        }
-
-        if (allocatedBuffer) {
-            free(allocatedBuffer);
-        }
+	if (extPtr) {
+	    buffer = extPtr + offs;
+	} else {
+	    allocatedBuffer = buffer = (char *)malloc(objSize);
+	    memcpy(allocatedBuffer, (char *)__InstPtr(aDataBuffer) + offs, objSize);
+	}
+
+	do {
+	    __threadErrno = 0;
+	    n = (INT)STX_WSA_NOINT_CALL6("sendto", sendto, sock, buffer, objSize, _flags, sockaddr_ptr, sockaddr_size);
+	} while ((n < 0) && (__threadErrno == EINTR));
+	if (n < 0) {
+	    errno = __threadErrno;
+	}
+
+	if (allocatedBuffer) {
+	    free(allocatedBuffer);
+	}
 #else
-        __BEGIN_INTERRUPTABLE__
-        do {
-            if (extPtr) {
-                n = sendto(sock, extPtr + offs, objSize, _flags, sockaddr_ptr, sockaddr_size);
-            } else {
-                n = sendto(sock, (char *)__InstPtr(aDataBuffer) + offs, objSize, _flags, sockaddr_ptr, sockaddr_size);
-            }
-        } while ((n < 0) && (errno == EINTR));
-        __END_INTERRUPTABLE__
+	__BEGIN_INTERRUPTABLE__
+	do {
+	    if (extPtr) {
+		n = sendto(sock, extPtr + offs, objSize, _flags, sockaddr_ptr, sockaddr_size);
+	    } else {
+		n = sendto(sock, (char *)__InstPtr(aDataBuffer) + offs, objSize, _flags, sockaddr_ptr, sockaddr_size);
+	    }
+	} while ((n < 0) && (errno == EINTR));
+	__END_INTERRUPTABLE__
 #endif
 
-        if (n < 0) {
-            error = __INST(lastErrorNumber) = __MKSMALLINT(errno);
-        } else {
-            RETURN (__MKSMALLINT(n));
-        }
+	if (n < 0) {
+	    error = __INST(lastErrorNumber) = __MKSMALLINT(errno);
+	} else {
+	    RETURN (__MKSMALLINT(n));
+	}
     }
 #endif
 bad: ;
 %}.
     error notNil ifTrue:[
-        self writeError:error.
+	self writeError:error.
     ].
 
     "
@@ -3098,12 +3098,12 @@
     |serverSocketHandle addr domainClass newHandle err|
 
     handle notNil ifTrue:[
-        ^ self errorAlreadyOpen.
+	^ self errorAlreadyOpen.
     ].
     serverSocketHandle := aServerSocket fileHandle.
     serverSocketHandle isNil ifTrue:[
-        "socket is not open"
-        ^ self errorNotOpen
+	"socket is not open"
+	^ self errorNotOpen
     ].
 
     domain := aServerSocket domain.
@@ -3112,7 +3112,7 @@
     "unix domain sockets do not return a valid peer name on accept"
     domainClass := self class socketAddressClassForDomain:domain.
     domainClass isNil ifTrue:[
-        ^ self error:'invalid (unsupported) domain'.
+	^ self error:'invalid (unsupported) domain'.
     ].
     addr := domainClass new.
     newHandle := OperatingSystem socketAccessor new.
@@ -3134,70 +3134,70 @@
 
 # if defined(O_NONBLOCK) && defined(SET_NDELAY)
     if (blocking == false) {
-        flags = fcntl(serverSocket, F_GETFL);
-        fcntl(serverSocket, F_SETFL, flags | O_NONBLOCK);
+	flags = fcntl(serverSocket, F_GETFL);
+	fcntl(serverSocket, F_SETFL, flags | O_NONBLOCK);
     }
 # endif
 
 # ifdef DO_WRAP_CALLS
     do {
-        __threadErrno = 0;
-        alen = sizeof(sa);
-        newSock = (SOCKET)STX_WSA_CALL3("accept", accept, serverSocket, &sa, &alen);
+	__threadErrno = 0;
+	alen = sizeof(sa);
+	newSock = (SOCKET)STX_WSA_CALL3("accept", accept, serverSocket, &sa, &alen);
     } while ((newSock < 0) && (__threadErrno == EINTR));
     if (newSock == -1) {
-        err = __MKSMALLINT(__threadErrno);
+	err = __MKSMALLINT(__threadErrno);
     }
 # else
     __BEGIN_INTERRUPTABLE__
     do {
-        alen = sizeof(sa);
-        newSock = accept(serverSocket, (struct sockaddr *) &sa, &alen);
+	alen = sizeof(sa);
+	newSock = accept(serverSocket, (struct sockaddr *) &sa, &alen);
     } while ((newSock < 0) && (errno == EINTR));
     __END_INTERRUPTABLE__
     if (newSock == -1) {
-        err = __MKSMALLINT(errno);
+	err = __MKSMALLINT(errno);
     }
 # endif
     DBGFPRINTF((stderr, "SOCKET: accept newSock=%d\n", newSock));
 
 # if defined(O_NDELAY) && defined(SET_NDELAY)
     if (blocking == false) {
-        fcntl(serverSocket, F_SETFL, flags);
+	fcntl(serverSocket, F_SETFL, flags);
     }
 # endif
     if (newSock == -1) {
-        DBGPRINTF(("SOCKET: accept call failed errno=%d\n", err));
-        goto out;
+	DBGPRINTF(("SOCKET: accept call failed errno=%d\n", (int)(__intVal(err))));
+	goto out;
     }
 
     if (__isNonNilObject(addr)) {
-        OBJ oClass = __qClass(addr);
-        int nInstVars, nInstBytes, objSize;
-        char *addrP;
-
-        if (! __isBytes(addr)) {
-            DBGPRINTF(("SOCKET: bad addr\n"));
-            closesocket(newSock);
-            err = @symbol(badAddressArg);
-            goto out;
-        }
-
-        nInstVars = __intVal(__ClassInstPtr(oClass)->c_ninstvars);
-        nInstBytes = OHDR_SIZE + (nInstVars * sizeof(OBJ));
-        objSize = __qSize(addr) - nInstBytes;
-        addrP = (char *)__InstPtr(addr) + nInstBytes;
-        if (objSize < alen) {
-            DBGPRINTF(("SOCKET: bad addr\n"));
-            closesocket(newSock);
-            err = @symbol(badAddressArgLen);
-            goto out;
-        }
-
-        /*
-         * extract the partners address
-         */
-        memcpy(addrP, (char *)&sa, alen);
+	OBJ oClass = __qClass(addr);
+	int nInstVars, nInstBytes, objSize;
+	char *addrP;
+
+	if (! __isBytes(addr)) {
+	    DBGPRINTF(("SOCKET: bad addr\n"));
+	    closesocket(newSock);
+	    err = @symbol(badAddressArg);
+	    goto out;
+	}
+
+	nInstVars = __intVal(__ClassInstPtr(oClass)->c_ninstvars);
+	nInstBytes = OHDR_SIZE + (nInstVars * sizeof(OBJ));
+	objSize = __qSize(addr) - nInstBytes;
+	addrP = (char *)__InstPtr(addr) + nInstBytes;
+	if (objSize < alen) {
+	    DBGPRINTF(("SOCKET: bad addr\n"));
+	    closesocket(newSock);
+	    err = @symbol(badAddressArgLen);
+	    goto out;
+	}
+
+	/*
+	 * extract the partners address
+	 */
+	memcpy(addrP, (char *)&sa, alen);
     }
 
     /*
@@ -3215,19 +3215,19 @@
 # else // ! __win32__
     fp = fdopen(newSock, "r+");
     if (! fp) {
-        DBGPRINTF(("SOCKET: fdopen call failed\n"));
-        err = __MKSMALLINT(errno);
-        closesocket(newSock);
-        DBGFPRINTF((stderr, "SOCKET: close (fdopen failed) (%d)\n", newSock));
-        goto out;
+	DBGPRINTF(("SOCKET: fdopen call failed\n"));
+	err = __MKSMALLINT(errno);
+	closesocket(newSock);
+	DBGFPRINTF((stderr, "SOCKET: close (fdopen failed) (%d)\n", newSock));
+	goto out;
     }
 # endif // ! __win32__
 
     if ((@global(FileOpenTrace) == true) || __debugging__) {
 # ifdef __win32__
-        console_fprintf(stderr, "fdopen [Socket accept] -> fd: %d (H: %"_lx_")\n", _fd, (INT)newSock);
+	console_fprintf(stderr, "fdopen [Socket accept] -> fd: %d (H: %"_lx_")\n", _fd, (INT)newSock);
 # else
-        console_fprintf(stderr, "fdopen [Socket accept] -> %"_lx_" (fd: %d)\n", (INT)fp, newSock);
+	console_fprintf(stderr, "fdopen [Socket accept] -> %"_lx_" (fd: %d)\n", (INT)fp, newSock);
 # endif
     }
 
@@ -3243,10 +3243,10 @@
 %}.
 
     err notNil ifTrue:[
-        err isSymbol ifTrue:[
-            self error:err.
-        ].
-        ^ self reportError:err.
+	err isSymbol ifTrue:[
+	    self error:err.
+	].
+	^ self reportError:err.
     ].
 
     handle := newHandle.
@@ -3266,7 +3266,7 @@
     |ok error|
 
     handle isNil ifTrue:[
-        ^ self errorNotOpen
+	^ self errorNotOpen
     ].
 
 %{  /* STACK: 32000 */
@@ -3274,255 +3274,255 @@
     OBJ fp = __INST(handle);
 
     if (fp != nil) {
-        SOCKET sock = SOCKET_FROM_FILE_OBJECT(fp);
-        int opt = -1;
-        int level = -1;
-        int usize = -1;
-        int ret;
-        union u {
-            BOOL        u_bool;
-            int         u_int;
-            struct linger  u_linger;
+	SOCKET sock = SOCKET_FROM_FILE_OBJECT(fp);
+	int opt = -1;
+	int level = -1;
+	int usize = -1;
+	int ret;
+	union u {
+	    BOOL        u_bool;
+	    int         u_int;
+	    struct linger  u_linger;
 # ifdef IP_ADD_MEMBERSHIP
-            struct ip_mreq u_ip_mreq;
+	    struct ip_mreq u_ip_mreq;
 # endif
 # if defined(SO_RCVTIMEO) || defined(SO_SNDTIMEO)
-            struct timeval u_tv;
+	    struct timeval u_tv;
 # endif
-        } u;
+	} u;
 
 # ifdef IP_ADD_MEMBERSHIP
-        if (option == @symbol(IP_DROP_MEMBERSHIP)) {
-            opt = IP_DROP_MEMBERSHIP;
-            goto dropOrAdd;
-        }
-        if (option == @symbol(IP_ADD_MEMBERSHIP)) {
-            /* add membership to a multicast group */
-            opt = IP_ADD_MEMBERSHIP;
+	if (option == @symbol(IP_DROP_MEMBERSHIP)) {
+	    opt = IP_DROP_MEMBERSHIP;
+	    goto dropOrAdd;
+	}
+	if (option == @symbol(IP_ADD_MEMBERSHIP)) {
+	    /* add membership to a multicast group */
+	    opt = IP_ADD_MEMBERSHIP;
 dropOrAdd:
-            level = IPPROTO_IP;
-            usize = sizeof(u.u_ip_mreq);
-            if (__isByteArrayLike(arg1) && __isByteArrayLike(arg2)) {
-                memcpy(&u.u_ip_mreq.imr_multiaddr, __byteArrayVal(arg1), sizeof(u.u_ip_mreq.imr_multiaddr));
-                memcpy(&u.u_ip_mreq.imr_interface, __byteArrayVal(arg2), sizeof(u.u_ip_mreq.imr_interface));
-                // once we use the struct ip_mreqn:
-                // u.u_ip_mreqn.imr_ifindex = 0;
-            }
-            else
-                goto argError;
-        }
+	    level = IPPROTO_IP;
+	    usize = sizeof(u.u_ip_mreq);
+	    if (__isByteArrayLike(arg1) && __isByteArrayLike(arg2)) {
+		memcpy(&u.u_ip_mreq.imr_multiaddr, __byteArrayVal(arg1), sizeof(u.u_ip_mreq.imr_multiaddr));
+		memcpy(&u.u_ip_mreq.imr_interface, __byteArrayVal(arg2), sizeof(u.u_ip_mreq.imr_interface));
+		// once we use the struct ip_mreqn:
+		// u.u_ip_mreqn.imr_ifindex = 0;
+	    }
+	    else
+		goto argError;
+	}
 # endif /* IP_ADD_MEMBERSHIP */
 
 # ifdef IP_TTL
-        if (option == @symbol(IP_TTL)) {
-            opt = IP_TTL;
-            level = IPPROTO_IP;
-            usize = sizeof(u.u_int);
-            if (__isSmallInteger(arg1))u.u_int = __intVal(arg1);
-            else goto argError;
-        }
+	if (option == @symbol(IP_TTL)) {
+	    opt = IP_TTL;
+	    level = IPPROTO_IP;
+	    usize = sizeof(u.u_int);
+	    if (__isSmallInteger(arg1))u.u_int = __intVal(arg1);
+	    else goto argError;
+	}
 # endif /* IP_TTL */
 
 # ifdef IP_MULTICAST_TTL
-        if (option == @symbol(IP_MULTICAST_TTL)) {
-            opt = IP_MULTICAST_TTL;
-            level = IPPROTO_IP;
-            usize = sizeof(u.u_int);
-            if (__isSmallInteger(arg1))u.u_int = __intVal(arg1);
-            else goto argError;
-        }
+	if (option == @symbol(IP_MULTICAST_TTL)) {
+	    opt = IP_MULTICAST_TTL;
+	    level = IPPROTO_IP;
+	    usize = sizeof(u.u_int);
+	    if (__isSmallInteger(arg1))u.u_int = __intVal(arg1);
+	    else goto argError;
+	}
 # endif /* IP_TTL */
 
 
 # ifdef SO_BROADCAST
-        if (option == @symbol(SO_BROADCAST)) {
-            /* Enables transmission and receipt of broadcast messages on the socket. */
-            opt = SO_BROADCAST;
-            level = SOL_SOCKET;
-            usize = sizeof(u.u_bool);
-            if (arg1 == true) u.u_bool = TRUE;
-            else if (arg1 == false) u.u_bool = FALSE;
-            else goto argError;
-        }
+	if (option == @symbol(SO_BROADCAST)) {
+	    /* Enables transmission and receipt of broadcast messages on the socket. */
+	    opt = SO_BROADCAST;
+	    level = SOL_SOCKET;
+	    usize = sizeof(u.u_bool);
+	    if (arg1 == true) u.u_bool = TRUE;
+	    else if (arg1 == false) u.u_bool = FALSE;
+	    else goto argError;
+	}
 # endif /* SO_BROADCAST */
 
 # ifdef SO_CONDITIONAL
 #  if 0
-        if (option == @symbol(SO_CONDITIONAL)) {
-            /* Enables sockets to delay the acknowledgment of a connection until after the WSAAccept condition function is called. */
-            opt = SO_CONDITIONAL;
-            level = SOL_SOCKET;
-            usize = sizeof(u.u_bool);
-            if (arg1 == true) u.u_bool = TRUE;
-            else if (arg1 == false) u.u_bool = FALSE;
-            else goto argError;
-        }
+	if (option == @symbol(SO_CONDITIONAL)) {
+	    /* Enables sockets to delay the acknowledgment of a connection until after the WSAAccept condition function is called. */
+	    opt = SO_CONDITIONAL;
+	    level = SOL_SOCKET;
+	    usize = sizeof(u.u_bool);
+	    if (arg1 == true) u.u_bool = TRUE;
+	    else if (arg1 == false) u.u_bool = FALSE;
+	    else goto argError;
+	}
 #  endif
 # endif /* SO_CONDITIONAL */
 
 # ifdef SO_DEBUG
-        if (option == @symbol(SO_DEBUG)) {
-            /* Records debugging information. */
-            opt = SO_DEBUG;
-            level = SOL_SOCKET;
-            usize = sizeof(u.u_bool);
-            if (arg1 == true) u.u_bool = TRUE;
-            else if (arg1 == false) u.u_bool = FALSE;
-            else goto argError;
-        }
+	if (option == @symbol(SO_DEBUG)) {
+	    /* Records debugging information. */
+	    opt = SO_DEBUG;
+	    level = SOL_SOCKET;
+	    usize = sizeof(u.u_bool);
+	    if (arg1 == true) u.u_bool = TRUE;
+	    else if (arg1 == false) u.u_bool = FALSE;
+	    else goto argError;
+	}
 # endif /* SO_DEBUG */
 
 # ifdef SO_DONTLINGER
-        if (option == @symbol(SO_DONTLINGER)) {
-            /* Does not block close waiting for unsent data to be sent.
-               Setting this option is equivalent to setting SO_LINGER with l_onoff set to zero. */
-            opt = SO_DONTLINGER;
-            level = SOL_SOCKET;
-            usize = sizeof(u.u_bool);
-            if (arg1 == true) u.u_bool = TRUE;
-            else if (arg1 == false) u.u_bool = FALSE;
-            else goto argError;
-        }
+	if (option == @symbol(SO_DONTLINGER)) {
+	    /* Does not block close waiting for unsent data to be sent.
+	       Setting this option is equivalent to setting SO_LINGER with l_onoff set to zero. */
+	    opt = SO_DONTLINGER;
+	    level = SOL_SOCKET;
+	    usize = sizeof(u.u_bool);
+	    if (arg1 == true) u.u_bool = TRUE;
+	    else if (arg1 == false) u.u_bool = FALSE;
+	    else goto argError;
+	}
 # endif /* SO_DONTLINGER */
 
 # ifdef SO_DONTROUTE
-        if (option == @symbol(SO_DONTROUTE)) {
-            /* Does not route: sends directly to interface.
-               Succeeds but is ignored on AF_INET sockets;
-               fails on AF_INET6 sockets with WSAENOPROTOOPT.
-               Not supported on ATM sockets (results in an error). */
-            opt = SO_DONTROUTE;
-            level = SOL_SOCKET;
-            usize = sizeof(u.u_bool);
-            if (arg1 == true) u.u_bool = TRUE;
-            else if (arg1 == false) u.u_bool = FALSE;
-            else goto argError;
-        }
+	if (option == @symbol(SO_DONTROUTE)) {
+	    /* Does not route: sends directly to interface.
+	       Succeeds but is ignored on AF_INET sockets;
+	       fails on AF_INET6 sockets with WSAENOPROTOOPT.
+	       Not supported on ATM sockets (results in an error). */
+	    opt = SO_DONTROUTE;
+	    level = SOL_SOCKET;
+	    usize = sizeof(u.u_bool);
+	    if (arg1 == true) u.u_bool = TRUE;
+	    else if (arg1 == false) u.u_bool = FALSE;
+	    else goto argError;
+	}
 # endif /* SO_DONTROUTE */
 
 #if defined(IPPROTO_TCP) && defined(TCP_NODELAY)
-        if (option == @symbol(TCP_NODELAY)) {
-            /* enable/disable TCP_NODELAY (i.e. disable/enable the Nagle algorithm) */
-            opt = TCP_NODELAY;
-            level = IPPROTO_TCP;
-            usize = sizeof(u.u_bool);
-            if (arg1 == true) u.u_bool = TRUE;
-            else if (arg1 == false) u.u_bool = FALSE;
-            else goto argError;
-        }
+	if (option == @symbol(TCP_NODELAY)) {
+	    /* enable/disable TCP_NODELAY (i.e. disable/enable the Nagle algorithm) */
+	    opt = TCP_NODELAY;
+	    level = IPPROTO_TCP;
+	    usize = sizeof(u.u_bool);
+	    if (arg1 == true) u.u_bool = TRUE;
+	    else if (arg1 == false) u.u_bool = FALSE;
+	    else goto argError;
+	}
 # endif /* TCP_NODELAY */
 
 # ifdef SO_KEEPALIVE
-        if (option == @symbol(SO_KEEPALIVE)) {
-            /* Sends keep-alives. Not supported on ATM sockets (results in an error). */
-            opt = SO_KEEPALIVE;
-            level = SOL_SOCKET;
-            usize = sizeof(u.u_bool);
-            if (arg1 == true) u.u_bool = TRUE;
-            else if (arg1 == false) u.u_bool = FALSE;
-            else goto argError;
-        }
+	if (option == @symbol(SO_KEEPALIVE)) {
+	    /* Sends keep-alives. Not supported on ATM sockets (results in an error). */
+	    opt = SO_KEEPALIVE;
+	    level = SOL_SOCKET;
+	    usize = sizeof(u.u_bool);
+	    if (arg1 == true) u.u_bool = TRUE;
+	    else if (arg1 == false) u.u_bool = FALSE;
+	    else goto argError;
+	}
 # endif /* SO_KEEPALIVE */
 
 # ifdef SO_LINGER
-        if (option == @symbol(SO_LINGER)) {
-            /* Lingers on close if unsent data is present. */
-            opt = SO_LINGER;
-            level = SOL_SOCKET;
-            usize = sizeof(u.u_linger);
-            if (arg1 == true) u.u_linger.l_onoff = TRUE;
-            else if (arg1 == false) u.u_linger.l_onoff = FALSE;
-            else goto argError;
-            if (arg2 == nil) u.u_linger.l_linger = 0;
-            else if (__isSmallInteger(arg2))u.u_linger.l_linger = __intVal(arg2);
-            else goto argError;
-            DBGPRINTF(("SOCKET: SO_LINGER %d %d\n", u.u_linger.l_onoff, u.u_linger.l_linger));
-        }
+	if (option == @symbol(SO_LINGER)) {
+	    /* Lingers on close if unsent data is present. */
+	    opt = SO_LINGER;
+	    level = SOL_SOCKET;
+	    usize = sizeof(u.u_linger);
+	    if (arg1 == true) u.u_linger.l_onoff = TRUE;
+	    else if (arg1 == false) u.u_linger.l_onoff = FALSE;
+	    else goto argError;
+	    if (arg2 == nil) u.u_linger.l_linger = 0;
+	    else if (__isSmallInteger(arg2))u.u_linger.l_linger = __intVal(arg2);
+	    else goto argError;
+	    DBGPRINTF(("SOCKET: SO_LINGER %d %d\n", u.u_linger.l_onoff, u.u_linger.l_linger));
+	}
 # endif /* SO_LINGER */
 
 # ifdef SO_OOBINLINE
-        if (option == @symbol(SO_OOBINLINE)) {
-            /* Receives OOB data in the normal data stream. */
-            opt = SO_OOBINLINE;
-            level = SOL_SOCKET;
-            usize = sizeof(u.u_bool);
-            if (arg1 == true) u.u_bool = TRUE;
-            else if (arg1 == false) u.u_bool = FALSE;
-            else goto argError;
-        }
+	if (option == @symbol(SO_OOBINLINE)) {
+	    /* Receives OOB data in the normal data stream. */
+	    opt = SO_OOBINLINE;
+	    level = SOL_SOCKET;
+	    usize = sizeof(u.u_bool);
+	    if (arg1 == true) u.u_bool = TRUE;
+	    else if (arg1 == false) u.u_bool = FALSE;
+	    else goto argError;
+	}
 # endif /* SO_OOBINLINE */
 
 # ifdef SO_RCVBUF
-        if (option == @symbol(SO_RCVBUF)) {
-            /* Specifies the total per-socket buffer space reserved for receives.
-               This is unrelated to SO_MAX_MSG_SIZE or the size of a TCP window. */
-            opt = SO_RCVBUF;
-            level = SOL_SOCKET;
-            usize = sizeof(u.u_int);
-            if (__isSmallInteger(arg1))u.u_int = __intVal(arg1);
-            else goto argError;
-        }
+	if (option == @symbol(SO_RCVBUF)) {
+	    /* Specifies the total per-socket buffer space reserved for receives.
+	       This is unrelated to SO_MAX_MSG_SIZE or the size of a TCP window. */
+	    opt = SO_RCVBUF;
+	    level = SOL_SOCKET;
+	    usize = sizeof(u.u_int);
+	    if (__isSmallInteger(arg1))u.u_int = __intVal(arg1);
+	    else goto argError;
+	}
 # endif /* SO_RCVBUF */
 
 # ifdef SO_SNDBUF
-        if (option == @symbol(SO_SNDBUF)) {
-            /* Specifies the total per-socket buffer space reserved for sends.
-               This is unrelated to SO_MAX_MSG_SIZE or the size of a TCP window. */
-            opt = SO_SNDBUF;
-            level = SOL_SOCKET;
-            usize = sizeof(u.u_int);
-            if (__isSmallInteger(arg1))u.u_int = __intVal(arg1);
-            else goto argError;
-        }
+	if (option == @symbol(SO_SNDBUF)) {
+	    /* Specifies the total per-socket buffer space reserved for sends.
+	       This is unrelated to SO_MAX_MSG_SIZE or the size of a TCP window. */
+	    opt = SO_SNDBUF;
+	    level = SOL_SOCKET;
+	    usize = sizeof(u.u_int);
+	    if (__isSmallInteger(arg1))u.u_int = __intVal(arg1);
+	    else goto argError;
+	}
 # endif /* SO_SNDBUF */
 
 # ifdef SO_REUSEADDR
-        if (option == @symbol(SO_REUSEADDR)) {
-            /* Allows the socket to be bound to an address that is already in use.  */
-            opt = SO_REUSEADDR;
-            level = SOL_SOCKET;
-            usize = sizeof(u.u_bool);
-            if (arg1 == true) u.u_bool = TRUE;
-            else if (arg1 == false) u.u_bool = FALSE;
-            else goto argError;
-        }
+	if (option == @symbol(SO_REUSEADDR)) {
+	    /* Allows the socket to be bound to an address that is already in use.  */
+	    opt = SO_REUSEADDR;
+	    level = SOL_SOCKET;
+	    usize = sizeof(u.u_bool);
+	    if (arg1 == true) u.u_bool = TRUE;
+	    else if (arg1 == false) u.u_bool = FALSE;
+	    else goto argError;
+	}
 # endif /* SO_OOBINLINE */
 
 # ifdef SO_EXCLUSIVEADDRUSE
-        if (option == @symbol(SO_EXCLUSIVEADDRUSE)) {
-            /* Enables a socket to be bound for exclusive access.
-               Does not require administrative privilege.  */
-            opt = SO_EXCLUSIVEADDRUSE;
-            level = SOL_SOCKET;
-            usize = sizeof(u.u_bool);
-            if (arg1 == true) u.u_bool = TRUE;
-            else if (arg1 == false) u.u_bool = FALSE;
-            else goto argError;
-        }
+	if (option == @symbol(SO_EXCLUSIVEADDRUSE)) {
+	    /* Enables a socket to be bound for exclusive access.
+	       Does not require administrative privilege.  */
+	    opt = SO_EXCLUSIVEADDRUSE;
+	    level = SOL_SOCKET;
+	    usize = sizeof(u.u_bool);
+	    if (arg1 == true) u.u_bool = TRUE;
+	    else if (arg1 == false) u.u_bool = FALSE;
+	    else goto argError;
+	}
 # endif /* SO_OOBINLINE */
 
 # ifdef SO_RCVTIMEO
-        if ((option == @symbol(SO_RCVTIMEO))
-         && __isSmallInteger(arg1)
-         && __isSmallInteger(arg2)) {
-            opt = SO_RCVTIMEO;
-            level = SOL_SOCKET;
-            u.u_tv.tv_sec = __intVal(arg1);
-            u.u_tv.tv_usec = __intVal(arg2);
-            usize = sizeof(u.u_tv);
-        }
+	if ((option == @symbol(SO_RCVTIMEO))
+	 && __isSmallInteger(arg1)
+	 && __isSmallInteger(arg2)) {
+	    opt = SO_RCVTIMEO;
+	    level = SOL_SOCKET;
+	    u.u_tv.tv_sec = __intVal(arg1);
+	    u.u_tv.tv_usec = __intVal(arg2);
+	    usize = sizeof(u.u_tv);
+	}
 # endif /* SO_RCVTIMEO */
 
 # ifdef SO_SNDTIMEO
-        if ((option == @symbol(SO_SNDTIMEO))
-         && __isSmallInteger(arg1)
-         && __isSmallInteger(arg2)) {
-            opt = SO_SNDTIMEO;
-            level = SOL_SOCKET;
-            u.u_tv.tv_sec = __intVal(arg1);
-            u.u_tv.tv_usec = __intVal(arg2);
-            usize = sizeof(u.u_tv);
-        }
+	if ((option == @symbol(SO_SNDTIMEO))
+	 && __isSmallInteger(arg1)
+	 && __isSmallInteger(arg2)) {
+	    opt = SO_SNDTIMEO;
+	    level = SOL_SOCKET;
+	    u.u_tv.tv_sec = __intVal(arg1);
+	    u.u_tv.tv_usec = __intVal(arg2);
+	    usize = sizeof(u.u_tv);
+	}
 # endif /* SO_SNDTIMEO */
 
 # if !defined(IPV6_V6ONLY) && defined(__win32__)
@@ -3531,39 +3531,39 @@
 # endif
 
 # if defined(IPV6_V6ONLY)
-        if (option == @symbol(IPV6_V6ONLY)) {
-            opt = IPV6_V6ONLY;
-            level = IPPROTO_IPV6;
-            usize = sizeof(u.u_bool);
-            if (arg1 == true) u.u_bool = TRUE;
-            else if (arg1 == false) u.u_bool = FALSE;
-            else goto argError;
+	if (option == @symbol(IPV6_V6ONLY)) {
+	    opt = IPV6_V6ONLY;
+	    level = IPPROTO_IPV6;
+	    usize = sizeof(u.u_bool);
+	    if (arg1 == true) u.u_bool = TRUE;
+	    else if (arg1 == false) u.u_bool = FALSE;
+	    else goto argError;
 #  ifdef __win32__
-            console_fprintf(stderr, "%d %d %d %d\n", level, opt, usize, u.u_int);
+	    console_fprintf(stderr, "%d %d %d %d\n", level, opt, usize, u.u_int);
 #  endif
-        }
+	}
 # endif /* IPV6_V6ONLY */
 
-        if (usize == -1) goto argError;
-
-        ok = (setsockopt(sock, level, opt, (char *)&u, usize) >= 0) ? true : false;
-        if (ok == false) {
+	if (usize == -1) goto argError;
+
+	ok = (setsockopt(sock, level, opt, (char *)&u, usize) >= 0) ? true : false;
+	if (ok == false) {
 # ifdef __win32__
-            error = __mkSmallInteger(WSAGetLastError());
+	    error = __mkSmallInteger(WSAGetLastError());
 # else
-            error = __mkSmallInteger(errno);
+	    error = __mkSmallInteger(errno);
 # endif
-        }
+	}
 
     }
 argError: ;
 #endif /* NO_SOCKET */
 %}.
     ok isNil ifTrue:[
-        self primitiveFailed
+	self primitiveFailed
     ].
     ok ifFalse:[
-        '++++ Info: Socket>>#setSocketOption:... failed. error: ' infoPrint. error infoPrintCR.
+	'++++ Info: Socket>>#setSocketOption:... failed. error: ' infoPrint. error infoPrintCR.
     ].
 !
 
@@ -3615,13 +3615,13 @@
     aStream nextPutAll:' port='.
     self port printOn:aStream.
     peer notNil ifTrue:[
-        aStream nextPutAll:' peer='.
-        peer printOn:aStream.
+	aStream nextPutAll:' peer='.
+	peer printOn:aStream.
     ].
     listening notNil ifTrue:[
-        aStream nextPutAll:' *listening('.
-        listening printOn:aStream.
-        aStream nextPutAll:')*'.
+	aStream nextPutAll:' *listening('.
+	listening printOn:aStream.
+	aStream nextPutAll:')*'.
     ].
     aStream nextPut:$).
 
@@ -4041,17 +4041,17 @@
 linger:anIntegerOrNil
     "set the linger behavior on close:
       anIntegerOrNil == nil: close returns immediately, socket tries
-                             to send buffered data in background.
+			     to send buffered data in background.
       anIntegerOrNil == 0:   close returns immediately, bufferd data is discarded.
       anIntegerOrNil > 0:    close waits this many seconds for buffered data
-                             to be delivered, after this time buffered data is
-                             discarded and close returns with an error.
+			     to be delivered, after this time buffered data is
+			     discarded and close returns with an error.
      (returns false, if unsupported)"
 
     ^ self
-        setSocketOption:#'SO_LINGER'
-        argument:anIntegerOrNil notNil
-        argument:anIntegerOrNil.
+	setSocketOption:#'SO_LINGER'
+	argument:anIntegerOrNil notNil
+	argument:anIntegerOrNil.
 
     "Modified (comment): / 08-02-2019 / 22:33:14 / Claus Gittinger"
 !
@@ -4116,7 +4116,7 @@
     |millis|
 
     handle isNil ifTrue:[
-        ^ self errorNotOpen
+	^ self errorNotOpen
     ].
 %{
 #if defined(SO_RCVTIMEO) && defined(SOL_SOCKET)
@@ -4128,20 +4128,20 @@
 
     len = sizeof(struct timeval);
     if (getsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (void *)&tv, &len) == 0) {
-        __millis = (tv.tv_sec * 1000) + (tv.tv_usec / 1000);
-        millis = __mkSmallInteger(__millis);
+	__millis = (tv.tv_sec * 1000) + (tv.tv_usec / 1000);
+	millis = __mkSmallInteger(__millis);
 # if 0
-        console_fprintf(stderr, "getsockopt -> s:%d us:%d -> millis:%d\n", tv.tv_sec, tv.tv_usec, __millis);
+	console_fprintf(stderr, "getsockopt -> s:%d us:%d -> millis:%d\n", tv.tv_sec, tv.tv_usec, __millis);
 # endif
     } else {
-        console_fprintf(stderr, "Socket [warning]: getsockopt %d failed; errno=%d\n", sock, errno);
+	console_fprintf(stderr, "Socket [warning]: getsockopt %d failed; errno=%d\n", sock, errno);
     }
 #endif
 %}.
     ^ millis
 
     "
-        Socket newTCP receiveTimeout
+	Socket newTCP receiveTimeout
     "
 
     "Modified: / 19-01-2018 / 19:15:17 / stefan"
@@ -4153,54 +4153,54 @@
      (returns false, if unsupported).
 
      From linux manpage:
-          SO_RCVTIMEO and SO_SNDTIMEO
-              Specify  the  receiving  or  sending  timeouts  until reporting an error.  The argument is a
-              struct timeval.  If an input or output function blocks for this period of time, and data has
-              been  sent  or received, the return value of that function will be the amount of data trans-
-              ferred; if no data has been transferred and  the  timeout  has  been  reached,  then  -1  is
-              returned with errno set to EAGAIN or EWOULDBLOCK, or EINPROGRESS (for connect(2)) just as if
-              the socket was specified to be nonblocking.  If the timeout is set to  zero  (the  default),
-              then the operation will never timeout.  Timeouts only have effect for system calls that per-
-              form socket I/O (e.g., read(2), recvmsg(2), send(2), sendmsg(2)); timeouts  have  no  effect
-              for select(2), poll(2), epoll_wait(2), and so on."
+	  SO_RCVTIMEO and SO_SNDTIMEO
+	      Specify  the  receiving  or  sending  timeouts  until reporting an error.  The argument is a
+	      struct timeval.  If an input or output function blocks for this period of time, and data has
+	      been  sent  or received, the return value of that function will be the amount of data trans-
+	      ferred; if no data has been transferred and  the  timeout  has  been  reached,  then  -1  is
+	      returned with errno set to EAGAIN or EWOULDBLOCK, or EINPROGRESS (for connect(2)) just as if
+	      the socket was specified to be nonblocking.  If the timeout is set to  zero  (the  default),
+	      then the operation will never timeout.  Timeouts only have effect for system calls that per-
+	      form socket I/O (e.g., read(2), recvmsg(2), send(2), sendmsg(2)); timeouts  have  no  effect
+	      for select(2), poll(2), epoll_wait(2), and so on."
 
     |millis|
 
     handle isNil ifTrue:[
-        ^ self errorNotOpen
+	^ self errorNotOpen
     ].
     secondsOrTimeDuration isTimeDuration ifTrue:[
-        millis := secondsOrTimeDuration getMilliseconds.
+	millis := secondsOrTimeDuration getMilliseconds.
     ] ifFalse:[
-        millis := (secondsOrTimeDuration * 1000) rounded.
+	millis := (secondsOrTimeDuration * 1000) rounded.
     ].
 
 %{
 #if defined(SO_RCVTIMEO) && defined(SOL_SOCKET)
     if (__isSmallInteger(millis)) {
-        OBJ fp = __INST(handle);
-        SOCKET sock = SOCKET_FROM_FILE_OBJECT(fp);
-        int __millis = __intVal(millis);
-        struct timeval tv = {0, 0};
-
-        tv.tv_sec = __millis / 1000;
-        tv.tv_usec = (__millis % 1000) * 1000;
+	OBJ fp = __INST(handle);
+	SOCKET sock = SOCKET_FROM_FILE_OBJECT(fp);
+	int __millis = __intVal(millis);
+	struct timeval tv = {0, 0};
+
+	tv.tv_sec = __millis / 1000;
+	tv.tv_usec = (__millis % 1000) * 1000;
 # if 0
-        console_fprintf(stderr, "setsockopt -> millis:%d -> s:%d us:%d \n", __millis, tv.tv_sec, tv.tv_usec);
+	console_fprintf(stderr, "setsockopt -> millis:%d -> s:%d us:%d \n", __millis, tv.tv_sec, tv.tv_usec);
 # endif
-        if (setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (void *)&tv, sizeof(struct timeval)) == 0) {
-            RETURN(true);
-        }
-        console_fprintf(stderr, "Socket [warning]: setsockopt %d failed; errno=%d\n", sock, errno);
+	if (setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (void *)&tv, sizeof(struct timeval)) == 0) {
+	    RETURN(true);
+	}
+	console_fprintf(stderr, "Socket [warning]: setsockopt %d failed; errno=%d\n", sock, errno);
     }
 #endif
 %}.
     ^ false
 
     "
-        Socket newTCP 
-            receiveTimeout:5s;
-            receiveTimeout
+	Socket newTCP
+	    receiveTimeout:5s;
+	    receiveTimeout
     "
 
     "Modified (comment): / 19-01-2018 / 19:14:49 / stefan"
@@ -4266,7 +4266,7 @@
     |millis|
 
     handle isNil ifTrue:[
-        ^ self errorNotOpen
+	^ self errorNotOpen
     ].
 %{
 #if defined(SO_SNDTIMEO) && defined(SOL_SOCKET)
@@ -4278,20 +4278,20 @@
 
     len = sizeof(struct timeval);
     if (getsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, (void *)&tv, &len) == 0) {
-        __millis = (tv.tv_sec * 1000) + (tv.tv_usec / 1000);
-        millis = __mkSmallInteger(__millis);
+	__millis = (tv.tv_sec * 1000) + (tv.tv_usec / 1000);
+	millis = __mkSmallInteger(__millis);
 # if 0
-        console_fprintf(stderr, "getsockopt -> s:%d us:%d -> millis:%d\n", tv.tv_sec, tv.tv_usec, __millis);
+	console_fprintf(stderr, "getsockopt -> s:%d us:%d -> millis:%d\n", tv.tv_sec, tv.tv_usec, __millis);
 # endif
     } else {
-        console_fprintf(stderr, "Socket [warning]: getsockopt %d failed; errno=%d\n", sock, errno);
+	console_fprintf(stderr, "Socket [warning]: getsockopt %d failed; errno=%d\n", sock, errno);
     }
 #endif
 %}.
     ^ millis
 
     "
-        Socket newTCP sendTimeout
+	Socket newTCP sendTimeout
     "
 
     "Modified (comment): / 19-01-2018 / 19:16:23 / stefan"
@@ -4302,53 +4302,53 @@
      Not all operatingSystems offer this functionality
      (returns false, if unsupported).
      From linux manpage:
-          SO_RCVTIMEO and SO_SNDTIMEO
-              Specify  the  receiving  or  sending  timeouts  until reporting an error.  The argument is a
-              struct timeval.  If an input or output function blocks for this period of time, and data has
-              been  sent  or received, the return value of that function will be the amount of data trans-
-              ferred; if no data has been transferred and  the  timeout  has  been  reached,  then  -1  is
-              returned with errno set to EAGAIN or EWOULDBLOCK, or EINPROGRESS (for connect(2)) just as if
-              the socket was specified to be nonblocking.  If the timeout is set to  zero  (the  default),
-              then the operation will never timeout.  Timeouts only have effect for system calls that per-
-              form socket I/O (e.g., read(2), recvmsg(2), send(2), sendmsg(2)); timeouts  have  no  effect
-              for select(2), poll(2), epoll_wait(2), and so on."
+	  SO_RCVTIMEO and SO_SNDTIMEO
+	      Specify  the  receiving  or  sending  timeouts  until reporting an error.  The argument is a
+	      struct timeval.  If an input or output function blocks for this period of time, and data has
+	      been  sent  or received, the return value of that function will be the amount of data trans-
+	      ferred; if no data has been transferred and  the  timeout  has  been  reached,  then  -1  is
+	      returned with errno set to EAGAIN or EWOULDBLOCK, or EINPROGRESS (for connect(2)) just as if
+	      the socket was specified to be nonblocking.  If the timeout is set to  zero  (the  default),
+	      then the operation will never timeout.  Timeouts only have effect for system calls that per-
+	      form socket I/O (e.g., read(2), recvmsg(2), send(2), sendmsg(2)); timeouts  have  no  effect
+	      for select(2), poll(2), epoll_wait(2), and so on."
 
     |millis|
 
     handle isNil ifTrue:[
-        ^ self errorNotOpen
+	^ self errorNotOpen
     ].
     secondsOrTimeDuration isTimeDuration ifTrue:[
-        millis := secondsOrTimeDuration getMilliseconds.
+	millis := secondsOrTimeDuration getMilliseconds.
     ] ifFalse:[
-        millis := (secondsOrTimeDuration * 1000) rounded.
+	millis := (secondsOrTimeDuration * 1000) rounded.
     ].
 %{
 #if defined(SO_SNDTIMEO) && defined(SOL_SOCKET)
     if (__isSmallInteger(millis)) {
-        OBJ fp = __INST(handle);
-        SOCKET sock = SOCKET_FROM_FILE_OBJECT(fp);
-        int __millis = __intVal(millis);
-        struct timeval tv = {0, 0};
-
-        tv.tv_sec = __millis / 1000;
-        tv.tv_usec = (__millis % 1000) * 1000;
+	OBJ fp = __INST(handle);
+	SOCKET sock = SOCKET_FROM_FILE_OBJECT(fp);
+	int __millis = __intVal(millis);
+	struct timeval tv = {0, 0};
+
+	tv.tv_sec = __millis / 1000;
+	tv.tv_usec = (__millis % 1000) * 1000;
 # if 0
-        console_fprintf(stderr, "setsockopt -> millis:%d -> s:%d us:%d \n", __millis, tv.tv_sec, tv.tv_usec);
+	console_fprintf(stderr, "setsockopt -> millis:%d -> s:%d us:%d \n", __millis, tv.tv_sec, tv.tv_usec);
 # endif
-        if (setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, (void *)&tv, sizeof(struct timeval)) == 0) {
-            RETURN(true);
-        }
-        console_fprintf(stderr, "Socket [warning]: setsockopt %d failed; errno=%d\n", sock, errno);
+	if (setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, (void *)&tv, sizeof(struct timeval)) == 0) {
+	    RETURN(true);
+	}
+	console_fprintf(stderr, "Socket [warning]: setsockopt %d failed; errno=%d\n", sock, errno);
     }
 #endif
 %}.
     ^ false
 
     "
-        Socket newTCP 
-            sendTimeout:5s;
-            sendTimeout
+	Socket newTCP
+	    sendTimeout:5s;
+	    sendTimeout
     "
 
     "Modified (comment): / 19-01-2018 / 19:12:51 / stefan"
@@ -4390,50 +4390,50 @@
 
     "first, a quick check if data is already available"
     self canReadWithoutBlocking ifTrue:[
-        ^ self accept.
+	^ self accept.
     ].
     otherConnections do:[:aConnection |
-        aConnection canReadWithoutBlocking ifTrue:[
-            ^ aConnection
-        ]
+	aConnection canReadWithoutBlocking ifTrue:[
+	    ^ aConnection
+	]
     ].
 
     "check again - prevent incoming interrupts from disturbing our setup"
 
     secondsOrTimeDurationOrNil notNil ifTrue:[
-        secondsOrTimeDurationOrNil isTimeDuration ifTrue:[
-            timeoutMs := secondsOrTimeDurationOrNil getMilliseconds.
-        ] ifFalse:[
-            timeoutMs := secondsOrTimeDurationOrNil * 1000.
-        ]
+	secondsOrTimeDurationOrNil isTimeDuration ifTrue:[
+	    timeoutMs := secondsOrTimeDurationOrNil getMilliseconds.
+	] ifFalse:[
+	    timeoutMs := secondsOrTimeDurationOrNil * 1000.
+	]
     ].
 
     wasBlocked := OperatingSystem blockInterrupts.
     [
-        sema := Semaphore name:'multiReadWait'.
-        otherConnections do:[:aConnection |
-            Processor signal:sema onInput:(aConnection fileDescriptor).
-        ].
-        Processor signal:sema onInput:(self fileDescriptor).
-        timeoutMs notNil ifTrue:[
-            Processor signal:sema afterMilliseconds:timeoutMs
-        ].
-        Processor activeProcess state:#ioWait.
-        sema wait.
+	sema := Semaphore name:'multiReadWait'.
+	otherConnections do:[:aConnection |
+	    Processor signal:sema onInput:(aConnection fileDescriptor).
+	].
+	Processor signal:sema onInput:(self fileDescriptor).
+	timeoutMs notNil ifTrue:[
+	    Processor signal:sema afterMilliseconds:timeoutMs
+	].
+	Processor activeProcess state:#ioWait.
+	sema wait.
     ] ifCurtailed:[
-        sema notNil ifTrue:[Processor disableSemaphore:sema].
-        wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
+	sema notNil ifTrue:[Processor disableSemaphore:sema].
+	wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
     ].
     wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
 
     "see who it was ..."
     self canReadWithoutBlocking ifTrue:[
-        ^ self accept.
+	^ self accept.
     ].
     otherConnections do:[:aConnection |
-        aConnection canReadWithoutBlocking ifTrue:[
-            ^ aConnection
-        ]
+	aConnection canReadWithoutBlocking ifTrue:[
+	    ^ aConnection
+	]
     ].
 
     "none - a timeout"
@@ -4454,20 +4454,20 @@
     |newSock|
 
     (self readWaitWithTimeout:secondsOrTimeDurationOrNil) ifTrue:[
-        "a timeout occurred - no connection within timeout"
-        self reportError:(OperatingSystem errorNumberFor:#ETIMEDOUT).
-        ^ nil.
+	"a timeout occurred - no connection within timeout"
+	self reportError:(OperatingSystem errorNumberFor:#ETIMEDOUT).
+	^ nil.
     ].
     self isOpen ifFalse:[
-        "I have been closed while waiting"
-        ^ self errorNotOpen.
+	"I have been closed while waiting"
+	^ self errorNotOpen.
     ].
 
     "ok, a connection is present - accept it"
     newSock := self class new.
     (newSock primAcceptOn:self blocking:false) ifFalse:[
-        "should raise an error here - primitive code raises a notification"
-        ^ nil
+	"should raise an error here - primitive code raises a notification"
+	^ nil
     ].
     ^ newSock
 
@@ -4483,4 +4483,3 @@
 version_CVS
     ^ '$Header$'
 ! !
-