13454 tweaked for a particular system by editing /etc/gai.conf" |
13457 tweaked for a particular system by editing /etc/gai.conf" |
13455 |
13458 |
13456 |result domain type proto encodedHostName| |
13459 |result domain type proto encodedHostName| |
13457 |
13460 |
13458 domainArg notNil ifTrue:[ |
13461 domainArg notNil ifTrue:[ |
13459 domain := OperatingSystem domainCodeOf:domainArg. |
13462 domain := OperatingSystem domainCodeOf:domainArg. |
13460 ]. |
13463 ]. |
13461 typeArg notNil ifTrue:[ |
13464 typeArg notNil ifTrue:[ |
13462 type := OperatingSystem socketTypeCodeOf:typeArg. |
13465 type := OperatingSystem socketTypeCodeOf:typeArg. |
13463 ]. |
13466 ]. |
13464 protoArg notNil ifTrue:[ |
13467 protoArg notNil ifTrue:[ |
13465 proto := self protocolCodeOf:protoArg. |
13468 proto := self protocolCodeOf:protoArg. |
13466 ]. |
13469 ]. |
13467 |
13470 |
13468 hostName isNil ifTrue:[ |
13471 hostName isNil ifTrue:[ |
13469 encodedHostName := nil. |
13472 encodedHostName := nil. |
13470 ] ifFalse:[ |
13473 ] ifFalse:[ |
13471 encodedHostName := hostName utf8Encoded. |
13474 encodedHostName := hostName utf8Encoded. |
13472 ]. |
13475 ]. |
13473 (encodedHostName ~~ hostName and:[OperatingSystem getCodeset ~~ #utf8]) ifTrue:[ |
13476 (encodedHostName ~~ hostName and:[OperatingSystem getCodeset ~~ #utf8]) ifTrue:[ |
13474 "hostName is not plain ASCII - so this is an IDN domain name. Have to ensure, that the locale is UTF-8. |
13477 "hostName is not plain ASCII - so this is an IDN domain name. Have to ensure, that the locale is UTF-8. |
13475 Block interrupt to not affect other ST/X processes while the locale is changed." |
13478 Block interrupt to not affect other ST/X processes while the locale is changed." |
13476 |interruptsBlocked oldLocale| |
13479 |interruptsBlocked oldLocale| |
13477 |
13480 |
13478 interruptsBlocked := OperatingSystem blockInterrupts. |
13481 interruptsBlocked := OperatingSystem blockInterrupts. |
13479 oldLocale := OperatingSystem setLocale:#'LC_CTYPE' to:nil. |
13482 oldLocale := OperatingSystem setLocale:#'LC_CTYPE' to:nil. |
13480 OperatingSystem setLocale:#'LC_CTYPE' to:'en_US.UTF-8'. |
13483 OperatingSystem setLocale:#'LC_CTYPE' to:'en_US.UTF-8'. |
13481 result := self primGetAddressInfo:encodedHostName serviceName:serviceName domainCode:domain socketTypeCode:type protocolCode:proto flags:flags. |
13484 result := self primGetAddressInfo:encodedHostName serviceName:serviceName domainCode:domain socketTypeCode:type protocolCode:proto flags:flags. |
13482 OperatingSystem setLocale:#'LC_CTYPE' to:oldLocale. |
13485 OperatingSystem setLocale:#'LC_CTYPE' to:oldLocale. |
13483 interruptsBlocked ifFalse:[ |
13486 interruptsBlocked ifFalse:[ |
13484 OperatingSystem unblockInterrupts. |
13487 OperatingSystem unblockInterrupts. |
13485 ]. |
13488 ]. |
13486 ] ifFalse:[ |
13489 ] ifFalse:[ |
13487 result := self primGetAddressInfo:encodedHostName serviceName:serviceName domainCode:domain socketTypeCode:type protocolCode:proto flags:flags. |
13490 result := self primGetAddressInfo:encodedHostName serviceName:serviceName domainCode:domain socketTypeCode:type protocolCode:proto flags:flags. |
13488 ]. |
13491 ]. |
13489 result isArray ifFalse:[ |
13492 result isArray ifFalse:[ |
13490 |request| |
13493 |request| |
13491 request := SocketAddressInfo new |
13494 request := SocketAddressInfo new |
13492 domain:domainArg; |
13495 domain:domainArg; |
13493 type:typeArg; |
13496 type:typeArg; |
13494 protocol:protoArg; |
13497 protocol:protoArg; |
13495 canonicalName:hostName; |
13498 canonicalName:hostName; |
13496 serviceName:serviceName. |
13499 serviceName:serviceName. |
13497 ^ (HostNameLookupError new |
13500 ^ (HostNameLookupError new |
13498 parameter:result; |
13501 parameter:result; |
13499 messageText:' - ', (result printString); |
13502 messageText:' - ', (result printString); |
13500 request:request) raiseRequest. |
13503 request:request) raiseRequest. |
13501 ]. |
13504 ]. |
13502 1 to:result size do:[:i | |
13505 1 to:result size do:[:i | |
13503 |entry dom info| |
13506 |entry dom info| |
13504 |
13507 |
13505 entry := result at:i. |
13508 entry := result at:i. |
13506 |
13509 |
13507 info := SocketAddressInfo new. |
13510 info := SocketAddressInfo new. |
13508 info |
13511 info |
13509 flags:(entry at:1); |
13512 flags:(entry at:1); |
13510 domain:(dom := OperatingSystem domainSymbolOf:(entry at:2)); |
13513 domain:(dom := OperatingSystem domainSymbolOf:(entry at:2)); |
13511 type:(OperatingSystem socketTypeSymbolOf:(entry at:3)); |
13514 type:(OperatingSystem socketTypeSymbolOf:(entry at:3)); |
13512 protocol:(self protocolSymbolOf:(entry at:4)); |
13515 protocol:(self protocolSymbolOf:(entry at:4)); |
13513 socketAddress:((SocketAddress newDomain:dom) fromBytes:(entry at:5)); |
13516 socketAddress:((SocketAddress newDomain:dom) fromBytes:(entry at:5)); |
13514 canonicalName:(entry at:6). |
13517 canonicalName:(entry at:6). |
13515 |
13518 |
13516 result at:i put:info. |
13519 result at:i put:info. |
13517 ]. |
13520 ]. |
13518 ^ result. |
13521 ^ result. |
13519 |
13522 |
13520 |
13523 |
13521 " |
13524 " |
13522 self getAddressInfo:'localhost' serviceName:nil |
13525 self getAddressInfo:'localhost' serviceName:nil |
13523 domain:nil type:nil protocol:nil flags:nil |
13526 domain:nil type:nil protocol:nil flags:nil |
13524 self getAddressInfo:nil serviceName:22 |
13527 self getAddressInfo:nil serviceName:22 |
13525 domain:nil type:nil protocol:nil flags:nil |
13528 domain:nil type:nil protocol:nil flags:nil |
13526 self getAddressInfo:'' serviceName:22 |
13529 self getAddressInfo:'' serviceName:22 |
13527 domain:nil type:nil protocol:nil flags:nil |
13530 domain:nil type:nil protocol:nil flags:nil |
13528 self getAddressInfo:'localhost' serviceName:nil |
13531 self getAddressInfo:'localhost' serviceName:nil |
13529 domain:nil type:#stream protocol:nil flags:nil |
13532 domain:nil type:#stream protocol:nil flags:nil |
13530 self getAddressInfo:'localhost' serviceName:nil |
13533 self getAddressInfo:'localhost' serviceName:nil |
13531 domain:#inet type:#stream protocol:#tcp flags:nil |
13534 domain:#inet type:#stream protocol:#tcp flags:nil |
13532 self getAddressInfo:'blurb.exept.de' serviceName:nil |
13535 self getAddressInfo:'blurb.exept.de' serviceName:nil |
13533 domain:#inet type:nil protocol:nil flags:nil |
13536 domain:#inet type:nil protocol:nil flags:nil |
13534 self getAddressInfo:'1.2.3.4' serviceName:'bla' |
13537 self getAddressInfo:'1.2.3.4' serviceName:'bla' |
13535 domain:#inet type:nil protocol:nil flags:nil |
13538 domain:#inet type:nil protocol:nil flags:nil |
13536 self getAddressInfo:'localhost' serviceName:'echo' |
13539 self getAddressInfo:'localhost' serviceName:'echo' |
13537 domain:#inet type:nil protocol:nil flags:nil |
13540 domain:#inet type:nil protocol:nil flags:nil |
13538 self getAddressInfo:nil serviceName:'echo' |
13541 self getAddressInfo:nil serviceName:'echo' |
13539 domain:#inet type:nil protocol:nil flags:nil |
13542 domain:#inet type:nil protocol:nil flags:nil |
13540 self getAddressInfo:nil serviceName:nil |
13543 self getAddressInfo:nil serviceName:nil |
13541 domain:#inet type:nil protocol:nil flags:nil |
13544 domain:#inet type:nil protocol:nil flags:nil |
13542 self getAddressInfo:'www.google.de' serviceName:80 |
13545 self getAddressInfo:'www.google.de' serviceName:80 |
13543 domain:nil type:nil protocol:nil flags:nil |
13546 domain:nil type:nil protocol:nil flags:nil |
13544 self getAddressInfo:'www.exept.de' serviceName:nil |
13547 self getAddressInfo:'www.exept.de' serviceName:nil |
13545 domain:nil type:nil protocol:nil flags:nil |
13548 domain:nil type:nil protocol:nil flags:nil |
13546 self getAddressInfo:'www.exept.de' serviceName:'https' |
13549 self getAddressInfo:'www.exept.de' serviceName:'https' |
13547 domain:#'AF_INET' type:nil protocol:nil flags:nil |
13550 domain:#'AF_INET' type:nil protocol:nil flags:nil |
13548 self getAddressInfo:'www.exept.de' serviceName:'https' |
13551 self getAddressInfo:'www.exept.de' serviceName:'https' |
13549 domain:#'AF_UNSPEC' type:nil protocol:nil flags:nil |
13552 domain:#'AF_UNSPEC' type:nil protocol:nil flags:nil |
13550 self getAddressInfo:'www.exept.de' serviceName:nil |
13553 self getAddressInfo:'www.exept.de' serviceName:nil |
13551 domain:#'AF_INET6' type:nil protocol:nil flags:nil |
13554 domain:#'AF_INET6' type:nil protocol:nil flags:nil |
13552 self getAddressInfo:'www.baden-württemberg.de' serviceName:nil |
13555 self getAddressInfo:'www.baden-württemberg.de' serviceName:nil |
13553 domain:#'AF_INET' type:#stream protocol:nil flags:nil |
13556 domain:#'AF_INET' type:#stream protocol:nil flags:nil |
13554 self getAddressInfo:'www.baden-württemberg.de' serviceName:nil |
13557 self getAddressInfo:'www.baden-württemberg.de' serviceName:nil |
13555 domain:#'AF_INET6' type:#stream protocol:nil flags:nil |
13558 domain:#'AF_INET6' type:#stream protocol:nil flags:nil |
13556 " |
13559 " |
13557 |
13560 |
13558 "Modified: / 03-03-2019 / 11:23:38 / Claus Gittinger" |
13561 "Modified: / 03-03-2019 / 11:23:38 / Claus Gittinger" |
13559 ! |
13562 ! |
13560 |
13563 |
13582 char *hp = 0, *sp = 0; |
13585 char *hp = 0, *sp = 0; |
13583 int hsz = 0, ssz = 0; |
13586 int hsz = 0, ssz = 0; |
13584 int ret, __flags; |
13587 int ret, __flags; |
13585 int nInstBytes, sockAddrSize; |
13588 int nInstBytes, sockAddrSize; |
13586 union { |
13589 union { |
13587 struct sockaddr addr; |
13590 struct sockaddr addr; |
13588 char enoughBytesForBigAddresses[1024]; |
13591 char enoughBytesForBigAddresses[1024]; |
13589 } sav_sockaddr; |
13592 } sav_sockaddr; |
13590 struct sockaddr *sav_sockaddrp; |
13593 struct sockaddr *sav_sockaddrp; |
13591 |
13594 |
13592 if (wantHostName == true) { |
13595 if (wantHostName == true) { |
13593 hp = host; |
13596 hp = host; |
13594 hsz = sizeof(host); |
13597 hsz = sizeof(host); |
13595 } |
13598 } |
13596 if (wantServiceName == true) { |
13599 if (wantServiceName == true) { |
13597 sp = service; |
13600 sp = service; |
13598 ssz = sizeof(service); |
13601 ssz = sizeof(service); |
13599 } |
13602 } |
13600 if (hp == 0 && sp == 0) { |
13603 if (hp == 0 && sp == 0) { |
13601 error = @symbol(badArgument); |
13604 error = @symbol(badArgument); |
13602 goto err; |
13605 goto err; |
13603 } |
13606 } |
13604 if (!__isBytes(socketAddress)) { |
13607 if (!__isBytes(socketAddress)) { |
13605 error = @symbol(badArgument1); |
13608 error = @symbol(badArgument1); |
13606 goto err; |
13609 goto err; |
13607 } |
13610 } |
13608 |
13611 |
13609 nInstBytes = __OBJS2BYTES__(__intVal(__ClassInstPtr(__qClass(socketAddress))->c_ninstvars)); |
13612 nInstBytes = __OBJS2BYTES__(__intVal(__ClassInstPtr(__qClass(socketAddress))->c_ninstvars)); |
13610 sockAddrSize = __byteArraySize(socketAddress) - nInstBytes; |
13613 sockAddrSize = __byteArraySize(socketAddress) - nInstBytes; |
13611 |
13614 |
13612 if (!__isSmallInteger(flags)) { |
13615 if (!__isSmallInteger(flags)) { |
13613 error = @symbol(badArgument5); |
13616 error = @symbol(badArgument5); |
13614 goto err; |
13617 goto err; |
13615 } |
13618 } |
13616 __flags = __intVal(flags); |
13619 __flags = __intVal(flags); |
13617 |
13620 |
13618 #if defined(NI_NUMERICHOST) |
13621 #if defined(NI_NUMERICHOST) |
13619 if (useDatagram == true) { |
13622 if (useDatagram == true) { |
13620 __flags |= NI_DGRAM; |
13623 __flags |= NI_DGRAM; |
13621 } |
13624 } |
13622 |
13625 |
13623 if (sockAddrSize <= sizeof(sav_sockaddr)) { |
13626 if (sockAddrSize <= sizeof(sav_sockaddr)) { |
13624 sav_sockaddrp = &sav_sockaddr.addr; |
13627 sav_sockaddrp = &sav_sockaddr.addr; |
13625 } else { |
13628 } else { |
13626 fprintf(stderr, "OS: sockAddr buffer size too small\n"); |
13629 fprintf(stderr, "OS: sockAddr buffer size too small\n"); |
13627 sav_sockaddrp = (struct sockaddr *)malloc(sockAddrSize + 32); |
13630 sav_sockaddrp = (struct sockaddr *)malloc(sockAddrSize + 32); |
13628 } |
13631 } |
13629 |
13632 |
13630 { |
13633 { |
13631 // when we run this interruptable (or even in a separate thread), |
13634 // when we run this interruptable (or even in a separate thread), |
13632 // we cannot pass ST/X objects to it |
13635 // we cannot pass ST/X objects to it |
13633 // (some other ST/X thread might trigger a GC) |
13636 // (some other ST/X thread might trigger a GC) |
13634 memcpy(sav_sockaddrp, __byteArrayVal(socketAddress)+nInstBytes, sockAddrSize); |
13637 memcpy(sav_sockaddrp, __byteArrayVal(socketAddress)+nInstBytes, sockAddrSize); |
13635 |
13638 |
13636 __BEGIN_INTERRUPTABLE__ |
13639 __BEGIN_INTERRUPTABLE__ |
13637 ret = getnameinfo(sav_sockaddrp, sockAddrSize, hp, hsz, sp, ssz, __flags); |
13640 ret = getnameinfo(sav_sockaddrp, sockAddrSize, hp, hsz, sp, ssz, __flags); |
13638 __END_INTERRUPTABLE__ |
13641 __END_INTERRUPTABLE__ |
13639 } while (ret == EAI_SYSTEM && errno == EINTR); |
13642 } while (ret == EAI_SYSTEM && errno == EINTR); |
13640 |
13643 |
13641 if (sav_sockaddrp != &sav_sockaddr.addr) { |
13644 if (sav_sockaddrp != &sav_sockaddr.addr) { |
13642 free(sav_sockaddrp); |
13645 free(sav_sockaddrp); |
13643 } |
13646 } |
13644 |
13647 |
13645 if (ret != 0) { |
13648 if (ret != 0) { |
13646 switch (ret) { |
13649 switch (ret) { |
13647 case EAI_FAMILY: |
13650 case EAI_FAMILY: |
13648 error = @symbol(badProtocol); |
13651 error = @symbol(badProtocol); |
13649 break; |
13652 break; |
13650 case EAI_SOCKTYPE: |
13653 case EAI_SOCKTYPE: |
13651 error = @symbol(badSocketType); |
13654 error = @symbol(badSocketType); |
13652 break; |
13655 break; |
13653 case EAI_BADFLAGS: |
13656 case EAI_BADFLAGS: |
13654 error = @symbol(badFlags); |
13657 error = @symbol(badFlags); |
13655 break; |
13658 break; |
13656 case EAI_NONAME: |
13659 case EAI_NONAME: |
13657 error = @symbol(unknownHost); |
13660 error = @symbol(unknownHost); |
13658 break; |
13661 break; |
13659 case EAI_SERVICE: |
13662 case EAI_SERVICE: |
13660 error = @symbol(unknownService); |
13663 error = @symbol(unknownService); |
13661 break; |
13664 break; |
13662 #ifdef EAI_ADDRFAMILY |
13665 #ifdef EAI_ADDRFAMILY |
13663 case EAI_ADDRFAMILY : |
13666 case EAI_ADDRFAMILY : |
13664 error = @symbol(unknownHostForProtocol); |
13667 error = @symbol(unknownHostForProtocol); |
13665 break; |
13668 break; |
13666 #endif |
13669 #endif |
13667 #ifdef EAI_NODATA |
13670 #ifdef EAI_NODATA |
13668 case EAI_NODATA: |
13671 case EAI_NODATA: |
13669 error = @symbol(noAddress); |
13672 error = @symbol(noAddress); |
13670 break; |
13673 break; |
13671 #endif |
13674 #endif |
13672 case EAI_MEMORY: |
13675 case EAI_MEMORY: |
13673 error = @symbol(allocationFailure); |
13676 error = @symbol(allocationFailure); |
13674 break; |
13677 break; |
13675 case EAI_FAIL: |
13678 case EAI_FAIL: |
13676 error = @symbol(permanentFailure); |
13679 error = @symbol(permanentFailure); |
13677 break; |
13680 break; |
13678 case EAI_AGAIN: |
13681 case EAI_AGAIN: |
13679 error = @symbol(tryAgain); |
13682 error = @symbol(tryAgain); |
13680 break; |
13683 break; |
13681 case EAI_SYSTEM: |
13684 case EAI_SYSTEM: |
13682 error = @symbol(systemError); |
13685 error = @symbol(systemError); |
13683 break; |
13686 break; |
13684 default: |
13687 default: |
13685 error = @symbol(unknownError); |
13688 error = @symbol(unknownError); |
13686 } |
13689 } |
13687 errorString = __MKSTRING(gai_strerror(ret)); |
13690 errorString = __MKSTRING(gai_strerror(ret)); |
13688 goto err; |
13691 goto err; |
13689 } |
13692 } |
13690 # else /* ! NI_NUMERICHOST */ |
13693 # else /* ! NI_NUMERICHOST */ |
13691 { |
13694 { |
13692 /* |
13695 /* |
13693 * Do it using gethostbyaddr() |
13696 * Do it using gethostbyaddr() |
13694 */ |
13697 */ |
13695 struct sockaddr_in *sa; |
13698 struct sockaddr_in *sa; |
13696 |
13699 |
13697 if (sockAddrSize < sizeof(*sa)) { |
13700 if (sockAddrSize < sizeof(*sa)) { |
13698 error = @symbol(badArgument1); |
13701 error = @symbol(badArgument1); |
13699 goto err; |
13702 goto err; |
13700 } |
13703 } |
13701 |
13704 |
13702 if (sp) { |
13705 if (sp) { |
13703 char *__proto = (useDatagram == true ? "udp" : "tcp"); |
13706 char *__proto = (useDatagram == true ? "udp" : "tcp"); |
13704 struct servent *servp = getservbyport(sa->sin_port, __proto); |
13707 struct servent *servp = getservbyport(sa->sin_port, __proto); |
13705 if (servp) { |
13708 if (servp) { |
13706 sp = servp->s_name; |
13709 sp = servp->s_name; |
13707 } |
13710 } |
13708 } |
13711 } |
13709 if (hp) { |
13712 if (hp) { |
13710 struct hostent *hostp; |
13713 struct hostent *hostp; |
13711 # ifdef USE_H_ERRNO |
13714 # ifdef USE_H_ERRNO |
13712 do { |
13715 do { |
13713 sa = (struct sockaddr_in *)(__byteArrayVal(socketAddress) + nInstBytes); |
13716 sa = (struct sockaddr_in *)(__byteArrayVal(socketAddress) + nInstBytes); |
13714 |
13717 |
13715 /* __BEGIN_INTERRUPTABLE__ is dangerous, because gethostbyname uses a static data area |
13718 /* __BEGIN_INTERRUPTABLE__ is dangerous, because gethostbyname uses a static data area |
13716 and sa points to possible grabage collected memory |
13719 and sa points to possible grabage collected memory |
13717 */ |
13720 */ |
13718 hostp = gethostbyaddr((char *)&sa->sin_addr, sockAddrSize, sa->sin_family); |
13721 hostp = gethostbyaddr((char *)&sa->sin_addr, sockAddrSize, sa->sin_family); |
13719 /* __END_INTERRUPTABLE__ */ |
13722 /* __END_INTERRUPTABLE__ */ |
13720 } while ((hostp == NULL) |
13723 } while ((hostp == NULL) |
13721 && ((h_errno == TRY_AGAIN) |
13724 && ((h_errno == TRY_AGAIN) |
13722 || errno == EINTR |
13725 || errno == EINTR |
13723 # ifdef IRIX5_3 |
13726 # ifdef IRIX5_3 |
13724 || (errno == ECONNREFUSED) |
13727 || (errno == ECONNREFUSED) |
13725 # endif |
13728 # endif |
13726 ) |
13729 ) |
13727 ); |
13730 ); |
13728 if (hostp == 0) { |
13731 if (hostp == 0) { |
13729 switch (h_errno) { |
13732 switch (h_errno) { |
13730 case HOST_NOT_FOUND: |
13733 case HOST_NOT_FOUND: |
13731 errorString = @symbol(unknownHost); |
13734 errorString = @symbol(unknownHost); |
13732 break; |
13735 break; |
13733 case NO_ADDRESS: |
13736 case NO_ADDRESS: |
13734 errorString = @symbol(noAddress); |
13737 errorString = @symbol(noAddress); |
13735 break; |
13738 break; |
13736 case NO_RECOVERY: |
13739 case NO_RECOVERY: |
13737 errorString = @symbol(permanentFailure); |
13740 errorString = @symbol(permanentFailure); |
13738 break; |
13741 break; |
13739 case TRY_AGAIN: |
13742 case TRY_AGAIN: |
13740 errorString = @symbol(tryAgain); |
13743 errorString = @symbol(tryAgain); |
13741 break; |
13744 break; |
13742 default: |
13745 default: |
13743 errorString = @symbol(unknownError); |
13746 errorString = @symbol(unknownError); |
13744 break; |
13747 break; |
13745 } |
13748 } |
13746 error = __mkSmallInteger(h_errno); |
13749 error = __mkSmallInteger(h_errno); |
13747 goto err; |
13750 goto err; |
13748 } |
13751 } |
13749 # else /* !USE_H_ERRNO */ |
13752 # else /* !USE_H_ERRNO */ |
13750 hostp = gethostbyaddr(sa->sin_addr, sockAddrSize, sa->sin_family); |
13753 hostp = gethostbyaddr(sa->sin_addr, sockAddrSize, sa->sin_family); |
13751 if (hostp == 0) { |
13754 if (hostp == 0) { |
13752 errorString = @symbol(unknownHost); |
13755 errorString = @symbol(unknownHost); |
13753 error = __mkSmallInteger(-1); |
13756 error = __mkSmallInteger(-1); |
13754 goto err; |
13757 goto err; |
13755 } |
13758 } |
13756 # endif /* !USE_H_ERRNO*/ |
13759 # endif /* !USE_H_ERRNO*/ |
13757 hp = hostp->h_name; |
13760 hp = hostp->h_name; |
13758 } |
13761 } |
13759 } |
13762 } |
13760 # endif /* ! NI_NUMERICHOST */ |
13763 # endif /* ! NI_NUMERICHOST */ |
13761 |
13764 |
13762 if (hp) |
13765 if (hp) |
13763 hostName = __MKSTRING(hp); |
13766 hostName = __MKSTRING(hp); |
13764 if (sp) |
13767 if (sp) |
13765 serviceName = __MKSTRING(sp); |
13768 serviceName = __MKSTRING(sp); |
13766 err:; |
13769 err:; |
13767 #else |
13770 #else |
13768 error = @symbol(notImplemented); |
13771 error = @symbol(notImplemented); |
13769 #endif |
13772 #endif |
13770 %}. |
13773 %}. |
13771 error notNil ifTrue:[ |
13774 error notNil ifTrue:[ |
13772 ^ (HostAddressLookupError new |
13775 ^ (HostAddressLookupError new |
13773 parameter:error; |
13776 parameter:error; |
13774 messageText:' - ', errorString; |
13777 messageText:' - ', errorString; |
13775 request:thisContext message) raiseRequest. |
13778 request:thisContext message) raiseRequest. |
13776 ]. |
13779 ]. |
13777 |
13780 |
13778 ^ Array with:hostName with:serviceName |
13781 ^ Array with:hostName with:serviceName |
13779 |
13782 |
13780 " |
13783 " |
13781 self getNameInfo: |
13784 self getNameInfo: |
13782 (self getAddressInfo:'localhost' serviceName:'echo' |
13785 (self getAddressInfo:'localhost' serviceName:'echo' |
13783 domain:#inet type:#stream protocol:nil flags:nil) first socketAddress |
13786 domain:#inet type:#stream protocol:nil flags:nil) first socketAddress |
13784 wantHostName:true wantServiceName:true datagram:false flags:0 |
13787 wantHostName:true wantServiceName:true datagram:false flags:0 |
13785 |
13788 |
13786 self getNameInfo: |
13789 self getNameInfo: |
13787 (self getAddressInfo:'localhost' serviceName:'echo' |
13790 (self getAddressInfo:'localhost' serviceName:'echo' |
13788 domain:#AF_UNSPEC type:#stream protocol:nil flags:nil) first socketAddress |
13791 domain:#AF_UNSPEC type:#stream protocol:nil flags:nil) first socketAddress |
13789 wantHostName:true wantServiceName:true datagram:false flags:0 |
13792 wantHostName:true wantServiceName:true datagram:false flags:0 |
13790 |
13793 |
13791 self getNameInfo: |
13794 self getNameInfo: |
13792 (self getAddressInfo:'exept.de' serviceName:'echo' |
13795 (self getAddressInfo:'exept.de' serviceName:'echo' |
13793 domain:#inet type:#stream protocol:nil flags:nil) first socketAddress |
13796 domain:#inet type:#stream protocol:nil flags:nil) first socketAddress |
13794 wantHostName:true wantServiceName:true datagram:false flags:0 |
13797 wantHostName:true wantServiceName:true datagram:false flags:0 |
13795 |
13798 |
13796 self getNameInfo: |
13799 self getNameInfo: |
13797 (self getAddressInfo:'exept.de' serviceName:'echo' |
13800 (self getAddressInfo:'exept.de' serviceName:'echo' |
13798 domain:#AF_UNSPEC type:#stream protocol:nil flags:nil) first socketAddress |
13801 domain:#AF_UNSPEC type:#stream protocol:nil flags:nil) first socketAddress |
13799 wantHostName:true wantServiceName:true datagram:false flags:0 |
13802 wantHostName:true wantServiceName:true datagram:false flags:0 |
13800 |
13803 |
13801 self getNameInfo: |
13804 self getNameInfo: |
13802 (self getAddressInfo:'217.172.183.25' serviceName:'22' |
13805 (self getAddressInfo:'217.172.183.25' serviceName:'22' |
13803 domain:#inet type:#stream protocol:nil flags:nil) first socketAddress |
13806 domain:#inet type:#stream protocol:nil flags:nil) first socketAddress |
13804 wantHostName:true wantServiceName:true datagram:false flags:0 |
13807 wantHostName:true wantServiceName:true datagram:false flags:0 |
13805 |
13808 |
13806 self getNameInfo: |
13809 self getNameInfo: |
13807 (self getAddressInfo:'1.2.3.4' serviceName:'22' |
13810 (self getAddressInfo:'1.2.3.4' serviceName:'22' |
13808 domain:#inet type:#stream protocol:nil flags:nil) first socketAddress |
13811 domain:#inet type:#stream protocol:nil flags:nil) first socketAddress |
13809 wantHostName:true wantServiceName:true datagram:false flags:0 |
13812 wantHostName:true wantServiceName:true datagram:false flags:0 |
13810 " |
13813 " |
13811 |
13814 |
13812 "Modified: / 21-03-2018 / 10:03:30 / stefan" |
13815 "Modified: / 21-03-2018 / 10:03:30 / stefan" |
13813 "Modified: / 04-03-2019 / 12:40:46 / Claus Gittinger" |
13816 "Modified: / 04-03-2019 / 12:40:46 / Claus Gittinger" |
13814 ! |
13817 ! |