--- a/AbstractOperatingSystem.st Mon Jul 14 22:21:31 2003 +0200
+++ b/AbstractOperatingSystem.st Tue Jul 15 14:19:45 2003 +0200
@@ -21,6 +21,14 @@
category:'System-Support'
!
+!AbstractOperatingSystem primitiveDefinitions!
+%{
+
+#include "stxOSDefs.h"
+
+%}
+! !
+
!AbstractOperatingSystem class methodsFor:'documentation'!
copyright
@@ -3887,6 +3895,864 @@
"Created: / 12.6.1998 / 16:30:29 / cg"
! !
+!AbstractOperatingSystem class methodsFor:'queries - sockets'!
+
+domainCodeOf:aSymbolOrInteger
+ "return the numeric AF_xxx code of a given symbolic domain name.
+ Return nil for invalid or unsupported domains.
+ For backward compatibility, the obsolete (non-AF-prefixed) names
+ are still supported for a while - this support will vanish."
+
+ |domainCode|
+
+%{ /*NOCONTEXT*/
+
+ if (__isSmallInteger(aSymbolOrInteger) || aSymbolOrInteger == nil) {
+ RETURN (aSymbolOrInteger);
+ }
+
+#ifdef AF_INET
+ else if ((aSymbolOrInteger == @symbol(inet)) || (aSymbolOrInteger == @symbol(AF_INET)))
+ domainCode = __MKSMALLINT(AF_INET);
+#endif
+#ifdef AF_INET6
+ else if ((aSymbolOrInteger == @symbol(inet6)) || (aSymbolOrInteger == @symbol(AF_INET6)))
+ domainCode = __MKSMALLINT(AF_INET6);
+#endif
+#ifdef AF_UNIX
+ else if ((aSymbolOrInteger == @symbol(unix)) || (aSymbolOrInteger == @symbol(AF_UNIX)))
+ domainCode = __MKSMALLINT(AF_UNIX);
+#endif
+#ifdef AF_APPLETALK
+ else if ((aSymbolOrInteger == @symbol(appletalk)) || (aSymbolOrInteger == @symbol(AF_APPLETALK)))
+ domainCode = __MKSMALLINT(AF_APPLETALK);
+#endif
+#ifdef AF_DECnet
+ else if ((aSymbolOrInteger == @symbol(decnet)) || (aSymbolOrInteger == @symbol(AF_DECnet)))
+ domainCode = __MKSMALLINT(AF_DECnet);
+#endif
+#ifdef AF_NS
+ else if (aSymbolOrInteger == @symbol(AF_NS))
+ domainCode = __MKSMALLINT(AF_NS);
+#endif
+#ifdef AF_X25
+ else if (aSymbolOrInteger == @symbol(AF_X25))
+ domainCode = __MKSMALLINT(AF_X25);
+#endif
+#ifdef AF_SNA
+ else if (aSymbolOrInteger == @symbol(AF_SNA))
+ domainCode = __MKSMALLINT(AF_SNA);
+#endif
+#ifdef AF_RAW
+ else if ((aSymbolOrInteger == @symbol(raw)) || (aSymbolOrInteger == @symbol(AF_RAW)))
+ domainCode = __MKSMALLINT(AF_RAW);
+#endif
+#ifdef AF_ISO
+ else if ((aSymbolOrInteger == @symbol(iso)) || (aSymbolOrInteger == @symbol(AF_ISO)))
+ domainCode = __MKSMALLINT(AF_ISO);
+#endif
+#ifdef AF_NETBIOS
+ else if (aSymbolOrInteger == @symbol(AF_NETBIOS))
+ domainCode = __MKSMALLINT(AF_NETBIOS);
+#endif
+#ifdef AF_NETBEUI
+ else if (aSymbolOrInteger == @symbol(AF_NETBEUI))
+ domainCode = __MKSMALLINT(AF_NETBEUI);
+#endif
+#ifdef AF_IPX
+ else if (aSymbolOrInteger == @symbol(AF_IPX))
+ domainCode = __MKSMALLINT(AF_IPX);
+#endif
+#ifdef AF_AX25
+ else if (aSymbolOrInteger == @symbol(AF_AX25))
+ domainCode = __MKSMALLINT(AF_AX25);
+#endif
+#ifdef AF_NETROM
+ else if (aSymbolOrInteger == @symbol(AF_NETROM))
+ domainCode = __MKSMALLINT(AF_NETROM);
+#endif
+#ifdef AF_BRIDGE
+ else if (aSymbolOrInteger == @symbol(AF_BRIDGE))
+ domainCode = __MKSMALLINT(AF_BRIDGE);
+#endif
+#ifdef AF_BSC
+ else if (aSymbolOrInteger == @symbol(AF_BSC))
+ domainCode = __MKSMALLINT(AF_BSC);
+#endif
+#ifdef AF_ROSE
+ else if (aSymbolOrInteger == @symbol(AF_ROSE))
+ domainCode = __MKSMALLINT(AF_ROSE);
+#endif
+#ifdef AF_IRDA
+ else if ((aSymbolOrInteger == @symbol(irda)) || (aSymbolOrInteger == @symbol(AF_IRDA)))
+ domainCode = __MKSMALLINT(AF_IRDA);
+#endif
+#ifdef AF_BAN
+ else if (aSymbolOrInteger == @symbol(AF_BAN))
+ domainCode = __MKSMALLINT(AF_BAN);
+#endif
+#ifdef AF_VOICEVIEW
+ else if (aSymbolOrInteger == @symbol(AF_VOICEVIEW))
+ domainCode = __MKSMALLINT(AF_VOICEVIEW);
+#endif
+#ifdef AF_ATM
+ else if (aSymbolOrInteger == @symbol(AF_ATM))
+ domainCode = __MKSMALLINT(AF_ATM);
+#endif
+#ifdef AF_ATMPVC
+ else if ((aSymbolOrInteger == @symbol(atmpvc)) || (aSymbolOrInteger == @symbol(AF_ATMPVC)))
+ domainCode = __MKSMALLINT(AF_ATMPVC);
+#endif
+#ifdef AF_ATMSVC
+ else if (aSymbolOrInteger == @symbol(AF_ATMSVC))
+ domainCode = __MKSMALLINT(AF_ATMSVC);
+#endif
+#ifdef AF_SECURITY
+ else if (aSymbolOrInteger == @symbol(AF_SECURITY))
+ domainCode = __MKSMALLINT(AF_SECURITY);
+#endif
+#ifdef AF_KEY
+ else if (aSymbolOrInteger == @symbol(AF_KEY))
+ domainCode = __MKSMALLINT(AF_KEY);
+#endif
+#ifdef AF_NETLINK
+ else if (aSymbolOrInteger == @symbol(AF_NETLINK))
+ domainCode = __MKSMALLINT(AF_NETLINK);
+#endif
+#ifdef AF_PACKET
+ else if (aSymbolOrInteger == @symbol(AF_PACKET))
+ domainCode = __MKSMALLINT(AF_PACKET);
+#endif
+#ifdef AF_ASH
+ else if (aSymbolOrInteger == @symbol(AF_ASH))
+ domainCode = __MKSMALLINT(AF_ASH);
+#endif
+#ifdef AF_ECONET
+ else if (aSymbolOrInteger == @symbol(AF_ECONET))
+ domainCode = __MKSMALLINT(AF_ECONET);
+#endif
+%}.
+
+ ^ domainCode.
+
+ "
+ self domainCodeOf:#inet
+ self domainCodeOf:#unix
+ self domainCodeOf:#inet6
+ self domainCodeOf:#appletalk
+ self domainCodeOf:#decnet
+ self domainCodeOf:#AF_INET
+ "
+!
+
+domainSymbolOf:anInteger
+ "return the symbolic domainName of a given numeric AF_xxx code.
+ Return nil for invalid or unsupported domains."
+
+ |domainSymbol|
+
+%{ /*NOCONTEXT*/
+
+ if (__isSmallInteger(anInteger)) {
+ switch(__intVal(anInteger)) {
+#ifdef AF_INET
+ case AF_INET:
+ domainSymbol = @symbol(AF_INET);
+ break;
+#endif
+#ifdef AF_INET6
+ case AF_INET6:
+ domainSymbol = @symbol(AF_INET6);
+ break;
+#endif
+#ifdef AF_UNIX
+ case AF_UNIX:
+ domainSymbol = @symbol(AF_UNIX);
+ break;
+#endif
+#ifdef AF_APPLETALK
+ case AF_APPLETALK:
+ domainSymbol = @symbol(AF_APPLETALK);
+ break;
+#endif
+#ifdef AF_DECnet
+ case AF_DECnet:
+ domainSymbol = @symbol(AF_DECnet);
+ break;
+#endif
+#ifdef AF_NS
+ case AF_NS:
+ domainSymbol = @symbol(AF_NS);
+ break;
+#endif
+#ifdef AF_X25
+ case AF_X25:
+ domainSymbol = @symbol(AF_X25);
+ break;
+#endif
+#ifdef AF_SNA
+ case AF_SNA:
+ domainSymbol = @symbol(AF_SNA);
+ break;
+#endif
+#ifdef AF_RAW
+ case AF_RAW:
+ domainSymbol = @symbol(AF_RAW);
+ break;
+#endif
+#ifdef AF_ISO
+ case AF_ISO:
+ domainSymbol = @symbol(AF_ISO);
+ break;
+#endif
+#ifdef AF_NETBIOS
+ case AF_NETBIOS:
+ domainSymbol = @symbol(AF_NETBIOS);
+ break;
+#endif
+#ifdef AF_IPX
+ case AF_IPX:
+ domainSymbol = @symbol(AF_IPX);
+ break;
+#endif
+#ifdef AF_AX25
+ case AF_AX25:
+ domainSymbol = @symbol(AF_AX25);
+ break;
+#endif
+#ifdef AF_NETROM
+ case AF_NETROM:
+ domainSymbol = @symbol(AF_NETROM);
+ break;
+#endif
+#ifdef AF_BRIDGE
+ case AF_BRIDGE:
+ domainSymbol = @symbol(AF_BRIDGE);
+ break;
+#endif
+#ifdef AF_BSC
+ case AF_BSC:
+ domainSymbol = @symbol(AF_BSC);
+ break;
+#endif
+#ifdef AF_ROSE
+ case AF_ROSE:
+ domainSymbol = @symbol(AF_ROSE);
+ break;
+#endif
+#ifdef AF_IRDA
+ case AF_IRDA:
+ domainSymbol = @symbol(AF_IRDA);
+ break;
+#endif
+#ifdef AF_BAN
+ case AF_BAN:
+ domainSymbol = @symbol(AF_BAN);
+ break;
+#endif
+#ifdef AF_VOICEVIEW
+ case AF_VOICEVIEW:
+ domainSymbol = @symbol(AF_VOICEVIEW);
+ break;
+#endif
+#ifdef AF_ATM
+ case AF_ATM:
+ domainSymbol = @symbol(AF_ATM);
+ break;
+#endif
+#ifdef AF_ATMPVC
+ case AF_ATMPVC:
+ domainSymbol = @symbol(AF_ATMPVC);
+ break;
+#endif
+#ifdef AF_ATMSVC
+ case AF_ATMSVC:
+ domainSymbol = @symbol(AF_ATMSVC);
+ break;
+#endif
+#ifdef AF_SECURITY
+ case AF_SECURITY:
+ domainSymbol = @symbol(AF_SECURITY);
+ break;
+#endif
+#ifdef AF_KEY
+ case AF_KEY:
+ domainSymbol = @symbol(AF_KEY);
+ break;
+#endif
+#ifdef AF_NETLINK
+ case AF_NETLINK:
+ domainSymbol = @symbol(AF_NETLINK);
+ break;
+#endif
+#ifdef AF_PACKET
+ case AF_PACKET:
+ domainSymbol = @symbol(AF_PACKET);
+ break;
+#endif
+#ifdef AF_ASH
+ case AF_ASH:
+ domainSymbol = @symbol(AF_ASH);
+ break;
+#endif
+#ifdef AF_ECONET
+ case AF_ECONET:
+ domainSymbol = @symbol(AF_ECONET);
+ break;
+#endif
+ }
+ }
+%}.
+
+ ^ domainSymbol.
+
+ "
+ self domainSymbolOf:(self domainCodeOf:#inet)
+ self domainSymbolOf:(self domainCodeOf:#inet6)
+ self domainSymbolOf:(self domainCodeOf:#unix)
+ self domainSymbolOf:(self domainCodeOf:#appletalk)
+ self domainSymbolOf:(self domainCodeOf:#decnet)
+ self domainSymbolOf:(self domainCodeOf:#raw)
+ "
+!
+
+socketAddressSizeOfDomain:aSymbolOrInteger
+ "Return the os-specific size of a socket address for a domain aSymbolOrInteger.
+ Return nil, if unknown or unsupported."
+
+ |socketSize domainCode|
+
+ domainCode := OperatingSystem domainCodeOf:aSymbolOrInteger.
+
+%{
+ if (__isSmallInteger(domainCode)) {
+ switch (__intVal(domainCode)) {
+#ifdef AF_INET
+ case AF_INET:
+ socketSize = __MKSMALLINT( sizeof(struct sockaddr_in) );
+ break;
+#endif
+#ifdef AF_INET6
+ case AF_INET6:
+ socketSize = __MKSMALLINT( sizeof(struct sockaddr_in6) );
+ break;
+#endif
+#ifdef AF_UNIX
+ case AF_UNIX:
+ socketSize = __MKSMALLINT( sizeof(struct sockaddr_un) );
+ break;
+#endif
+#ifdef AF_APPLETALK
+ case AF_APPLETALK:
+ socketSize = __MKSMALLINT( sizeof(struct sockaddr_at) );
+ break;
+#endif
+#ifdef AF_DECnet
+ case AF_DECnet:
+ socketSize = __MKSMALLINT( sizeof(struct sockaddr_dn) );
+ break;
+#endif
+#ifdef AF_NS
+ case AF_NS:
+ socketSize = __MKSMALLINT( sizeof(struct sockaddr_ns) );
+ break;
+#endif
+#ifdef AF_X25
+ case AF_X25:
+ socketSize = __MKSMALLINT( sizeof(struct sockaddr_x25) );
+ break;
+#endif
+#ifdef AF_SNA
+ case AF_SNA:
+ socketSize = __MKSMALLINT( sizeof(struct sockaddr_sna) );
+ break;
+#endif
+#ifdef AF_RAW
+ case AF_RAW:
+ socketSize = __MKSMALLINT( sizeof(struct sockaddr_raw) );
+ break;
+#endif
+#ifdef AF_ISO
+ case AF_ISO:
+ socketSize = __MKSMALLINT( sizeof(struct sockaddr_iso) );
+ break;
+#endif
+#ifdef AF_NETBIOS
+ case AF_NETBIOS:
+ socketSize = __MKSMALLINT( sizeof(struct sockaddr_netbios) );
+ break;
+#endif
+#ifdef AF_NETBEUI
+ case AF_NETBEUI:
+ socketSize = __MKSMALLINT( sizeof(struct sockaddr_netbeui) );
+ break;
+#endif
+#ifdef AF_IPX
+ case AF_IPX:
+ socketSize = __MKSMALLINT( sizeof(struct sockaddr_ipx) );
+ break;
+#endif
+#ifdef AF_AX25
+ case AF_AX25:
+ socketSize = __MKSMALLINT( sizeof(struct sockaddr_ax25) );
+ break;
+#endif
+#ifdef AF_NETROM
+ case AF_NETROM:
+ socketSize = __MKSMALLINT( sizeof(struct sockaddr_netrom) );
+ break;
+#endif
+#ifdef AF_BRIDGE
+ case AF_BRIDGE:
+ socketSize = __MKSMALLINT( sizeof(struct sockaddr_bridge) );
+ break;
+#endif
+#ifdef AF_BSC
+ case AF_BSC:
+ socketSize = __MKSMALLINT( sizeof(struct sockaddr_bsc) );
+ break;
+#endif
+#ifdef AF_ROSE
+ case AF_ROSE:
+ socketSize = __MKSMALLINT( sizeof(struct sockaddr_rose) );
+ break;
+#endif
+#ifdef AF_IRDA
+ case AF_IRDA:
+ socketSize = __MKSMALLINT( sizeof(struct sockaddr_irda) );
+ break;
+#endif
+#ifdef AF_BAN
+ case AF_BAN:
+ socketSize = __MKSMALLINT( sizeof(struct sockaddr_ban) );
+ break;
+#endif
+#ifdef AF_VOICEVIEW
+ case AF_VOICEVIEW:
+ socketSize = __MKSMALLINT( sizeof(struct sockaddr_voiceview) );
+ break;
+#endif
+#ifdef AF_ATM
+ case AF_ATM:
+ socketSize = __MKSMALLINT( sizeof(struct sockaddr_atm) );
+ break;
+#endif
+#ifdef AF_ATMPVC
+ case AF_ATMPVC:
+ socketSize = __MKSMALLINT( sizeof(struct sockaddr_atmpvc) );
+ break;
+#endif
+#ifdef AF_ATMSVC
+ case AF_ATMSVC:
+ socketSize = __MKSMALLINT( sizeof(struct sockaddr_atmsvc) );
+ break;
+#endif
+#ifdef AF_NETLINK
+ case AF_NETLINK:
+ socketSize = __MKSMALLINT( sizeof(struct sockaddr_netlink) );
+ break;
+#endif
+#ifdef AF_PACKET
+ case AF_PACKET:
+ socketSize = __MKSMALLINT( sizeof(struct sockaddr_packet) );
+ break;
+#endif
+#ifdef AF_ASH
+ case AF_ASH:
+ socketSize = __MKSMALLINT( sizeof(struct sockaddr_ash) );
+ break;
+#endif
+#ifdef AF_ECONET
+ case AF_ECONET:
+ socketSize = __MKSMALLINT( sizeof(struct sockaddr_eco) );
+ break;
+#endif
+ }
+ }
+%}.
+ ^ socketSize
+
+ "
+ self socketAddressSizeOfDomain:#'AF_INET'
+ self socketAddressSizeOfDomain:#'AF_UNIX'
+ self socketAddressSizeOfDomain:#'Foo'
+ "
+!
+
+socketTypeCodeOf:aSymbolOrInteger
+ "return the numeric SOCK_xxx code of a given symbolic socket type name.
+ Return nil for invalid or unsupported socket types."
+
+ |typeCode|
+
+%{ /*NOCONTEXT*/
+
+ if (__isSmallInteger(aSymbolOrInteger) || aSymbolOrInteger == nil) {
+ typeCode = aSymbolOrInteger;
+ }
+
+#ifdef SOCK_STREAM
+ else if ((aSymbolOrInteger == @symbol(stream)) || (aSymbolOrInteger == @symbol(SOCK_STREAM)))
+ typeCode = __MKSMALLINT(SOCK_STREAM);
+#endif
+#ifdef SOCK_DGRAM
+ else if ((aSymbolOrInteger == @symbol(datagram)) || (aSymbolOrInteger == @symbol(SOCK_DGRAM)))
+ typeCode = __MKSMALLINT(SOCK_DGRAM);
+#endif
+#ifdef SOCK_RAW
+ else if ((aSymbolOrInteger == @symbol(raw)) || (aSymbolOrInteger == @symbol(SOCK_RAW)))
+ typeCode = __MKSMALLINT(SOCK_RAW);
+#endif
+#ifdef SOCK_RDM
+ else if ((aSymbolOrInteger == @symbol(rdm)) || (aSymbolOrInteger == @symbol(SOCK_RDM)))
+ typeCode = __MKSMALLINT(SOCK_RDM);
+#endif
+#ifdef SOCK_SEQPACKET
+ else if ((aSymbolOrInteger == @symbol(seqpacket)) || (aSymbolOrInteger == @symbol(SOCK_SEQPACKET)))
+ typeCode = __MKSMALLINT(SOCK_SEQPACKET);
+#endif
+#ifdef SOCK_PACKET
+ else if ((aSymbolOrInteger == @symbol(packet)) || (aSymbolOrInteger == @symbol(SOCK_PACKET)))
+ typeCode = __MKSMALLINT(SOCK_PACKET);
+#endif
+%}.
+
+ ^ typeCode.
+
+ "
+ self socketTypeCodeOf:#stream
+ self socketTypeCodeOf:#datagram
+ self socketTypeCodeOf:#raw
+ "
+!
+
+socketTypeSymbolOf:anInteger
+ "return the symbolic typeName of a given numeric SOCK_xxx socket type code.
+ Return nil for invalid or unsupported socket types."
+
+ |socketTypeSymbol|
+
+%{ /*NOCONTEXT*/
+
+ if (__isSmallInteger(anInteger)) {
+ switch(__intVal(anInteger)) {
+#ifdef SOCK_STREAM
+ case SOCK_STREAM:
+ socketTypeSymbol = @symbol(SOCK_STREAM);
+ break;
+#endif
+#ifdef SOCK_DGRAM
+ case SOCK_DGRAM:
+ socketTypeSymbol = @symbol(SOCK_DGRAM);
+ break;
+#endif
+#ifdef SOCK_RAW
+ case SOCK_RAW:
+ socketTypeSymbol = @symbol(SOCK_RAW);
+ break;
+#endif
+#ifdef SOCK_RDM
+ case SOCK_RDM:
+ socketTypeSymbol = @symbol(SOCK_RDM);
+ break;
+#endif
+#ifdef SOCK_SEQPACKET
+ case SOCK_SEQPACKET:
+ socketTypeSymbol = @symbol(SOCK_SEQPACKET);
+ break;
+#endif
+#ifdef SOCK_PACKET
+ case SOCK_PACKET:
+ socketTypeSymbol = @symbol(SOCK_PACKET);
+ break;
+#endif
+ }
+ }
+%}.
+ ^ socketTypeSymbol.
+!
+
+supportedProtocolFamilies
+ "return a collection of supported protocol families.
+ This list specifies what the Socket class supports -
+ socket creation may still fail, if your system was built without it.
+ For backward compatibility, the returned list includes the old
+ (non-AF-prefixed) symbols; these will vanish."
+
+ |list|
+
+ list := OrderedCollection new.
+
+%{
+#ifdef AF_INET
+%}.
+ list add:#AF_INET.
+ list add:#inet.
+%{
+#endif
+%}.
+
+%{
+#ifdef AF_UNIX
+%}.
+ list add:#AF_UNIX.
+ list add:#unix.
+%{
+#endif
+%}.
+
+%{
+#ifdef AF_INET6
+%}.
+ list add:#AF_INET6. "/ internet v6
+ list add:#inet6.
+%{
+#endif
+%}.
+
+%{
+#ifdef AF_APPLETALK
+%}.
+ list add:#AF_APPLETALK.
+ list add:#appletalk.
+%{
+#endif
+%}.
+
+%{
+#ifdef AF_DECnet
+%}.
+ list add:#AF_DECnet.
+ list add:#decnet.
+%{
+#endif
+%}.
+
+%{
+#ifdef AF_NS
+%}.
+ list add:#AF_NS. "/ Xerox XNS
+%{
+#endif
+%}.
+
+%{
+#ifdef AF_X25
+%}.
+ list add:#AF_X25.
+%{
+#endif
+%}.
+
+%{
+#ifdef AF_SNA
+%}.
+ list add:#AF_SNA. "/ IBM SNA
+%{
+#endif
+%}.
+
+%{
+#ifdef AF_RAW
+%}.
+ list add:#AF_RAW. "/ RAW packets
+%{
+#endif
+%}.
+
+%{
+#ifdef AF_ISO
+%}.
+ list add:#AF_ISO.
+%{
+#endif
+%}.
+
+%{
+#ifdef AF_NETBIOS
+%}.
+ list add:#AF_NETBIOS.
+%{
+#endif
+%}.
+
+%{
+#ifdef AF_IPX
+%}.
+ list add:#AF_IPX. "/ Novell IPX
+%{
+#endif
+%}.
+
+%{
+#ifdef AF_AX25
+%}.
+ list add:#AF_AX25. "/ Amateur Radio AX.25
+%{
+#endif
+%}.
+
+%{
+#ifdef AF_NETROM
+%}.
+ list add:#AF_NETROM. "/ Amateur Radio NET/ROM
+%{
+#endif
+%}.
+
+%{
+#ifdef AF_BRIDGE
+%}.
+ list add:#AF_BRIDGE. "/ multiprotocol bridge
+%{
+#endif
+%}.
+
+%{
+#ifdef AF_BSC
+%}.
+ list add:#AF_BSC. "/ BISYNC 2780/3780
+%{
+#endif
+%}.
+
+%{
+#ifdef AF_ROSE
+%}.
+ list add:#AF_ROSE. "/ Amateur Radio X.25 PLP
+%{
+#endif
+%}.
+
+%{
+#ifdef AF_IRDA
+%}.
+ list add:#AF_IRDA. "/ infrared
+%{
+#endif
+%}.
+
+%{
+#ifdef AF_NETLINK
+%}.
+ list add:#AF_NETLINK.
+%{
+#endif
+%}.
+
+%{
+#ifdef AF_NETBEUI
+%}.
+ list add:#AF_NETBEUI.
+%{
+#endif
+%}.
+
+%{
+#ifdef AF_ATM
+%}.
+ list add:#AF_ATM. "/ windose ATM
+%{
+#endif
+%}.
+
+%{
+#ifdef AF_ATMPVC
+%}.
+ list add:#AF_ATMPVC. "/ linux ATM
+%{
+#endif
+%}.
+
+%{
+#ifdef AF_ATMSVC
+%}.
+ list add:#AF_ATMSVC. "/ linux ATM
+%{
+#endif
+%}.
+
+%{
+#ifdef AF_BAN
+%}.
+ list add:#AF_BAN. "/ windose
+%{
+#endif
+%}.
+
+%{
+#ifdef AF_VOICEVIEW
+%}.
+ list add:#AF_VOICEVIEW. "/ windose
+%{
+#endif
+%}.
+
+ ^ list
+
+ "
+ self supportedProtocolFamilies
+ "
+!
+
+supportedSocketTypes
+ "return the symbolic typeName of a given numeric SOCK_xxx socket type code.
+ Return nil for invalid or unsupported socket types."
+
+ |list|
+
+ list := OrderedCollection new.
+
+%{
+#ifdef SOCK_STREAM
+%}.
+ list add:#SOCK_STREAM.
+%{
+#endif
+%}.
+%{
+#ifdef SOCK_DGRAM
+%}.
+ list add:#SOCK_DGRAM.
+%{
+#endif
+%}.
+%{
+#ifdef SOCK_RAW
+%}.
+ list add:#SOCK_RAW.
+%{
+#endif
+%}.
+%{
+#ifdef SOCK_RDM
+%}.
+ list add:#SOCK_RDM.
+%{
+#endif
+%}.
+%{
+#ifdef SOCK_SEQPACKET
+%}.
+ list add:#SOCK_SEQPACKET.
+%{
+#endif
+%}.
+%{
+#ifdef SOCK_PACKET
+%}.
+ list add:#SOCK_PACKET.
+%{
+#endif
+%}.
+
+ ^ list.
+
+ "
+ self supportedSocketTypes
+ "
+! !
+
!AbstractOperatingSystem class methodsFor:'shared memory access'!
shmAttach:id address:addr flags:flags
@@ -4517,7 +5383,7 @@
!AbstractOperatingSystem class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libbasic/AbstractOperatingSystem.st,v 1.102 2003-07-14 19:48:15 stefan Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/AbstractOperatingSystem.st,v 1.103 2003-07-15 12:19:28 cg Exp $'
! !
AbstractOperatingSystem initialize!
--- a/UnixOperatingSystem.st Mon Jul 14 22:21:31 2003 +0200
+++ b/UnixOperatingSystem.st Tue Jul 15 14:19:45 2003 +0200
@@ -519,552 +519,7 @@
/*
* Socket defines
*/
-
-#if defined(transputer)
-# define NO_SOCKET
-#endif
-
-/*
- * which protocols can we support ?
- */
-#ifndef NO_SOCKET
-# define WANT__AF_INET
-#endif
-
-#define WANT__AF_UNIX
-
-#ifdef __VMS__
-# undef WANT__AF_UNIX
-# define WANT_AF_DECnet
-#endif
-
-
-#ifdef LINUX
-/* kludge to avoid some redefines ... */
-# define _ARPA_NAMESER_H
-# define _NETINET_TCP_H
-# define WANT__AF_INET6
-#endif
-
-#if !defined(NO_SOCKET)
-# if defined(IRIS) && !defined(IRIX5)
- /* no socket.h on 4.0.5h ?!?!? */
-# ifndef AF_UNIX
-# define AF_UNIX 1
-# endif
-# ifndef AF_INET
-# define AF_INET 2
-# endif
-
-# ifndef SOCK_STREAM
-# define SOCK_STREAM 1
-# endif
-# ifndef SOCK_DGRAM
-# define SOCK_DGRAM 2
-# endif
-# ifndef SOCK_RAW
-# define SOCK_RAW 3
-# endif
-# else
-# include <sys/socket.h>
-# endif
-
-# ifdef NEXT3
-# include <netinet/in_systm.h>
-# endif
-#endif
-
-
-/*
- * see what we want ...
- */
-#ifdef WANT__AF_UNIX
-# ifdef AF_UNIX
-# ifndef PF_UNIX
-# define PF_UNIX AF_UNIX
-# endif
-# endif
-#else
-# undef AF_UNIX
-#endif
-
-#ifdef WANT__AF_INET
-# ifdef AF_INET
-# ifndef PF_INET
-# define PF_INET AF_INET
-# endif
-# endif
-#else
-# undef AF_INET
-#endif
-
-#ifdef WANT__AF_INET6
-# ifdef AF_INET6
-# ifndef PF_INET6
-# define PF_INET6 AF_INET6
-# endif
-# endif
-#else
-# undef AF_INET6
-#endif
-
-#ifdef WANT__AF_APPLETALK
-# ifdef AF_APPLETALK
-# ifndef PF_APPLETALK
-# define PF_APPLETALK AF_APPLETALK
-# endif
-# endif
-#else
-# undef AF_APPLETALK
-#endif
-
-#ifdef WANT__AF_DECnet
-# ifdef AF_DECnet
-# ifndef PF_DECnet
-# define PF_DECnet AF_DECnet
-# endif
-# endif
-#else
-# undef AF_DECnet
-#endif
-
-#ifdef WANT__AF_IRDA /* infrared */
-# ifdef AF_IRDA
-# ifndef PF_IRDA
-# define PF_IRDA AF_IRDA
-# endif
-# endif
-#else
-# undef AF_IRDA
-#endif
-
-#ifdef WANT__AF_NETLINK
-# ifdef AF_NETLINK
-# ifndef PF_NETLINK
-# define PF_NETLINK AF_NETLINK
-# endif
-# endif
-#else
-# undef AF_NETLINK
-#endif
-
-#ifdef WANT__AF_PACKET
-# ifdef AF_PACKET
-# ifndef PF_PACKET
-# define PF_PACKET AF_PACKET
-# endif
-# endif
-#else
-# undef AF_PACKET
-#endif
-
-#ifdef WANT__AF_ASH
-# ifdef AF_ASH
-# ifndef PF_ASH
-# define PF_ASH AF_ASH
-# endif
-# endif
-#else
-# undef AF_ASH
-#endif
-
-#ifdef WANT__AF_ECONET
-# ifdef AF_ECONET
-# ifndef PF_ECONET
-# define PF_ECONET AF_ECONET
-# endif
-# endif
-#else
-# undef AF_ECONET
-#endif
-
-#ifdef WANT__AF_X25 /* X.25 */
-# ifdef AF_X25
-# ifndef PF_X25
-# define PF_X25 AF_X25
-# endif
-# endif
-#else
-# undef AF_X25
-#endif
-
-#ifdef WANT__AF_NS /* Xerox XNS */
-# ifdef AF_NS
-# ifndef PF_NS
-# define PF_NS AF_NS
-# endif
-# endif
-#else
-# undef AF_NS
-#endif
-
-#ifdef WANT__AF_SNA /* IBM SNA */
-# ifdef AF_SNA
-# ifndef PF_SNA
-# define PF_SNA AF_SNA
-# endif
-# endif
-#else
-# undef AF_SNA
-#endif
-
-#ifdef WANT__AF_RAW /* RAW packets */
-# ifdef AF_RAW
-# ifndef PF_RAW
-# define PF_RAW AF_RAW
-# endif
-# endif
-#else
-# undef AF_RAW
-#endif
-
-#ifdef WANT__AF_ISO /* ? */
-# ifdef AF_ISO
-# ifndef PF_ISO
-# define PF_ISO AF_ISO
-# endif
-# endif
-#else
-# undef AF_ISO
-#endif
-
-#ifdef WANT__AF_NETBIOS /* NETBIOS */
-# ifdef AF_NETBIOS
-# ifndef PF_NETBIOS
-# define PF_NETBIOS AF_NETBIOS
-# endif
-# endif
-#else
-# undef AF_NETBIOS
-#endif
-
-#ifdef WANT__AF_NETBEUI /* NETBIOS */
-# ifdef AF_NETBEUI
-# ifndef PF_NETBEUI
-# define PF_NETBEUI AF_NETBEUI
-# endif
-# endif
-#else
-# undef AF_NETBEUI
-#endif
-
-#ifdef WANT__AF_CCITT /* ? */
-# if defined(AF_CCITT) && (AF_CCITT != AF_X25)
-# ifndef PF_CCITT
-# define PF_CCITT AF_CCITT
-# endif
-# endif
-#else
-# undef AF_CCITT
-#endif
-
-#ifdef WANT__AF_IPX /* Novell IPX */
-# ifdef AF_IPX
-# ifndef PF_IPX
-# define PF_IPX AF_IPX
-# endif
-# endif
-#else
-# undef AF_IPX
-#endif
-
-#ifdef WANT__AF_AX25 /* Amateur Radio AX.25 */
-# ifdef AF_AX25
-# ifndef PF_AX25
-# define PF_AX25 AF_AX25
-# endif
-# endif
-#else
-# undef AF_AX25
-#endif
-
-#ifdef WANT__AF_NETROM /* Amateur Radio NET/ROM */
-# ifdef AF_NETROM
-# ifndef PF_NETROM
-# define PF_NETROM AF_NETROM
-# endif
-# endif
-#else
-# undef AF_NETROM
-#endif
-
-#ifdef WANT__AF_BRIDGE /* multiprotocol bridge */
-# ifdef AF_BRIDGE
-# ifndef PF_BRIDGE
-# define PF_BRIDGE AF_BRIDGE
-# endif
-# endif
-#else
-# undef AF_BRIDGE
-#endif
-
-#ifdef WANT__AF_BSC /* BISYNC 2780/3780 */
-# ifdef AF_BSC
-# ifndef PF_BSC
-# define PF_BSC AF_BSC
-# endif
-# endif
-#else
-# undef AF_BSC
-#endif
-
-#ifdef WANT__AF_ROSE /* Amateur Radio X.25 PLP */
-# ifdef AF_ROSE
-# ifndef PF_ROSE
-# define PF_ROSE AF_ROSE
-# endif
-# endif
-#else
-# undef AF_ROSE
-#endif
-
-#ifdef WANT__AF_ATM /* ATM Services */
-# ifdef AF_ATM
-# ifndef PF_ATM
-# define PF_ATM AF_ATM
-# endif
-# endif
-#else
-# undef AF_ATM
-#endif
-
-#ifdef WANT__AF_ATMPVC /* ATM Services */
-# ifdef AF_ATMPVC
-# ifndef PF_ATMPVC
-# define PF_ATMPVC AF_ATMPVC
-# endif
-# endif
-#else
-# undef AF_ATMPVC
-#endif
-
-#ifdef WANT__AF_ATMSVC /* ATM Services */
-# ifdef AF_ATMSVC
-# ifndef PF_ATMSVC
-# define PF_ATMSVC AF_ATMSVC
-# endif
-# endif
-#else
-# undef AF_ATMSVC
-#endif
-
-#ifdef WANT__AF_BAN /* BAN / VINES IP Services */
-# ifdef AF_BAN
-# ifndef PF_BAN
-# define PF_BAN AF_BAN
-# endif
-# endif
-#else
-# undef AF_BAN
-#endif
-
-#ifdef WANT__AF_VOICEVIEW /* VoiceView Services W95 only */
-# ifdef AF_VOICEVIEW
-# ifndef PF_VOICEVIEW
-# define PF_VOICEVIEW AF_VOICEVIEW
-# endif
-# endif
-#else
-# undef AF_VOICEVIEW
-#endif
-
-#ifdef WANT__AF_SECURITY
-# ifdef AF_SECURITY
-# ifndef PF_SECURITY
-# define PF_SECURITY AF_SECURITY
-# endif
-# endif
-#else
-# undef AF_SECURITY
-#endif
-
-#ifdef WANT__AF_KEY
-# ifdef AF_KEY
-# ifndef PF_KEY
-# define PF_KEY AF_KEY
-# endif
-# endif
-#else
-# undef AF_KEY
-#endif
-
-#ifdef WANT__AF_NETLINK
-# ifdef AF_NETLINK
-# ifndef PF_NETLINK
-# define PF_NETLINK AF_NETLINK
-# endif
-# endif
-#else
-# undef AF_NETLINK
-#endif
-
-#ifdef WANT__AF_PACKET
-# ifdef AF_PACKET
-# ifndef PF_PACKET
-# define PF_PACKET AF_PACKET
-# endif
-# endif
-#else
-# undef AF_PACKET
-#endif
-
-#ifdef WANT__AF_ASH
-# ifdef AF_ASH
-# ifndef PF_ASH
-# define PF_ASH AF_ASH
-# endif
-# endif
-#else
-# undef AF_ASH
-#endif
-
-#ifdef WANT__AF_ECONET
-# ifdef AF_ECONET
-# ifndef PF_ECONET
-# define PF_ECONET AF_ECONET
-# endif
-# endif
-#else
-# undef AF_ECONET
-#endif
-
-
-/*
- * now, include what we have to ...
- * undef support, if no include file is present
- * (or I dont know yet, where to find it)
- */
-
-#ifdef AF_UNIX
-# ifdef UNIX
-# include <sys/un.h>
-# else
-# undef AF_UNIX
-# endif
-#endif
-
-#ifdef AF_INET
-# include <netdb.h>
-# if defined(PRE_SUSE_7_2)
-# if defined(LINUX) && defined(AF_INET6)
-# include <linux/in.h>
-# else
-# include <netinet/in.h>
-# endif
-# else
-# include <netinet/in.h>
-# endif
-# if !defined(LINUX)
-# if ! (defined(SYSV3) && defined(mc88k))
-# include <netinet/tcp.h>
-# endif
-# endif
-#endif
-
-#ifdef AF_INET6
-# if defined(LINUX) && defined(__GLIBC__)
-# if defined(PRE_SUSE_7_2)
-# include <linux/in6.h>
-# endif
-# else
-# undef AF_INET6
-# endif
-#endif
-
-#ifdef AF_APPLETALK
-# ifdef LINUX
-# include <asm/types.h>
-# include <linux/atalk.h>
-# else
-# undef AF_APPLETALK
-# endif
-#endif
-
-#ifdef AF_DECnet
-# ifdef solaris2_0
-# include <X11/dni8.h>
-# else
-# undef AF_DECnet
-# endif
-#endif
-
-#ifdef AF_X25
-# ifdef LINUX
-# include <linux/x25.h>
-# else
-# undef AF_X25
-# endif
-#endif
-
-#ifdef AF_AX25
-# ifdef LINUX
-# include <linux/ax25.h>
-# else
-# undef AF_AX25
-# endif
-#endif
-
-#ifdef AF_IPX
-# ifdef LINUX
-# include <linux/ipx.h>
-# else
-# ifdef WIN32
-# include <wsipx.h>
-# else
-# undef AF_IPX
-# endif
-# endif
-#endif
-
-#ifdef AF_NETBIOS
-# ifdef WIN32
-# include <wsnetbs.h>
-# else
-# undef AF_NETBIOS
-# endif
-#endif
-
-#ifdef AF_ATM
-# ifdef WIN32
-# include <ws2atm.h>
-# else
-# undef AF_ATM
-# endif
-#endif
-
-#if defined(AF_ATMPVC) || defined(AF_ATMSVC)
-# ifdef LINUX
-# include <linux/atm.h>
-# else
-# undef AF_ATMPVC
-# undef AF_ATMSVC
-# endif
-#endif
-
-#ifdef AF_BAN
-# ifdef WIN32
-# include <wsvns.h>
-# else
-# undef AF_BAN
-# endif
-#endif
-
-#ifdef AF_VOICEVIEW
-# ifdef WIN32
-# include <wsvv.h>
-# else
-# undef AF_VOICEVIEW
-# endif
-#endif
-
-#ifdef AF_IRDA
-# ifdef LINUX
-# include <linux/irda.h>
-# else
-# undef AF_IRDA
-# endif
-#endif
-
+#include "stxOSDefs.h"
#ifdef NET_IF_SUPPORT /* for mac address of interfaces */
@@ -1080,57 +535,6 @@
#endif /* NET_IF_SUPPORT */
-#undef AF_SNA /* not yet implemented */
-#undef AF_RAW /* not yet implemented */
-#undef AF_NETROM /* not yet implemented */
-#undef AF_BRIDGE /* not yet implemented */
-#undef AF_BSC /* not yet implemented */
-
-
-/*
- * see what is leftOver
- */
-union sockaddr_u {
-#ifdef AF_UNIX
- struct sockaddr_un un;
-#endif
-#ifdef AF_INET
- struct sockaddr_in in;
-#endif
-#ifdef AF_INET6
- struct sockaddr_in6 in6;
-#endif
-#ifdef AF_APPLETALK
- struct sockaddr_at at;
-#endif
-#ifdef AF_DECnet
- struct sockaddr_dn dn;
-#endif
-#ifdef AF_X25
- struct sockaddr_x25 x25;
-#endif
-#ifdef AF_AX25
- struct sockaddr_ax25 ax25;
-#endif
-#ifdef AF_IPX
- struct sockaddr_ipx ipx;
-#endif
-#ifdef AF_NETBIOS
- struct sockaddr_nb nb;
-#endif
-#ifdef AF_ATM
- struct sockaddr_atm atm;
-#endif
-#ifdef AF_BAN
- struct sockaddr_vns vns;
-#endif
-#ifdef AF_VOICEVIEW
- struct sockaddr_vv vv;
-#endif
-#ifdef AF_IRDA
- struct sockaddr_irda irda;
-#endif
-};
#if defined(TRY_AGAIN) || defined(HOST_NOT_FOUND)
@@ -11262,322 +10666,6 @@
!UnixOperatingSystem::SocketHandle class methodsFor:'constants'!
-domainCodeOf:aSymbolOrInteger
- "return the numeric AF_xxx code of a domain.
- Return nil for invalid or unsupported domains."
-
- |domainCode|
-
-%{ /*NOCONTEXT*/
- int code = -1;
-
- if (__isSmallInteger(aSymbolOrInteger) || aSymbolOrInteger == nil) {
- RETURN(aSymbolOrInteger);
- }
-#ifdef AF_INET
- else if ((aSymbolOrInteger == @symbol(inet)) || (aSymbolOrInteger == @symbol(AF_INET)))
- code = AF_INET;
-#endif
-#ifdef AF_INET6
- else if ((aSymbolOrInteger == @symbol(inet6)) || (aSymbolOrInteger == @symbol(AF_INET6)))
- code = AF_INET6;
-#endif
-#ifdef AF_UNIX
- else if ((aSymbolOrInteger == @symbol(unix)) || (aSymbolOrInteger == @symbol(AF_UNIX)))
- code = AF_UNIX;
-#endif
-#ifdef AF_APPLETALK
- else if ((aSymbolOrInteger == @symbol(appletalk)) || (aSymbolOrInteger == @symbol(AF_APPLETALK)))
- code = AF_APPLETALK;
-#endif
-#ifdef AF_DECnet
- else if ((aSymbolOrInteger == @symbol(decnet)) || (aSymbolOrInteger == @symbol(AF_DECnet)))
- code = AF_DECnet;
-#endif
-#ifdef AF_NS
- else if (aSymbolOrInteger == @symbol(AF_NS))
- code = AF_NS;
-#endif
-#ifdef AF_X25
- else if (aSymbolOrInteger == @symbol(AF_X25))
- code = AF_X25;
-#endif
-#ifdef AF_SNA
- else if (aSymbolOrInteger == @symbol(AF_SNA))
- code = AF_SNA;
-#endif
-#ifdef AF_RAW
- else if ((aSymbolOrInteger == @symbol(raw)) || (aSymbolOrInteger == @symbol(AF_RAW)))
- code = AF_RAW;
-#endif
-#ifdef AF_ISO
- else if ((aSymbolOrInteger == @symbol(iso)) || (aSymbolOrInteger == @symbol(AF_ISO)))
- code = AF_ISO;
-#endif
-#ifdef AF_NETBIOS
- else if (aSymbolOrInteger == @symbol(AF_NETBIOS))
- code = AF_NETBIOS;
-#endif
-#ifdef AF_NETBEUI
- else if (aSymbolOrInteger == @symbol(AF_NETBEUI))
- code = AF_NETBEUI;
-#endif
-#ifdef AF_IPX
- else if (aSymbolOrInteger == @symbol(AF_IPX))
- code = AF_IPX;
-#endif
-#ifdef AF_AX25
- else if (aSymbolOrInteger == @symbol(AF_AX25))
- code = AF_AX25;
-#endif
-#ifdef AF_NETROM
- else if (aSymbolOrInteger == @symbol(AF_NETROM))
- code = AF_NETROM;
-#endif
-#ifdef AF_BRIDGE
- else if (aSymbolOrInteger == @symbol(AF_BRIDGE))
- code = AF_BRIDGE;
-#endif
-#ifdef AF_BSC
- else if (aSymbolOrInteger == @symbol(AF_BSC))
- code = AF_BSC;
-#endif
-#ifdef AF_ROSE
- else if (aSymbolOrInteger == @symbol(AF_ROSE))
- code = AF_ROSE;
-#endif
-#ifdef AF_IRDA
- else if ((aSymbolOrInteger == @symbol(atmpvc)) || (aSymbolOrInteger == @symbol(AF_IRDA)))
- code = AF_IRDA;
-#endif
-#ifdef AF_BAN
- else if (aSymbolOrInteger == @symbol(AF_BAN))
- code = AF_BAN;
-#endif
-#ifdef AF_VOICEVIEW
- else if (aSymbolOrInteger == @symbol(AF_VOICEVIEW))
- code = AF_VOICEVIEW;
-#endif
-#ifdef AF_ATM
- else if (aSymbolOrInteger == @symbol(AF_ATM))
- code = AF_ATM;
-#endif
-#ifdef AF_ATMPVC
- else if (aSymbolOrInteger == @symbol(AF_ATMPVC))
- code = AF_ATMPVC;
-#endif
-#ifdef AF_ATMSVC
- else if (aSymbolOrInteger == @symbol(AF_ATMSVC))
- code = AF_ATMSVC;
-#endif
-#ifdef AF_SECURITY
- else if (aSymbolOrInteger == @symbol(AF_SECURITY))
- code = AF_SECURITY;
-#endif
-#ifdef AF_KEY
- else if (aSymbolOrInteger == @symbol(AF_KEY))
- code = AF_KEY;
-#endif
-#ifdef AF_NETLINK
- else if (aSymbolOrInteger == @symbol(AF_NETLINK))
- code = AF_NETLINK;
-#endif
-#ifdef AF_PACKET
- else if (aSymbolOrInteger == @symbol(AF_PACKET))
- code = AF_PACKET;
-#endif
-#ifdef AF_ASH
- else if (aSymbolOrInteger == @symbol(AF_ASH))
- code = AF_ASH;
-#endif
-#ifdef AF_ECONET
- else if (aSymbolOrInteger == @symbol(AF_ECONET))
- code = AF_ECONET;
-#endif
-
- if (code > 0)
- domainCode = __MKSMALLINT(code);
-%}.
-
- ^ domainCode.
-
- "
- self domainCodeOf:#inet
- self domainCodeOf:#unix
- self domainCodeOf:#inet6
- self domainCodeOf:#appletalk
- self domainCodeOf:#AF_INET
- "
-!
-
-domainSymbolOf:anInteger
-
- |domainSymbol|
-
-%{ /*NOCONTEXT*/
-
- if (__isSmallInteger(anInteger)) {
- switch(__intVal(anInteger)) {
-#ifdef AF_INET
- case AF_INET:
- domainSymbol = @symbol(AF_INET);
- break;
-#endif
-#ifdef AF_INET6
- case AF_INET6:
- domainSymbol = @symbol(AF_INET6);
- break;
-#endif
-#ifdef AF_UNIX
- case AF_UNIX:
- domainSymbol = @symbol(AF_UNIX);
- break;
-#endif
-#ifdef AF_APPLETALK
- case AF_APPLETALK:
- domainSymbol = @symbol(AF_APPLETALK);
- break;
-#endif
-#ifdef AF_DECnet
- case AF_DECnet:
- domainSymbol = @symbol(AF_DECnet);
- break;
-#endif
-#ifdef AF_NS
- case AF_NS:
- domainSymbol = @symbol(AF_NS);
- break;
-#endif
-#ifdef AF_X25
- case AF_X25:
- domainSymbol = @symbol(AF_X25);
- break;
-#endif
-#ifdef AF_SNA
- case AF_SNA:
- domainSymbol = @symbol(AF_SNA);
- break;
-#endif
-#ifdef AF_RAW
- case AF_RAW:
- domainSymbol = @symbol(AF_RAW);
- break;
-#endif
-#ifdef AF_ISO
- case AF_ISO:
- domainSymbol = @symbol(AF_ISO);
- break;
-#endif
-#ifdef AF_NETBIOS
- case AF_NETBIOS:
- domainSymbol = @symbol(AF_NETBIOS);
- break;
-#endif
-#ifdef AF_IPX
- case AF_IPX:
- domainSymbol = @symbol(AF_IPX);
- break;
-#endif
-#ifdef AF_AX25
- case AF_AX25:
- domainSymbol = @symbol(AF_AX25);
- break;
-#endif
-#ifdef AF_NETROM
- case AF_NETROM:
- domainSymbol = @symbol(AF_NETROM);
- break;
-#endif
-#ifdef AF_BRIDGE
- case AF_BRIDGE:
- domainSymbol = @symbol(AF_BRIDGE);
- break;
-#endif
-#ifdef AF_BSC
- case AF_BSC:
- domainSymbol = @symbol(AF_BSC);
- break;
-#endif
-#ifdef AF_ROSE
- case AF_ROSE:
- domainSymbol = @symbol(AF_ROSE);
- break;
-#endif
-#ifdef AF_IRDA
- case AF_IRDA:
- domainSymbol = @symbol(AF_IRDA);
- break;
-#endif
-#ifdef AF_BAN
- case AF_BAN:
- domainSymbol = @symbol(AF_BAN);
- break;
-#endif
-#ifdef AF_VOICEVIEW
- case AF_VOICEVIEW:
- domainSymbol = @symbol(AF_VOICEVIEW);
- break;
-#endif
-#ifdef AF_ATM
- case AF_ATM:
- domainSymbol = @symbol(AF_ATM);
- break;
-#endif
-#ifdef AF_ATMPVC
- case AF_ATMPVC:
- domainSymbol = @symbol(AF_ATMPVC);
- break;
-#endif
-#ifdef AF_ATMSVC
- case AF_ATMSVC:
- domainSymbol = @symbol(AF_ATMSVC);
- break;
-#endif
-#ifdef AF_SECURITY
- case AF_SECURITY:
- domainSymbol = @symbol(AF_SECURITY);
- break;
-#endif
-#ifdef AF_KEY
- case AF_KEY:
- domainSymbol = @symbol(AF_KEY);
- break;
-#endif
-#ifdef AF_NETLINK
- case AF_NETLINK:
- domainSymbol = @symbol(AF_NETLINK);
- break;
-#endif
-#ifdef AF_PACKET
- case AF_PACKET:
- domainSymbol = @symbol(AF_PACKET);
- break;
-#endif
-#ifdef AF_ASH
- case AF_ASH:
- domainSymbol = @symbol(AF_ASH);
- break;
-#endif
-#ifdef AF_ECONET
- case AF_ECONET:
- domainSymbol = @symbol(AF_ECONET);
- break;
-#endif
- }
- }
-%}.
-
- ^ domainSymbol.
-
- "
- self domainSymbolOf:(self domainCodeOf:#inet)
- self domainSymbolOf:(self domainCodeOf:#inet6)
- self domainSymbolOf:(self domainCodeOf:#unix)
- self domainSymbolOf:(self domainCodeOf:#appletalk)
- self domainSymbolOf:(self domainCodeOf:#decnet)
- "
-!
-
protocolCodeOf:aNameOrNumber
"convert a symbol to a numeric protocol code"
@@ -11665,482 +10753,6 @@
self protocolSymbolOf:(self protocolCodeOf:#udp)
self protocolSymbolOf:(self protocolCodeOf:#icmp)
"
-!
-
-socketAddressSize:aSymbolOrInteger
- "Return the os-specific size of a socket address for a domain aSymbolOrInteger.
- Return nil, if unknown or unsupported."
-
- |socketSize domainCode|
-
- domainCode := self domainCodeOf:aSymbolOrInteger.
-
-%{ /*NOCONTEXT*/
- int size = -1;
-
- if (__isSmallInteger(domainCode)) {
- switch (__intVal(domainCode)) {
-#ifdef AF_INET
- case AF_INET:
- size = sizeof(struct sockaddr_in);
- break;
-#endif
-#ifdef AF_INET6
- case AF_INET6:
- size = sizeof(struct sockaddr_in6);
- break;
-#endif
-#ifdef AF_UNIX
- case AF_UNIX:
- size = sizeof(struct sockaddr_un);
- break;
-#endif
-#ifdef AF_APPLETALK
- case AF_APPLETALK:
- size = sizeof(struct sockaddr_at);
- break;
-#endif
-#ifdef AF_DECnet
- case AF_DECnet:
- size = sizeof(struct sockaddr_dn);
- break;
-#endif
-#ifdef AF_NS
- case AF_NS:
- size = sizeof(struct sockaddr_ns);
- break;
-#endif
-#ifdef AF_X25
- case AF_X25:
- size = sizeof(struct sockaddr_x25);
- break;
-#endif
-#ifdef AF_SNA
- case AF_SNA:
- size = sizeof(struct sockaddr_sna);
- break;
-#endif
-#ifdef AF_RAW
- case AF_RAW:
- size = sizeof(struct sockaddr_raw);
- break;
-#endif
-#ifdef AF_ISO
- case AF_ISO:
- size = sizeof(struct sockaddr_iso);
- break;
-#endif
-#ifdef AF_NETBIOS
- case AF_NETBIOS:
- size = sizeof(struct sockaddr_netbios);
- break;
-#endif
-#ifdef AF_NETBEUI
- case AF_NETBEUI:
- size = sizeof(struct sockaddr_netbeui);
- break;
-#endif
-#ifdef AF_IPX
- case AF_IPX:
- size = sizeof(struct sockaddr_ipx);
- break;
-#endif
-#ifdef AF_AX25
- case AF_AX25:
- size = sizeof(struct sockaddr_ax25);
- break;
-#endif
-#ifdef AF_NETROM
- case AF_NETROM:
- size = sizeof(struct sockaddr_netrom);
- break;
-#endif
-#ifdef AF_BRIDGE
- case AF_BRIDGE:
- size = sizeof(struct sockaddr_bridge);
- break;
-#endif
-#ifdef AF_BSC
- case AF_BSC:
- size = sizeof(struct sockaddr_bsc);
- break;
-#endif
-#ifdef AF_ROSE
- case AF_ROSE:
- size = sizeof(struct sockaddr_rose);
- break;
-#endif
-#ifdef AF_IRDA
- case AF_IRDA:
- size = sizeof(struct sockaddr_irda);
- break;
-#endif
-#ifdef AF_BAN
- case AF_BAN:
- size = sizeof(struct sockaddr_ban);
- break;
-#endif
-#ifdef AF_VOICEVIEW
- case AF_VOICEVIEW:
- size = sizeof(struct sockaddr_voiceview);
- break;
-#endif
-#ifdef AF_ATM
- case AF_ATM:
- size = sizeof(struct sockaddr_atm);
- break;
-#endif
-#ifdef AF_ATMPVC
- case AF_ATMPVC:
- size = sizeof(struct sockaddr_atmpvc);
- break;
-#endif
-#ifdef AF_ATMSVC
- case AF_ATMSVC:
- size = sizeof(struct sockaddr_atmsvc);
- break;
-#endif
-#ifdef AF_NETLINK
- case AF_NETLINK:
- size = sizeof(struct sockaddr_netlink);
- break;
-#endif
-#ifdef AF_PACKET
- case AF_PACKET:
- size = sizeof(struct sockaddr_packet);
- break;
-#endif
-#ifdef AF_ASH
- case AF_ASH:
- size = sizeof(struct sockaddr_ash);
- break;
-#endif
-#ifdef AF_ECONET
- case AF_ECONET:
- size = sizeof(struct sockaddr_eco);
- break;
-#endif
- }
- }
- if (size > 0)
- socketSize = __MKSMALLINT(size);
-%}.
- ^ socketSize
-!
-
-socketTypeCodeOf:aSymbolOrInteger
-
- |typeCode|
-
-%{ /*NOCONTEXT*/
- int code = -1;
-
- if (__isSmallInteger(aSymbolOrInteger) || aSymbolOrInteger == nil) {
- RETURN(aSymbolOrInteger);
- }
-#ifdef SOCK_STREAM
- else if ((aSymbolOrInteger == @symbol(stream)) || (aSymbolOrInteger == @symbol(SOCK_STREAM)))
- code = SOCK_STREAM;
-#endif
-#ifdef SOCK_DGRAM
- else if ((aSymbolOrInteger == @symbol(datagram)) || (aSymbolOrInteger == @symbol(SOCK_DGRAM)))
- code = SOCK_DGRAM;
-#endif
-#ifdef SOCK_RAW
- else if ((aSymbolOrInteger == @symbol(raw)) || (aSymbolOrInteger == @symbol(SOCK_RAW)))
- code = SOCK_RAW;
-#endif
-#ifdef SOCK_RDM
- else if ((aSymbolOrInteger == @symbol(rdm)) || (aSymbolOrInteger == @symbol(SOCK_RDM)))
- code = SOCK_RDM;
-#endif
-#ifdef SOCK_SEQPACKET
- else if ((aSymbolOrInteger == @symbol(seqpacket)) || (aSymbolOrInteger == @symbol(SOCK_SEQPACKET)))
- code = SOCK_SEQPACKET;
-#endif
-#ifdef SOCK_PACKET
- else if ((aSymbolOrInteger == @symbol(packet)) || (aSymbolOrInteger == @symbol(SOCK_PACKET)))
- code = SOCK_PACKET;
-#endif
-
- if (code > 0)
- typeCode = __MKSMALLINT(code);
-%}.
-
- ^ typeCode.
-
- "
- self socketTypeCodeOf:#stream
- self socketTypeCodeOf:#datagram
- self socketTypeCodeOf:#raw
- "
-!
-
-socketTypeSymbolOf:anInteger
-
- |socketTypeSymbol|
-
-%{ /*NOCONTEXT*/
-
- if (__isSmallInteger(anInteger)) {
- switch(__intVal(anInteger)) {
-#ifdef SOCK_STREAM
- case SOCK_STREAM:
- socketTypeSymbol = @symbol(SOCK_STREAM);
- break;
-#endif
-#ifdef SOCK_DGRAM
- case SOCK_DGRAM:
- socketTypeSymbol = @symbol(SOCK_DGRAM);
- break;
-#endif
-#ifdef SOCK_RAW
- case SOCK_RAW:
- socketTypeSymbol = @symbol(SOCK_RAW);
- break;
-#endif
-#ifdef SOCK_RDM
- case SOCK_RDM:
- socketTypeSymbol = @symbol(SOCK_RDM);
- break;
-#endif
-#ifdef SOCK_SEQPACKET
- case SOCK_SEQPACKET:
- socketTypeSymbol = @symbol(SOCK_SEQPACKET);
- break;
-#endif
-#ifdef SOCK_PACKET
- case SOCK_PACKET:
- socketTypeSymbol = @symbol(SOCK_PACKET);
- break;
-#endif
- }
- }
-%}.
- ^ socketTypeSymbol.
-!
-
-supportedProtocolFamilies
- "return a collection of supported protocol families.
- This list specifies what the Socket class supports -
- socket creation may still fail, if your system was built without it.
- For backward compatibility, the returned list includes the old
- (non-AF-prefixed) symbols; these will vanish."
-
- |list|
-
- list := OrderedCollection new.
-
-%{
-#ifdef AF_INET
-%}.
- list add:#AF_INET.
- list add:#inet.
-%{
-#endif
-%}.
-
-%{
-#ifdef AF_UNIX
-%}.
- list add:#AF_UNIX.
- list add:#unix.
-%{
-#endif
-%}.
-
-%{
-#ifdef AF_INET6
-%}.
- list add:#AF_INET6. "/ internet v6
- list add:#inet6.
-%{
-#endif
-%}.
-
-%{
-#ifdef AF_APPLETALK
-%}.
- list add:#AF_APPLETALK.
- list add:#appletalk.
-%{
-#endif
-%}.
-
-%{
-#ifdef AF_DECnet
-%}.
- list add:#AF_DECnet.
- list add:#decnet.
-%{
-#endif
-%}.
-
-%{
-#ifdef AF_NS
-%}.
- list add:#AF_NS. "/ Xerox XNS
-%{
-#endif
-%}.
-
-%{
-#ifdef AF_X25
-%}.
- list add:#AF_X25.
-%{
-#endif
-%}.
-
-%{
-#ifdef AF_SNA
-%}.
- list add:#AF_SNA. "/ IBM SNA
-%{
-#endif
-%}.
-
-%{
-#ifdef AF_RAW
-%}.
- list add:#AF_RAW. "/ RAW packets
-%{
-#endif
-%}.
-
-%{
-#ifdef AF_ISO
-%}.
- list add:#AF_ISO.
-%{
-#endif
-%}.
-
-%{
-#ifdef AF_NETBIOS
-%}.
- list add:#AF_NETBIOS.
-%{
-#endif
-%}.
-
-%{
-#ifdef AF_IPX
-%}.
- list add:#AF_IPX. "/ Novell IPX
-%{
-#endif
-%}.
-
-%{
-#ifdef AF_AX25
-%}.
- list add:#AF_AX25. "/ Amateur Radio AX.25
-%{
-#endif
-%}.
-
-%{
-#ifdef AF_NETROM
-%}.
- list add:#AF_NETROM. "/ Amateur Radio NET/ROM
-%{
-#endif
-%}.
-
-%{
-#ifdef AF_BRIDGE
-%}.
- list add:#AF_BRIDGE. "/ multiprotocol bridge
-%{
-#endif
-%}.
-
-%{
-#ifdef AF_BSC
-%}.
- list add:#AF_BSC. "/ BISYNC 2780/3780
-%{
-#endif
-%}.
-
-%{
-#ifdef AF_ROSE
-%}.
- list add:#AF_ROSE. "/ Amateur Radio X.25 PLP
-%{
-#endif
-%}.
-
-%{
-#ifdef AF_IRDA
-%}.
- list add:#AF_IRDA. "/ infrared
-%{
-#endif
-%}.
-
-%{
-#ifdef AF_NETLINK
-%}.
- list add:#AF_NETLINK.
-%{
-#endif
-%}.
-
-%{
-#ifdef AF_NETBEUI
-%}.
- list add:#AF_NETBEUI.
-%{
-#endif
-%}.
-
-%{
-#ifdef AF_ATM
-%}.
- list add:#AF_ATM. "/ windose ATM
-%{
-#endif
-%}.
-
-%{
-#ifdef AF_ATMPVC
-%}.
- list add:#AF_ATMPVC. "/ linux ATM
-%{
-#endif
-%}.
-
-%{
-#ifdef AF_ATMSVC
-%}.
- list add:#AF_ATMSVC. "/ linux ATM
-%{
-#endif
-%}.
-
-%{
-#ifdef AF_BAN
-%}.
- list add:#AF_BAN. "/ windose
-%{
-#endif
-%}.
-
-%{
-#ifdef AF_VOICEVIEW
-%}.
- list add:#AF_VOICEVIEW. "/ windose
-%{
-#endif
-%}.
-
- ^ list
-
- "
- self supportedProtocolFamilies
- "
! !
!UnixOperatingSystem::SocketHandle class methodsFor:'initialization'!
@@ -12160,8 +10772,8 @@
|error errorString result domain type proto|
- domain := self domainCodeOf:domainArg.
- type := self socketTypeCodeOf:typeArg.
+ domain := OperatingSystem domainCodeOf:domainArg.
+ type := OperatingSystem socketTypeCodeOf:typeArg.
proto := self protocolCodeOf:protoArg.
%{ /* STACK:32000 */
@@ -12173,24 +10785,24 @@
int ret, cnt = 0;
if (hostName == nil) {
- __hostName = 0;
+ __hostName = 0;
} else if (__isString(hostName) || __isSymbol(hostName)) {
- __hostName = __stringVal(hostName);
+ __hostName = __stringVal(hostName);
} else {
- error = @symbol(badArgument1);
- goto err;
+ error = @symbol(badArgument1);
+ goto err;
}
if (serviceName == nil) {
- __serviceName = 0;
+ __serviceName = 0;
} else if (__isString(serviceName) || __isSymbol(serviceName)) {
- __serviceName = __stringVal(serviceName);
+ __serviceName = __stringVal(serviceName);
} else {
- error = @symbol(badArgument2);
- goto err;
+ error = @symbol(badArgument2);
+ goto err;
}
if (__hostName == 0 && __serviceName == 0) {
- error = @symbol(badArgument);
- goto err;
+ error = @symbol(badArgument);
+ goto err;
}
{
@@ -12204,98 +10816,98 @@
memset(&hints, 0, sizeof(hints));
if (__isSmallInteger(domain))
- hints.ai_family = __intVal(domain);
+ hints.ai_family = __intVal(domain);
if (__isSmallInteger(type))
- hints.ai_socktype = __intVal(type);
+ hints.ai_socktype = __intVal(type);
if (__isSmallInteger(proto))
- hints.ai_protocol = __intVal(proto);
+ hints.ai_protocol = __intVal(proto);
do {
- __BEGIN_INTERRUPTABLE__
- ret = getaddrinfo(__hostName, __serviceName, &hints, &info);
- __END_INTERRUPTABLE__
+ __BEGIN_INTERRUPTABLE__
+ ret = getaddrinfo(__hostName, __serviceName, &hints, &info);
+ __END_INTERRUPTABLE__
} while (ret == EAI_SYSTEM && errno == EINTR);
if (ret != 0) {
- switch (ret) {
- case EAI_FAMILY:
- error = @symbol(badProtocol);
- break;
- case EAI_SOCKTYPE:
- error = @symbol(badSocketType);
- break;
- case EAI_BADFLAGS:
- error = @symbol(badFlags);
- break;
- case EAI_NONAME:
- error = @symbol(unknownHost);
- break;
- case EAI_SERVICE:
- error = @symbol(unknownService);
- break;
- case EAI_ADDRFAMILY :
- error = @symbol(unknownHostForProtocol);
- break;
- case EAI_NODATA:
- error = @symbol(noAddress);
- break;
- case EAI_MEMORY:
- error = @symbol(allocationFailure);
- break;
- case EAI_FAIL:
- error = @symbol(permanentFailure);
- break;
- case EAI_AGAIN:
- error = @symbol(tryAgain);
- break;
- case EAI_SYSTEM:
- error = @symbol(systemError);
- break;
- default:
- error = @symbol(unknownError);
- }
- errorString = __MKSTRING(gai_strerror(ret));
- goto err;
+ switch (ret) {
+ case EAI_FAMILY:
+ error = @symbol(badProtocol);
+ break;
+ case EAI_SOCKTYPE:
+ error = @symbol(badSocketType);
+ break;
+ case EAI_BADFLAGS:
+ error = @symbol(badFlags);
+ break;
+ case EAI_NONAME:
+ error = @symbol(unknownHost);
+ break;
+ case EAI_SERVICE:
+ error = @symbol(unknownService);
+ break;
+ case EAI_ADDRFAMILY :
+ error = @symbol(unknownHostForProtocol);
+ break;
+ case EAI_NODATA:
+ error = @symbol(noAddress);
+ break;
+ case EAI_MEMORY:
+ error = @symbol(allocationFailure);
+ break;
+ case EAI_FAIL:
+ error = @symbol(permanentFailure);
+ break;
+ case EAI_AGAIN:
+ error = @symbol(tryAgain);
+ break;
+ case EAI_SYSTEM:
+ error = @symbol(systemError);
+ break;
+ default:
+ error = @symbol(unknownError);
+ }
+ errorString = __MKSTRING(gai_strerror(ret));
+ goto err;
}
for (cnt=0, infop=info; infop; infop=infop->ai_next)
- cnt++;
+ cnt++;
result = __ARRAY_NEW_INT(cnt);
if (result == nil) {
- error = @symbol(allocationFailure);
- goto err;
+ error = @symbol(allocationFailure);
+ goto err;
}
for (infop=info, cnt=0; infop; infop=infop->ai_next, cnt++) {
- OBJ o, resp;
-
- resp = __ARRAY_NEW_INT(6);
- if (resp == nil) {
- error = @symbol(allocationFailure);
- goto err;
- }
-
- __ArrayInstPtr(result)->a_element[cnt] = resp;
- __STORE(result, resp);
- __ArrayInstPtr(resp)->a_element[0] = __MKSMALLINT(infop->ai_flags);
- __ArrayInstPtr(resp)->a_element[1] = __MKSMALLINT(infop->ai_family);
- __ArrayInstPtr(resp)->a_element[2] = __MKSMALLINT(infop->ai_socktype);
- __ArrayInstPtr(resp)->a_element[3] = __MKSMALLINT(infop->ai_protocol);
- o = __BYTEARRAY_NEW_INT(infop->ai_addrlen);
- if (o == nil) {
- error = @symbol(allocationFailure);
- goto err;
- }
- memcpy(__byteArrayVal(o), infop->ai_addr, infop->ai_addrlen);
+ OBJ o, resp;
+
+ resp = __ARRAY_NEW_INT(6);
+ if (resp == nil) {
+ error = @symbol(allocationFailure);
+ goto err;
+ }
+
+ __ArrayInstPtr(result)->a_element[cnt] = resp;
+ __STORE(result, resp);
+ __ArrayInstPtr(resp)->a_element[0] = __MKSMALLINT(infop->ai_flags);
+ __ArrayInstPtr(resp)->a_element[1] = __MKSMALLINT(infop->ai_family);
+ __ArrayInstPtr(resp)->a_element[2] = __MKSMALLINT(infop->ai_socktype);
+ __ArrayInstPtr(resp)->a_element[3] = __MKSMALLINT(infop->ai_protocol);
+ o = __BYTEARRAY_NEW_INT(infop->ai_addrlen);
+ if (o == nil) {
+ error = @symbol(allocationFailure);
+ goto err;
+ }
+ memcpy(__byteArrayVal(o), infop->ai_addr, infop->ai_addrlen);
__ArrayInstPtr(resp)->a_element[4] = o;
- __STORE(resp, o);
- if (infop->ai_canonname) {
- o = __MKSTRING(infop->ai_canonname);
- if (o == nil) {
- error = @symbol(allocationFailure);
- goto err;
- }
- __ArrayInstPtr(resp)->a_element[5] = o;
- __STORE(resp, o);
- }
+ __STORE(resp, o);
+ if (infop->ai_canonname) {
+ o = __MKSTRING(infop->ai_canonname);
+ if (o == nil) {
+ error = @symbol(allocationFailure);
+ goto err;
+ }
+ __ArrayInstPtr(resp)->a_element[5] = o;
+ __STORE(resp, o);
+ }
}
err:
@@ -12312,130 +10924,130 @@
int i;
if (__serviceName) {
- struct servent *sp;
- char *__proto = 0;
-
- if (__isString(protoArg) || __isSymbol(protoArg))
- __proto = __stringVal(protoArg);
-
- sp = getservbyname(__serviceName, __proto);
- if (sp == NULL) {
- errorString = @symbol(unknownService);
- error = __mkSmallInteger(-3);
- goto err;
- }
- port = sp->s_port;
+ struct servent *sp;
+ char *__proto = 0;
+
+ if (__isString(protoArg) || __isSymbol(protoArg))
+ __proto = __stringVal(protoArg);
+
+ sp = getservbyname(__serviceName, __proto);
+ if (sp == NULL) {
+ errorString = @symbol(unknownService);
+ error = __mkSmallInteger(-3);
+ goto err;
+ }
+ port = sp->s_port;
}
if (__hostName) {
# ifdef USE_H_ERRNO
- do {
- /* __BEGIN_INTERRUPTABLE__ is dangerous, because gethostbyname
- * uses a static data area
- */
- __BEGIN_INTERRUPTABLE__
- hp = gethostbyname(__hostName);
- __END_INTERRUPTABLE__
- } while ((hp == NULL)
- && (
- (h_errno == TRY_AGAIN)
- || errno == EINTR
+ do {
+ /* __BEGIN_INTERRUPTABLE__ is dangerous, because gethostbyname
+ * uses a static data area
+ */
+ __BEGIN_INTERRUPTABLE__
+ hp = gethostbyname(__hostName);
+ __END_INTERRUPTABLE__
+ } while ((hp == NULL)
+ && (
+ (h_errno == TRY_AGAIN)
+ || errno == EINTR
# ifdef IRIX5_3
- || (errno == ECONNREFUSED)
+ || (errno == ECONNREFUSED)
# endif
- )
- );
- if (hp == 0) {
- switch (h_errno) {
- case HOST_NOT_FOUND:
- errorString = @symbol(unknownHost);
- break;
- case NO_ADDRESS:
- errorString = @symbol(noAddress);
- break;
- case NO_RECOVERY:
- errorString = @symbol(permanentFailure);
- break;
- case TRY_AGAIN:
- errorString = @symbol(tryAgain);
- break;
- default:
- errorString = @symbol(unknownError);
- break;
- }
- error = __mkSmallInteger(h_errno);
- goto err;
- }
+ )
+ );
+ if (hp == 0) {
+ switch (h_errno) {
+ case HOST_NOT_FOUND:
+ errorString = @symbol(unknownHost);
+ break;
+ case NO_ADDRESS:
+ errorString = @symbol(noAddress);
+ break;
+ case NO_RECOVERY:
+ errorString = @symbol(permanentFailure);
+ break;
+ case TRY_AGAIN:
+ errorString = @symbol(tryAgain);
+ break;
+ default:
+ errorString = @symbol(unknownError);
+ break;
+ }
+ error = __mkSmallInteger(h_errno);
+ goto err;
+ }
# else /* !USE_H_ERRNO */
- hp = gethostbyname(__hostName);
- if (hp == 0) {
- errorString = @symbol(unknownHost);
- error = __mkSmallInteger(-1);
- goto err;
- }
+ hp = gethostbyname(__hostName);
+ if (hp == 0) {
+ errorString = @symbol(unknownHost);
+ error = __mkSmallInteger(-1);
+ goto err;
+ }
# endif /* !USE_H_ERRNO*/
- if (__isSmallInteger(domain) && hp->h_addrtype != __smallIntegerVal(domain)) {
- errorString = @symbol(unknownHost);
- error = __mkSmallInteger(-2);
- goto err;
- }
-
- for (cnt = 0, addrpp = hp->h_addr_list; *addrpp; addrpp++)
- cnt++;
- addrpp = hp->h_addr_list;
+ if (__isSmallInteger(domain) && hp->h_addrtype != __smallIntegerVal(domain)) {
+ errorString = @symbol(unknownHost);
+ error = __mkSmallInteger(-2);
+ goto err;
+ }
+
+ for (cnt = 0, addrpp = hp->h_addr_list; *addrpp; addrpp++)
+ cnt++;
+ addrpp = hp->h_addr_list;
} else {
- cnt = 1;
+ cnt = 1;
}
result = __ARRAY_NEW_INT(cnt);
if (result == nil) {
- error = @symbol(allocationFailure);
- goto err;
+ error = @symbol(allocationFailure);
+ goto err;
}
for (i = 0; i < cnt; i++) {
- OBJ o, resp;
- struct sockaddr_in *sa;
-
- resp = __ARRAY_NEW_INT(6);
- if (resp == nil) {
- error = @symbol(allocationFailure);
- goto err;
- }
-
- __ArrayInstPtr(result)->a_element[i] = resp;
- __STORE(result, resp);
- __ArrayInstPtr(resp)->a_element[0] = __mkSmallInteger(0);
- __ArrayInstPtr(resp)->a_element[2] = type;
- __ArrayInstPtr(resp)->a_element[3] = proto;
- o = __BYTEARRAY_NEW_INT(sizeof(*sa));
- if (o == nil) {
- error = @symbol(allocationFailure);
- goto err;
- }
- __ArrayInstPtr(resp)->a_element[4] = o;
- __STORE(resp, o);
- sa = (struct sockaddr_in *)__byteArrayVal(o);
- sa->sin_port = port;
-
- if (__hostName) {
- sa->sin_family = hp->h_addrtype;
- memcpy(&sa->sin_addr, *addrpp, hp->h_length);
- __ArrayInstPtr(resp)->a_element[1] = __mkSmallInteger(hp->h_addrtype);
- if (hp->h_name) {
- o = __MKSTRING(hp->h_name);
- if (o == nil) {
- error = @symbol(allocationFailure);
- goto err;
- }
- __ArrayInstPtr(resp)->a_element[5] = o;
- __STORE(resp, o);
- }
- addrpp++;
- } else{
- __ArrayInstPtr(resp)->a_element[1] = domain;
- }
+ OBJ o, resp;
+ struct sockaddr_in *sa;
+
+ resp = __ARRAY_NEW_INT(6);
+ if (resp == nil) {
+ error = @symbol(allocationFailure);
+ goto err;
+ }
+
+ __ArrayInstPtr(result)->a_element[i] = resp;
+ __STORE(result, resp);
+ __ArrayInstPtr(resp)->a_element[0] = __mkSmallInteger(0);
+ __ArrayInstPtr(resp)->a_element[2] = type;
+ __ArrayInstPtr(resp)->a_element[3] = proto;
+ o = __BYTEARRAY_NEW_INT(sizeof(*sa));
+ if (o == nil) {
+ error = @symbol(allocationFailure);
+ goto err;
+ }
+ __ArrayInstPtr(resp)->a_element[4] = o;
+ __STORE(resp, o);
+ sa = (struct sockaddr_in *)__byteArrayVal(o);
+ sa->sin_port = port;
+
+ if (__hostName) {
+ sa->sin_family = hp->h_addrtype;
+ memcpy(&sa->sin_addr, *addrpp, hp->h_length);
+ __ArrayInstPtr(resp)->a_element[1] = __mkSmallInteger(hp->h_addrtype);
+ if (hp->h_name) {
+ o = __MKSTRING(hp->h_name);
+ if (o == nil) {
+ error = @symbol(allocationFailure);
+ goto err;
+ }
+ __ArrayInstPtr(resp)->a_element[5] = o;
+ __STORE(resp, o);
+ }
+ addrpp++;
+ } else{
+ __ArrayInstPtr(resp)->a_element[1] = domain;
+ }
}
err:;
@@ -12446,44 +11058,44 @@
#endif
%}.
error notNil ifTrue:[
- NameLookupError raiseWith:error errorString:errorString.
+ NameLookupError raiseWith:error errorString:errorString.
].
1 to:result size do:[:i |
- |entry dom info|
-
- info := SocketAddressInfo new.
- entry := result at:i.
- info flags:(entry at:1).
- info domain:(dom := self domainSymbolOf:(entry at:2)).
- info type:(self socketTypeSymbolOf:(entry at:3)).
- info protocol:(self protocolSymbolOf:(entry at:4)).
- info socketAddress:((SocketAddress newDomain:dom) fromBytes:(entry at:5)).
- info canonicalName:(entry at:6).
- result at:i put:info
+ |entry dom info|
+
+ info := SocketAddressInfo new.
+ entry := result at:i.
+ info flags:(entry at:1).
+ info domain:(dom := OperatingSystem domainSymbolOf:(entry at:2)).
+ info type:(OperatingSystem socketTypeSymbolOf:(entry at:3)).
+ info protocol:(self protocolSymbolOf:(entry at:4)).
+ info socketAddress:((SocketAddress newDomain:dom) fromBytes:(entry at:5)).
+ info canonicalName:(entry at:6).
+ result at:i put:info
].
^ result
"
self getAddressInfo:'localhost' serviceName:nil
- domain:nil type:nil protocol:nil flags:nil
+ domain:nil type:nil protocol:nil flags:nil
self getAddressInfo:'localhost' serviceName:nil
- domain:#inet type:#stream protocol:nil flags:nil
+ domain:#inet type:#stream protocol:nil flags:nil
self getAddressInfo:'localhost' serviceName:nil
- domain:#inet type:#stream protocol:#tcp flags:nil
+ domain:#inet type:#stream protocol:#tcp flags:nil
self getAddressInfo:'blurb.exept.de' serviceName:nil
- domain:#inet type:nil protocol:nil flags:nil
+ domain:#inet type:nil protocol:nil flags:nil
self getAddressInfo:'1.2.3.4' serviceName:'bla'
- domain:#inet type:nil protocol:nil flags:nil
+ domain:#inet type:nil protocol:nil flags:nil
self getAddressInfo:'localhost' serviceName:'echo'
- domain:#inet type:nil protocol:nil flags:nil
+ domain:#inet type:nil protocol:nil flags:nil
self getAddressInfo:nil serviceName:'echo'
- domain:#inet type:nil protocol:nil flags:nil
+ domain:#inet type:nil protocol:nil flags:nil
self getAddressInfo:nil serviceName:nil
- domain:#inet type:nil protocol:nil flags:nil
+ domain:#inet type:nil protocol:nil flags:nil
self getAddressInfo:'www.google.de' serviceName:nil
- domain:nil type:nil protocol:nil flags:nil
+ domain:nil type:nil protocol:nil flags:nil
self getAddressInfo:'smc1' serviceName:nil
- domain:nil type:nil protocol:nil flags:nil
+ domain:nil type:nil protocol:nil flags:nil
"
!
@@ -13188,15 +11800,19 @@
domain:domainArg type:typeArg protocol:protocolArg
"set up socket with domain, type and protocol number.
- This is a low level entry; no binding, listening or connect
- is done. Both arguments must be symbols from one of
- #inet,#unix, #appletalk, #x25 .. and #stream, #datagram, #raw resp."
-
- |error domainCode protocolNumber|
-
- domainCode := self class domainCodeOf:domainArg.
+ This is a low level entry; no binding, listening or connect is done.
+ All arguments must be symbols from one of
+ domainArg: #AF_INET, #AF_UNIX, #AF_APPLETALK (#inet, #unix, #appletalk, #x25) ..
+ type: #SOCK_STREAM, #SOCK_DGRAM (#stream, #datagram, #raw) ..
+ protocol: #tcp, #udp, #raw ..
+ "
+
+ |error domainCode typeCode protocolNumber|
+
+ domainCode := OperatingSystem domainCodeOf:domainArg.
+ typeCode := OperatingSystem socketTypeCodeOf:typeArg.
protocolArg notNil ifTrue:[
- protocolNumber := self class protocolCodeOf:protocolArg
+ protocolNumber := self class protocolCodeOf:protocolArg
].
%{
@@ -13205,82 +11821,58 @@
int on = 1;
if (__INST(fd) != nil) {
- error = @symbol(internalError);
- goto err;
+ error = @symbol(internalError);
+ goto err;
}
if (! __isSmallInteger(domainCode)) {
- error = @symbol(badArgument1);
- goto err;
- }
- if (! __isSymbol(typeArg)) {
- error = @symbol(badArgument2);
- goto err;
+ error = @symbol(badArgument1);
+ goto err;
+ }
+ if (! __isSmallInteger(typeArg)) {
+ error = @symbol(badArgument2);
+ goto err;
}
if (protocolNumber != nil) {
- if (!__isSmallInteger(protocolNumber)) {
- error = @symbol(badArgument3);
- goto err;
- }
- proto = __smallIntegerVal(protocolNumber);
+ if (!__isSmallInteger(protocolNumber)) {
+ error = @symbol(badArgument3);
+ goto err;
+ }
+ proto = __smallIntegerVal(protocolNumber);
}
dom = __smallIntegerVal(domainCode);
/*
* get socket-type and protocol-type
*/
-
-#ifdef SOCK_STREAM
- if (typeArg == @symbol(stream)) {
- typ = SOCK_STREAM;
- } else
-#endif
-#ifdef SOCK_DGRAM
- if (typeArg == @symbol(datagram)) {
- typ = SOCK_DGRAM;
- } else
-#endif
-#ifdef SOCK_RAW
- if (typeArg == @symbol(raw))
- typ = SOCK_RAW;
- else
-#endif
-#ifdef SOCK_SEQPACKET
- if (typeArg == @symbol(seqPacket))
- typ = SOCK_SEQPACKET;
- else
-#endif
- {
- error = @symbol(badArgument2);
- goto err;
- }
+ typ = __intVal(typeArg);
againSocket:
sock = socket(dom, typ, proto);
if (sock < 0) {
- if (errno == EINTR) {
- __HANDLE_INTERRUPTS__;
- goto againSocket;
- } else
-#if defined(EPROTONOSUPPORT) /* for SGI */
- if (errno == EPROTONOSUPPORT && proto != 0) {
- proto = 0;
- goto againSocket;
- } else
-#endif
- {
- error = __mkSmallInteger(errno);
- goto err;
- }
+ if (errno == EINTR) {
+ __HANDLE_INTERRUPTS__;
+ goto againSocket;
+ } else
+# if defined(EPROTONOSUPPORT) /* for SGI */
+ if (errno == EPROTONOSUPPORT && proto != 0) {
+ proto = 0;
+ goto againSocket;
+ } else
+# endif
+ {
+ error = __mkSmallInteger(errno);
+ goto err;
+ }
}
__INST(fd) = __mkSmallInteger(sock);
err:;
-#else
+# else /* NOSOCKET */
error := @symbol(notImplemented);
-#endif
+# endif /* NOSOCKET */
%}.
error notNil ifTrue:[
- ^ self error:error.
+ ^ self error:error.
].
self register.
@@ -13560,7 +12152,7 @@
!UnixOperatingSystem class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libbasic/UnixOperatingSystem.st,v 1.173 2003-07-12 17:27:15 stefan Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/UnixOperatingSystem.st,v 1.174 2003-07-15 12:19:45 cg Exp $'
! !
UnixOperatingSystem initialize!