implement getSocketName for swazoo as primitive cant load as extension
authorpenk
Wed, 20 Mar 2002 10:21:11 +0100
changeset 1029 5906977e62f0
parent 1028 5ca34e5c38b2
child 1030 cdd1034a8b70
implement getSocketName for swazoo as primitive cant load as extension
Socket.st
--- a/Socket.st	Mon Mar 18 12:01:22 2002 +0100
+++ b/Socket.st	Wed Mar 20 10:21:11 2002 +0100
@@ -4448,6 +4448,51 @@
     ^ peerName
 !
 
+getSocketAdress
+"
+    implemented for swazoo project primitive code cant load as extension
+    answer the my own address (I am bound to this address).
+    Note that this address may change after connect or accept.
+"
+
+    |socketAddress error|
+
+    filePointer isNil ifTrue:[
+        ^ self errorNotOpen
+    ].
+    socketAddress := ByteArray new:16.
+
+%{
+#ifndef NO_SOCKET
+    OBJ t = __INST(filePointer);
+    int sock;
+    int sockaddr_size;
+    int ret;
+
+    if (!__isNonNilObject(socketAddress) ||
+        (__intVal(__ClassInstPtr(__qClass(socketAddress))->c_flags) & ARRAYMASK) != BYTEARRAY) {
+        error = @symbol(badArgument1);
+        goto err;
+    }
+    sockaddr_size = __byteArraySize(socketAddress);
+
+    sock = fileno(__FILEVal(t));
+    ret = getsockname(sock, (struct sockaddr *)__byteArrayVal(socketAddress), &sockaddr_size);
+    if (ret < 0) {
+        DBGPRINTF(("SOCKET: getsocketname failed errno=%d\n", errno));
+        error = __MKSMALLINT(errno);
+    }
+err:;
+#else /* NO_SOCKET */
+    error = @symbol(notImplemented);
+#endif /* NO_SOCKET */
+%}.
+    error notNil ifTrue:[
+        ^ self errorReporter reportOn:error
+    ].
+    ^ socketAddress copyFrom:5 to:8
+!
+
 isActive
     "return true, if the receiver has a connection"
 
@@ -5071,5 +5116,5 @@
 !Socket class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic2/Socket.st,v 1.160 2002-01-30 15:55:50 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic2/Socket.st,v 1.161 2002-03-20 09:21:11 penk Exp $'
 ! !