# HG changeset patch # User Claus Gittinger # Date 1058271585 -7200 # Node ID c8964822d8fdaa338fdadb24771590b069be3c6b # Parent e9783b22b7dc319eb478b1b51949c3b434fd89ab moved all socket constant queries from SocketHandle (which is OS-specific) to OS. (code is shared between Win32 and Unix, but SocketHandle is not.) diff -r e9783b22b7dc -r c8964822d8fd AbstractOperatingSystem.st --- 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! diff -r e9783b22b7dc -r c8964822d8fd UnixOperatingSystem.st --- 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 -# endif - -# ifdef NEXT3 -# include -# 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 -# else -# undef AF_UNIX -# endif -#endif - -#ifdef AF_INET -# include -# if defined(PRE_SUSE_7_2) -# if defined(LINUX) && defined(AF_INET6) -# include -# else -# include -# endif -# else -# include -# endif -# if !defined(LINUX) -# if ! (defined(SYSV3) && defined(mc88k)) -# include -# endif -# endif -#endif - -#ifdef AF_INET6 -# if defined(LINUX) && defined(__GLIBC__) -# if defined(PRE_SUSE_7_2) -# include -# endif -# else -# undef AF_INET6 -# endif -#endif - -#ifdef AF_APPLETALK -# ifdef LINUX -# include -# include -# else -# undef AF_APPLETALK -# endif -#endif - -#ifdef AF_DECnet -# ifdef solaris2_0 -# include -# else -# undef AF_DECnet -# endif -#endif - -#ifdef AF_X25 -# ifdef LINUX -# include -# else -# undef AF_X25 -# endif -#endif - -#ifdef AF_AX25 -# ifdef LINUX -# include -# else -# undef AF_AX25 -# endif -#endif - -#ifdef AF_IPX -# ifdef LINUX -# include -# else -# ifdef WIN32 -# include -# else -# undef AF_IPX -# endif -# endif -#endif - -#ifdef AF_NETBIOS -# ifdef WIN32 -# include -# else -# undef AF_NETBIOS -# endif -#endif - -#ifdef AF_ATM -# ifdef WIN32 -# include -# else -# undef AF_ATM -# endif -#endif - -#if defined(AF_ATMPVC) || defined(AF_ATMSVC) -# ifdef LINUX -# include -# else -# undef AF_ATMPVC -# undef AF_ATMSVC -# endif -#endif - -#ifdef AF_BAN -# ifdef WIN32 -# include -# else -# undef AF_BAN -# endif -#endif - -#ifdef AF_VOICEVIEW -# ifdef WIN32 -# include -# else -# undef AF_VOICEVIEW -# endif -#endif - -#ifdef AF_IRDA -# ifdef LINUX -# include -# 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!