www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - looking for testers: std.socket / IPv6

reply Thomas Kuehne <thomas-dloop kuehne.cn> writes:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Attached is the IPv6 enabled std.socket module and a tiny test programm.
(only tested on Linux but should work on Windows too)

Changes from DMD-0.144's std.socket:
* InternetHost and InternetAddress now support IPv4 and IPv6
* "potected sockaddr_in InternetAddress.sin" has been replaced
by "potected sockaddr_in* InternetAddress.ip4"
* several new constructors in InternetAddress
* InternetAddress[] can now be sorted properly
* "public uint32_t[] InternetHost.addrList" has been replaced
by "public InternetAddress InternetHost.addrList"
* various minor changes to account for IPv6

Todo:
* documentation ...
* testing / unittests

Linux users need to fix std.c.linux.socket.addrinfo.
The proper struct is:

# struct addrinfo
# {
#    int32_t ai_flags; 
#    int32_t ai_family;
#    int32_t ai_socktype;
#    int32_t ai_protocol;
#    size_t ai_addrlen;
#    sockaddr* ai_addr;
#    char* ai_canonname;
#    addrinfo* ai_next;
# }

sample output of the test.d:

# server's address: [::1]:65190
#
# -- Client View --
# local: [::1]:38405
# remote: [::1]:65190
#
# received: 60 bytes
# BEGIN >>
# -- Server View --
# local: [::1]:65190
# remote: [::1]:38405
# << END

Thomas

begin 644 socket_ip6.zip
M4$L#!`H``````+64/#0````````````````$`!4`<W1D+U54"0`#YJO;0]^K
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
/``,``P#'````TR$`````
`
end


-----BEGIN PGP SIGNATURE-----

iD8DBQFD27Nt3w+/yD4P9tIRApOEAJsF7XK2rQjVfaYDZn17ig9d5CY2LgCgtlWN
p8J2j89nRxOsSfz7m21HG8c=
=JE+Z
-----END PGP SIGNATURE-----
Jan 28 2006
parent reply Thomas Kuehne <thomas-dloop kuehne.cn> writes:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

This is the second version of the IPv6 enabled std.socket module.

Changes since the first post:
* improved handling of unhandled AddressFamilies
* added unittests / invariant
* marked IPv4 only functions with "/// $(D_COMMENT IPv4 only)"
* fixed "InternetAddress.this(sockaddr_in6*)"

(please check digitalmars.D.bugs before testing the attachement)

Thomas

begin 644 socket_ip6_2.zip
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
MU2B6&-0[U&\-B,"<P)E9ZJ5*SLG,<\76=G#GQPV!'3.^%YL`,RGR*)^+5C9/
M+/7*P,Y74I4LFD6HD<:B8F/NP4%(T4A4]I60%^UH;#N+Q(RVHBAP8UEO&LJY
M0<JO.MT*RY(L [NPB1^2[+/,;=:/M]]Y4!W-(=IX4C_/=`^'98^G??AAQ!3Y
M.6SIOR/#"%Y$1G 8.3T^;JMM5:%V382WO$&UMC4-:<POKQSN#CV!A.S]"I0[
M9$$P.""Q6+KN8/5DT2S5IYNOBUN8S:A3,HKYLF+.=0;<_TS1 B5GAFC!^IY#
MGCO) P_YXW6'J.MKN+G]DOB:1KO5"CB]>]I?4$L!`A<#" ``````YI \-```
M``````````````0`#0`````````0`.U!`````'-T9"]55`4``\^RVT-5>```
M4$L!`A<#%``"`` `7)4]-+W^LKLD)0`` IT```P`#0```````0```*2!-P``
M`'-T9"]S;V-K970N9%54!0`#H/[<0U5X``!02P$"%P,4``(`"`"XE#PT2LKX
M`-4!``#[`P``! `-```````!````I(&:)0``=&5S="YD550%``/KJ]M#57 `
7`%!+!08``````P`#`,<```"H)P``````
`
end

-----BEGIN PGP SIGNATURE-----

iD8DBQFD3QCq3w+/yD4P9tIRAnVAAJ9tGrAU6NGRhc5JJUtde773rbk0fgCgoVRH
GHGUZGoR76/mHpntvSt7hwY=
=FFN3
-----END PGP SIGNATURE-----
Jan 29 2006
parent reply "Chris Miller" <chris dprogramming.com> writes:
On Sun, 29 Jan 2006 11:54:30 -0500, Thomas Kuehne <thomas-dloop kuehne.cn>  
wrote:
 This is the second version of the IPv6 enabled std.socket module.
I'm not sure it's a good idea to have InternetAddress support IPv4 and IPv6. My original plan was to have a separate Address for IPv6 (possibly named Internet6Address). I'm more unsure about InternetHost. Also, there's a somewhat vague naming convention used in std.socket: address refers to an Address or derived (class), and addr refers to the actual value of it (uint for IPv4). I noticed your version doesn't adhere to this.
Jan 29 2006
parent reply Thomas Kuehne <thomas-dloop kuehne.cn> writes:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Chris Miller schrieb am 2006-01-29:
 On Sun, 29 Jan 2006 11:54:30 -0500, Thomas Kuehne <thomas-dloop kuehne.cn>  
 wrote:
 This is the second version of the IPv6 enabled std.socket module.
I'm not sure it's a good idea to have InternetAddress support IPv4 and IPv6. My original plan was to have a separate Address for IPv6 (possibly named Internet6Address). I'm more unsure about InternetHost.
Neither is IPv4 a subset of IPv6 nor is IPv6 a subset of IPv4. While it is possible to represent IPv4 with mapped IPv6 (255.1.16.3 <-> ::FFFF:FF01:1003), it is impossible to use IPv6 sockets for IPv4. Thus the follwing designs aren't usefull: 1) abstract class Address; class InternetAddress4 : Address; class InternetAddress6 : InternetAddress4; 2) abstract class Address; class InternetAddress6 : Address; class InternetAddress4 : InternetAddress6; One seemingly obvious solution would be: 3) abstract class Address; class InternetAddress : Address; (-> IPv4) class InternetAddress6 : Address; The vast majority of applications have no to reason to discriminate between IPv4 and IPv6 but would have to use quite a bit of code duplication to implement 3). OK, next round: 4) abstract class Address; interface InternetAddress; class InternetAddress4 : Address, InternetAddress; class InternetAddress6 : Address, InternetAddress; The design might seem clean, but changing one of the core types from "class" to "interface" will lead to quite a few bugs. The current design is: 5) abstract class Address; class InternetAddress : Address; (-> IPv4 & IPv6) This keeps the commonly required code changes to a minimum and allows incremental updates to use IPv6. e.g. uint addr() (throws exception if used with IPv6) -> ubyte[] address() A possible extension of the current design: 6) abstract class Address; class InternetAddress : Address; (-> IPv4 & IPv6) class InternetAddress4 : InternetAddress; (-> constructors only return IPv4 addresses) class InternetAddress6 : InternetAddress; (-> constructors only return IPv6 addresses)
 Also, there's a somewhat vague naming convention used in std.socket:  
 address refers to an Address or derived (class), and addr refers to the  
 actual value of it (uint for IPv4). I noticed your version doesn't adhere  
 to this.
I kind of did: uint InternetAddress.addr(); // throws exception if used with IPv6 ubyte[] InternetAddress.address(); // IPv4 & IPv6 The alternatives are: A) ubyte[] InternetAddress.addr(); The clean solution, but would require instant code updates in quite a few applications. B) ucent InternetAddress.addr(); ucent is reserved for 128 bit unsigned ints but not implemented. Would you like C's way and rather use the following? uint InternetAddress.addr(); // throws exception if used with IPv6 ubyte[] InternetAddress.addr2(); // IPv4 & IPv6 Thomas -----BEGIN PGP SIGNATURE----- iD8DBQFD3xhC3w+/yD4P9tIRAh9EAJ0eTQUPOyNcTUTynlVCYnupaCvI+gCeMN94 0HQTywfN9FUNh6VjPG+D9qw= =2CYt -----END PGP SIGNATURE-----
Jan 30 2006
parent reply "Chris Miller" <chris dprogramming.com> writes:
On Tue, 31 Jan 2006 02:38:39 -0500, Thomas Kuehne <thomas-dloop kuehne.cn>  
wrote:

 One seemingly obvious solution would be:
 3)
 abstract class Address;
 class InternetAddress : Address; (-> IPv4)
 class InternetAddress6 : Address;

 The vast majority of applications have no to reason to discriminate  
 between
 IPv4 and IPv6 but would have to use quite a bit of code duplication to
 implement 3).
That was the original plan, but you make a good point.
 OK, next round:
 4)
 abstract class Address;
 interface InternetAddress;
 class InternetAddress4 : Address, InternetAddress;
 class InternetAddress6 : Address, InternetAddress;

 The design might seem clean, but changing one of the core types
 from "class" to "interface" will lead to quite a few bugs.

 The current design is:
 5)
 abstract class Address;
 class InternetAddress : Address; (-> IPv4 & IPv6)

 This keeps the commonly required code changes to a minimum and allows
 incremental updates to use IPv6.
 e.g. uint addr() (throws exception if used with IPv6) -> ubyte[]  
 address()

 A possible extension of the current design:
 6)
 abstract class Address;
 class InternetAddress : Address; (-> IPv4 & IPv6)
 class InternetAddress4 : InternetAddress;
 (-> constructors only return IPv4 addresses)
 class InternetAddress6 : InternetAddress;
 (-> constructors only return IPv6 addresses)
That might be fair.
 Also, there's a somewhat vague naming convention used in std.socket:
 address refers to an Address or derived (class), and addr refers to the
 actual value of it (uint for IPv4). I noticed your version doesn't  
 adhere
 to this.
I kind of did: uint InternetAddress.addr(); // throws exception if used with IPv6 ubyte[] InternetAddress.address(); // IPv4 & IPv6 The alternatives are: A) ubyte[] InternetAddress.addr(); The clean solution, but would require instant code updates in quite a few applications. B) ucent InternetAddress.addr(); ucent is reserved for 128 bit unsigned ints but not implemented. Would you like C's way and rather use the following? uint InternetAddress.addr(); // throws exception if used with IPv6 ubyte[] InternetAddress.addr2(); // IPv4 & IPv6
Not really fond of either, how about: uint addr(); // Current one; throws exception if used with IPv6 ubyte[] getAddr(); // (or getAddrBytes) IPv4 & IPv6 About InternetHost, may wish to leave addrList the way it was and deprecate it, then add addressList for this new stuf.
Feb 02 2006
parent reply Thomas Kuehne <thomas-dloop kuehne.cn> writes:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Chris Miller schrieb am 2006-02-03:
 A possible extension of the current design:
 6)
 abstract class Address;
 class InternetAddress : Address; (-> IPv4 & IPv6)
 class InternetAddress4 : InternetAddress;
 (-> constructors only return IPv4 addresses)
 class InternetAddress6 : InternetAddress;
 (-> constructors only return IPv6 addresses)
That might be fair.
Implemented with a "semi-abstract" InternetAddress class. "semi-abstract" concept: # class Animal{ # int getValue(){ # assert(0); # } # } # # class Horse : Animal{ # override int getValue(){ # return 2; # } # } # # class Fish : Animal{ # override int getValue(){ # return -97; # } # } This seems to be the best way to keep the implementation simple and extendeable. e.g. "uint InternetAddress.parse(char[])" could be deprecated in the future and only "uint InternetAddress4.parse(char[])" would remain.
 Also, there's a somewhat vague naming convention used in std.socket:
 address refers to an Address or derived (class), and addr refers to the
 actual value of it (uint for IPv4). I noticed your version doesn't  
 adhere
 to this.
I kind of did: uint InternetAddress.addr(); // throws exception if used with IPv6 ubyte[] InternetAddress.address(); // IPv4 & IPv6 The alternatives are: A) ubyte[] InternetAddress.addr(); The clean solution, but would require instant code updates in quite a few applications. B) ucent InternetAddress.addr(); ucent is reserved for 128 bit unsigned ints but not implemented. Would you like C's way and rather use the following? uint InternetAddress.addr(); // throws exception if used with IPv6 ubyte[] InternetAddress.addr2(); // IPv4 & IPv6
Not really fond of either, how about: uint addr(); // Current one; throws exception if used with IPv6 ubyte[] getAddr(); // (or getAddrBytes) IPv4 & IPv6
done
 About InternetHost, may wish to leave addrList the way it was and  
 deprecate it, then add addressList for this new stuf.
How are you goning to ensure that addrList and addressList are synchronized? Thomas begin 644 socket_ip6_3.zip M4$L#!`H``````&Z6/30````````````````$`!4`<W1D+U54"0`#GP#=0]^K MVT-5>`0`Z`-D`%!+`P04``(`"`#T9D0T(B%RJB$F```II```#``5`'-T9"]S M;V-K970N9%54"0`#.Y;D0^:KVT-5>`0`Z`-D`,P];7/;-I.?U9G^!T1S3:14 M5BC945))]HUB.ZFOC>VSG;;/)!X/1$(6&XG40U)VW#SI;[]=O)```4IRDO;: M=&QRL;O8-RR6`$ _>?SM-[7]>'&7A-?3C#3VFZ3K>3M;\.,IV9\F89K%BRE+ MR&&;O`YG,Y9\^PU07$S#E*3Q)+NE"2-PO4CBFS! `7E$TZTP?=0BMV$VC9<9 MH=$=81\6"4M3$B<DG"]F(0N`!Y`F-,KNVH0<122*";MA409TLQG)IHS0)3!( M4C)F9,IF`9F%=#QC9`),D&=`Y_2:I<"( I1A=$TF23SGE,N4D7 "EYJ0;2[W M*4OF89J&<81"7V/_(',6(\<X8GB%Q`9EWN-BF2SBE+6`3QCYLV6`G?KQ?,X2 M/Z0S0A> FD\SX)ZV $(PGF5 O3#C]PD+P*!).%YF8+4,&$T2QF9W+9(NQ[\S M/T,*U&`2SV;Q+?('NP&!SYGVN0Z=-KD`E! \%D:6GF2^3#.P9H9V`UT3AJ9G MJ.>`W,7+O!TX$4+\&0W1:#3CC;=)G#$N 6`/6N4&)$<3CF,92'`"62B&0;#T M,]2>4/]]%-_.6'`]1[]"._*5&"2(_27"N;G(;;P$#X\E*S!DPL"DZ!LP%;H* M%4K8OY<AF!!<6>NVR0 M"QAIO$Q\1FY8 GY-A8* _`)4BV9W9$Z3]X!&0>"E M/Q6.,8U 60J1QPS-[S8%D&VC%X1 (?0^IW?*Z`F;QS?``Z-&BL C$T-(R"IZ MS4,!I!;1F<;^>Y:U`])I;\/M_X`1<1S*$4>C]RG&QPL6_4[G8,X?69+PX$0Y M*$1UFM'(EY$.A+TMK[OE[8"<\1P4^FG)IA#B6Z`3WC=HUGS/06T_`H+:%J$! MCN`CL$`2L6P4!#AH=[C!2L">07!ZTR, 7C#C%HO+R`:#'^,T$\3L0\8BI%]& M899!F,-8?OP$A9]#B,!(3[. +4PR0. B"6\HCIOY(DXRT0H&C*Y;\AK&8R:N M?;R;A6-.]^TW,C0:(-_R0_/;;SZ"`!)&=LF+-#CGO:2`_DG'_S6,MKL2W]&[ MWX81&L2WJ?K=LL$H_T`CIY#%4C=:.POG[`;"[,J75US\6G:W8`&;D/.3_9\. M+XBPR%4&DA\=_S+Z^>C 2K3HW? P$'#(940V7AV>G9V<`8U^*\U3Z(;X,YJ" MIY(&Z%U#Q6L)RY9)1'X]'[UBV<_0>I D,;1C?Y^XQ= LS<=?HS"G:>G<^H*K MTYX<1?QL&:`\#&I.2VIT3BO6/AF6!#VWNV!!S91;G<W,Q_$V-]HU0VM%<6ZM MW%["-BGF/Q\'+TNRAM<<D"=/R'$L)8.$M>#6N8.L(&/SVV\ 9<.8$C8^_."S M!2:0/LDO!6<4BZ&C]N.`<;:G,YI!MIAOI0M(KA/HEK>#LH'(&6 A2"4-?TJ3 MMY=DGL+(DFQ`<R_7+6<+4+ 646J[62#7PDFC(- 3;%1;#;MZ3/QT(&[3\`\& M[IBQ2#(%C!1Z 7'.>12<FI("4$4[7#3\M)G30;=^^A:;MTCGDNSNDD?OHD>B M<TZVM36HQDR<F&`1Z`Q__DGJ?5*'7T#ID78;1;X46)_PIXBW&OB/)0T T`8+ M_I-NY]8NC1*5<X2%8-`=C"Y&Y#:0BH$??Q7I0A1*:88_9S$-2#C!63>>!5!O MJ.S&*S,^J;4E-98.6NOO.!%2/K5"!N9(Z'(Y;&HXD'9QZ)]G-,F6BX;WH>MU MO19Y>!L(%X#U`*F)`78FF.0"=MM=/CWA_,`Y0W E\2V)V&TY?!OU-Q&O[F#V M"&$Z '(*0D$-`\CD"4WNZBV4RVW*/S>RY?Z,T0BT*/% T7).Y&3U$J;6V5T? M`U\P>W-\?GJX#U;`_T8OK\1]B[<<_2;ALN7H-X0?'4.:UN!XS^&G!3J'GW+T MT>GISX<7HY]_PD8`Y_>*5T]125Z]EBFYL.4%)#=-[/.+L\/1:TF)2>Q*0)#I MP:NSO$FT<0 VG8U^+63D30#A#0>ORPT'G.+\\']/1WQFVE4=*4A)SE,H+F,_ MGI4D/3H5C(].3\].+D[`+%SQ_=<<GD/AGL-?E>"O!/S5*\%&P>$>P1?[)ACN M$7SZQ 3#/??H 0F&>]YG"7PDP:>_]`Q1X+Y52M-*9Z&J; &"LQ'&H4RW$9UK MMP# $QQ+U7QS$X<!6<2+):1QUE )QC6CPF_RH,<F8),/LQ'#;VW)D=K+Z[X M;SYRL4.>.U4=U<[B<W[14,B(TFP'RX7,/I :0DX,X[H1XJPP&)#P^^_-?/]` MT4L5WH:7,IV.$T9Y/:0R)&"'&K$D`,:8)*0I0IE9BSY)2![L* .U(?=>9]-" M#C6Y%+VO45,34RJKY7&8[_AT[1!Q.9LI76K2Z[4Q/.K!K*]L_^+N&&S8T'RL M54"&"P<Y#% #!WXYOD.2AI+XCP;GD&?>![GS\XIC0D%:P<N(%4$CD;)DR0:: MT)"\SS$:H*#2>E[.QS![-=LNK3"F&E8XWU<WT0.G_(HJ2:W48X4Y]( 2`P-, M`9%0UF`B)E;KVH8L(IP`16"431KUT1B7.A:J#VCOOXO>9>C[/OFN_3A]%\'L M)7AS%R(QQ#.C_E0%1SJ0"#+"]%*9=_(N&V&+QC`M362R-&3)3>C+"G-]=JDM MTRD6F5AI:OE(*7,L*!TY".QUPWV,%[FT*](*XK53(ZN 3Q,LP*,LGJ8*`V'- M(FBD%*NYBI#XC&0EZ?_AN<J6\FNE*ADN=J9J$4<HY'XVO#]0$#&^\<J=NEJD M`!ALBP2 HFG5^.<X:S+:")?LU(CD4<DK9ESLH9D_%>M(ZVSPQ>JBY;^R;F69 M3V&T-+1!_*5^0QX-P>B?[:RRXI^GX]?UD'/RD1(3*05_`!( I()N^>BVXK#. M%G.Z #Q?S_Q%O6E-"&+6225SCLRG'<E%313O,C04W`7\6EJYF$:XMEP",>KY MI;"-N-1=KQ)J:>;BB-K$)3/0NJE+Y2.5N`SU<!U$ZH:/D5R_-A`[)SU<5]QT M->3+%CNJ'NN%'/HZYX;S;VFY%!OAZN<P%>N>8M:%)]\P0*80UXVI^/V83%GS MHXS<*6M/KY!0/`+LF ^T;7QP;.:3'D<6<Q'.3CNR17M`E]3:$_H+RI=Z=[AT MT%1OZK,/7P/<3(Q>I1R=WCT$Z54+\K&TVF`$1Z.^C.3"&J[TRS7J"9</`K-8 MRVN:,Z;P`^!+B1KE96[H25X*+=0H*>/%,\5BD'NZ,$G1BM8K\U0IISSQ*S[D M3YU&AF?-*MVL`)(K;Z&LG584<=QEY0=#K=P1M4U17A$1$47=\K%<7AE+9KS( MNF^!-7365YN65F4!RX55$5'N DH(KCP 1>"BE4R3CXVK&2"B*J:M-AK#Y#__ M(9N-LMP`1<BB(4OAV&CPQ8+E^"YCCYN6B$VQOJD-U,MFT^FVL &&I-,L#T1[ M,$_B913 [J\U))D:V*41F`<QXH71)'Y,:)C7/#)R^:0N5D0 R[<55&;AFADN MN:_</L26VVDX Q[#PEDT;-/PRJ=1'/'18$8;CD-7K)6I-$OR"!#M(AEQOXHE M/^'UBL:-/2WH44G#A36*\2D:(_8A&_SM?I6%':;I%8\ALAAHEC98-"J!CKYO MY=A:#ES331%/4ZP$=B4CLW<CM J*1"[4U8I20Y2;"L5^,E`,_UNKLI70I"\[ MG_(]S8?`7FUMJ/T4G"\]Z0BK5)7>RX<*T+>("KBJ2ASJ\"?DOQH'5_LGKU\? M'E^(V3Z.9G?-LO'0WXTEJLJC*7_PMP;4IN.L,S"SZ%OO4N9]*XBQ0WT!4R.! M<89H<JQ5/W,XE)%>+M2QHP&$44#.&>'Z "QV!\SF&;W&*6-T='7\YO7AV='^ MCR?G%X/*(,8^A..+34-51N9Y1, HH6/JO]_-<UNI.*<#-3D6N0L)E.WW\BBJ M(1 3%SYQZ/E!P6D^;"MK&Q3>5=5\;H_`R.743YKU$%>OP\U'+[T>)^&T%%0( MU1;_PFG;]$5]%OMTAM52W5SPLR,8GZY`#6!1:FN:';A:RU8,*3#4<"&T]<Z/ M3O.R=5<^4<FQD#]>A;1D-BZ9M?3(U\B*%#? G58L/ZH*Z;O TNA)6X;49-S: MVI*/:F[S\D%GJEB2V#2XI>!?KXWQ?%F>X:Q'S-+39+$64;$'3,=0&U`_(P9_ M== DSIB?\<--_GLTT6.>O1O2)*H5%4;XSRP23489J()$W`D$*X\,2GJ^B?#4 M5B09]2ODZLO32M #2:EZHBY+6SH-\9!CYB6S(7T)-:5M?"2))SK!8CF>A7Y_ MG9XE5KR\-0B:R)W*O*UW8%FGQ*HNK5.O?NY70SBWG.E/2$YQ).(BMY6P2 ZX M"B.$[92!/83VM"F!'U+AD_#HX.#L:G3\+WXF2-T,'#C')\>'!1+>:5AB(>WT MY.Q"\I+%KVS&!X2WG=YEWEMO($>\4FX<QS-R\.;UZW^56_C X,W!<CZ_X^G_ M4[$(4U3J[DE_1SL_(R *ZQ4SMJQ5"]>N7`59U1L/&=T?35*4'?E2QR:=]=;V MUK-ZZ]G=K:^WJ]<TQ$$5Y\.(H8"UWJ$F4B-<91%`=<4=>HL"S5&^/:2J!,TY MCCGR>`W'7C7+L<72Y\C^*I:GOW&<++D3QG5R]J5-?%R$;I2M3IA1?^N5=W&B MRQVW?)`7H;LJ&/-06.&5*SQ].]`Z;E38OEEXOXD16_?:_%_?JY>-B#QSUX31 M.M^L-^9XM3&IVYH;V;*WF3%[FQJS]YG6?-OO7[I-V=-MV5LS=/X^6]:4,45Z M%P]`+:)MJH",:DHPTZRJ?(OEXW51W"+%QJZ910M>G4TRII/9)CF2S][E-=^5 M>4^?_.!)"R1ZZ[4ZK6YKN[73>MKJM9ZUGK=^:'4`V&EUNJW.=JNST^H\%<N4 MSL+>Y5#I3U4HTW:IIJF:74I4Y7#L]+O>=G_'>]KO><_ZS[T?^B/O17_?.^ ? M>B]5I-8P"&I*11\D'(M%OYW+?"FT4G#_LP1?([?7[K2[[6UM).6CH5H0/(VY M)EWG"U>*VPIVP 3>I5HIJ^+9K5R8-P=;92[[?PFW%NETMW>>?F'\<![K8FA- M_+3(TYWM;F?#B."X]XT*5/8OB`Q N_V71\?*-3F1N=4RW.JT?8_D[(C+C2/+ M^_#RY977N?*Z5]L>6&CGZ;HDU7WZE#MWYWD?L>OW4U[;_5^KIGIP^4JJBGT3 M+D!SHQ`6E58>P7HM(Y\\<:5IM1O7KV<UM)7B!]:*ENC!>1H2]>`;#?8JU8:+ M_LO\$#<TQ+,;QA4BC_`!A%_]2>J/BOE6[?>9JT`I_0I/<!;/G>:`6*5"=85A MT?<4?>ZW^(8E21 P:XW&7,<8V`3&PL?'BH&?8Z]<ZUBST$&<*QUFO*^J<>O] M/L1J\W.J$3>_3O<9'P:;<]6':3$NJNVVL6X ."$_0*'VCV$;Q'OP\CKO#!Y M"-`&1NCW.8>7+U]V2APX2%-&3JC7 GI#K?-:'J*[6I-MY8:<N2XY->I[0R?* M-V> 5.\^:Y*'#PD`Q'LSV^JV>REL*F^W!7I3):9JN<"`_?[V1D)U>A52>:90 MG?SVJ10R%T,RS<4UNI)2EZ$[3NA3)[3GA#YS0I\[H3\XH1W/#>ZXP6[U.F[] M.KJ"I;TG/$9F[#^I)%<QF\ C-/(Q\SX#T^Q+3)_U^P[1YQTWI^=R^MUDD#[W M*GAX=9>%]/V++TY09K(TF7,AM/:-,F_?Z_8];]3O0TV_ F>_VP<<CK*>K??R M8-3W]H'O"^"+3VQ.MHBUWP>4C7 B(Z\/Z%7L9-NZ_=$OMCX\<K1W,`R,I9[= MW:*Q_WP3C48O] ^X]=%&VP?`\5F9XUN.TP7#'USVGVU<!6/C`;ZY[N/K\GW^ M=GY=30`E.8JD6L>WT^O\R:%<.O%9&3'06.K1(E^A7U'[0<?OUO?\CG?];F7? M[^I?IKY\)]#=Q8(FJ3KXT:P7[^!R;+U16U&4>:Z"5VE-T2CSXL7AOY=TEC9. MQ/<=8C-QXMY .\>)-2X&L76"T.#"B]F&HYB*RQ66.-B,TV%1<\2R_BC:<E^) MYOS6DFY_OEBM%R+$^AQ0T#E4JFFKB[HF>V5%S%,O'7L]<;4=BE,)A:9[AJ+& M,[OLH.BATCX?\Q>*I7GW"NO*MA+/ JG#(2423Y%8A^\D GB'?8,GVJH'6E[M MMXA<*RE3C:NHC#G73>M7]] %JHZ;*E MY[:;BFTB9\]-.ZFF[:VCO:ZB]5:: M=;JQN-HL\Z#!STM/R[4LKXRGQ8*<AKXGL:V&H;OA&CNX;AJ3V[7HM(Q\C;U> M&Y /!-`2$.%[-ML]P;6$."PC"J"#Z00%FYC($Z&`!2KW-$%!)Z5^)D(E%]1I MK0FH,+'1]UP\]JI8#&T5AI8&0X>I&.K%3%HF3&*!RGYBSD#BAXJ9A;J[:VO) M'*9B>1R64/=L,?<LXS.7W5ANMQ)X6&8I )-R/T.'ZLY "M`B 4D>"`M;H(D- MNK9!94L$:)Z )$T 3.Z"3IS0:R?4&5L!&,_2:,]2:,_29\]2QS54`S!D8$LS M=*DS=&DS="GC=(Z/]O1-9%\XS`(Q&S2Q0=<VJ*RACX;U2P+ZPHDN*'-")T[H MM1/JU'S/5GS/TGO/4GO/TGK/4MKE51\\X-O2#5U*#UTZ#UTJ#UT:.UP]1C., M2YACX0 7-'!"F1,Z<4*OG5"')\88(V,3>RSBT (%-HC9H(D-NK9!KHE]#*X; MVX+ON:QDY8"Q%2UC1SH>V^EX[`R8,?C1,LO0LLK02GUC5_R,[? 9.Y+XN*J` MH?R]:Y,!%9ZS0+X-"FP0LT%E6U%'U41=*85B;%&+>G?7]B9U!CUU!CUU!CUU M!#UU%6VT(N(I^-LRY9XU/*DK[J ==]2*.^J(.VK''55Q9_EZ6)9/`,=E^J'E M:SL<J2L<J2N=45<ZHT5$?JJM.B2Z0_IET$=]`:%T-E+;O\SW!$O;B!ON!:=T M1SYU:">4!K*%'_821P/Y+\"<9G$TT]Z\4%B2.3:G#;6G6AQZYD=!-SFY*;9` M5QRZ7'^"+C^/69Q4>[!R[[!Z)8OO"_)/.[K>=U6?]N(FY*\[K%7YL\]6/=#/ M5GV!P&*TW-?KC^4.M_Q<WN,F;UYD7R$(OO9V=_&Z#G]QIN+UG*JC=BLVRA]. M\X]*_BW[Y;K_Q+<]UVV I_:[(FUY(K_*!2LVHM4"7A$ Y7/X!;6]'2NIY;=< MM/AP=5Y>7-:(9PU'1'[6(KXX7-+IM3VUX5SLM'J=CN=YUEFB"D;:3GCC*YX* M+LSAW.J51C'>T24/G>9IZ >NY'IKSKUZATI/3N*5Q7S?51,`/QQ)LT;]N[2M M_J^+-R;?XD$H?M%1%UUUL7WITM2]5Z/>TS,W>_!#BQC\YA:<IN'FJ_<BL$)P M*K=7PS&F_Q!SW-IM2Q$]7M?;QE 2W>;GF+;KYDKY#4U"&AGTRGTK#[FL?<>D MYRX?JJJ&WHJRX0LF*.W`[J8S5*]ZANK9,U1/SC8]<7):A+SX_?SM93$):SA_ M:5W26U^8]"HJD][*TN2K&+(PXV:UR3]D)N[](Z?BWE>:BF5T?_EDW#-GX]J] MIF-M<&C]!_GN*:F<FC^C^&P1<T-8VP"NWWOZ<P_^55/+?:<Y[4UJ\9H&OJLV MI<&+NU/*7[,MWJWG36'D:,%/?: /J>SBATF&1$N6^+&/774>6#H+Z1O&05(^ M;X:733(<DN<0TF(B#;_OR.^>X,>B>`&#IYH>Y!+F>X^%7.J-=^/,(S]O&9DT M-5W/ LI 5BBIO9VMBH)^_[O?BD\Z:9N:H?Z1` >= \S`+5!+F*6OWY1>,-^U MOHP`(M;S=QD*\4Q#Y"^C`_+`WE[5WC/?N)JIOQ7%2[FFN:PN:LPAN4%YL\&A MC/4'(<Q165&T],QWEZK/ )IEB_ ^\<A'J;3WITN? ':^1>W^)E?^2G4+FUP? M<Q:\SZ?++(AO(^UCPV>'^X='OQSR;Q4?7,D[\1GCXP/UM>2#*[Q#Z(N3BQ\+ M:(%N]_42O_* =23?M!7_>2UNUI.3%\4WE%^?O[H"0(L\>8)?<8LG$&`1_EV4 MT\/#GW(TQ$(`1\._9H$3$00'"V\ :/!;SB?'%V<G;RYX9XB=`PR2E$4!)U"2 M?\!HP#_W`G,I_CT.^;%\(3P>JD%56#*A_,]5H!=2YL=1P+\IA;?ST$_B`B:H M] VJ(HZ5Y^1'^P45R6ZNX++X4(C!$UN7LKGP[I,G%,BYN<3'P<74+'S03MF, M^1F^MJU'WCG+C+_AT%<GFR*<$U+^<7S^J?`^81_P[[JPE`\X.=>2NA\OHZS. MOT"(#V!DO)SD7T1U?FJ<<^=4#>UC>#(G_%]O1]?41HY\SK]0' [LQ!E":I,' M.':+!,/ZBN`4AJ3VJE(^8X]A*O8,Y;'YJ+K;WW[]H=;7:(P-)`\A,)):K59+ MZFZUNAVSRJLF &KZ<:0HQA&W9:J#]C%SH%2:8U0KJN3#D>0&K]0XFY4Q1(Q M2]6:#0"F7KLCKX;HBV=Y8+#$%(.[\<A+D[`^'DQ=/U3I>`2<`B#Z_$O\C;^N M)`"J40.LB13P-"`J4ZBQ8^[` /^#._7*)(MP)#`X,A;B,4+BA6[B$5&?VS2C M) "."=9:0]`8"EOJY/# 8^>L5X<,G&A8[Q]23\>Q%:3VUAC"=UH4^-%&XZ?D M,V^3<&HD\/X+JS$=X 9ZUNO\N]UT)X(X&[,1./-71_Q'D<OC/AX:VT3TH#QX M'E9PFAH.5`0RRP5%(,3GP8]4E8L9Z <%3`9E\N'=9U3DFQ1+B)/A),L&);>M M-+9_$A.N,SS=_/" ?7S6*$%"U.,"S AFUE^X%\7H7 ;#4],`\5POI6:0OB/: M,PF=O_/JUEPEM"[K"=K324S,9!.5*9=+C"\P:U(P"8+RI^/3`.5HXTJ'`K3: M)X6**>%DB/6H-Q7HN-.K4BL"(](Q0=`]5+LGGKHS3$3YMX:#'./=$ANUU"0# MEK,+*9$S"^C^\.H1Q:^&/=9AN =`P5ZD=YO=FB#4E10W=7O[O#B,;^Z:]B'I M^;#/5Z;&VT<,F[G\M?B8U F:79) C].;=.*FX.C:M!C'.I%0RTEXH;R,&(F? M]R(L#-)?A,5!%HR .$B&$90&.3&"TB`U1E`:9, (T?(3950&[.;+J$BDF$T, MTPU&!=)ZN6O[`ZSE LWNYF^4;G=7EV,H.Y2&(7\Z(-:1=8M<3?I%7HS'CIR+ ML.`SCW!W.5<Y#'70_GA^9#4(FXVE3R6DL)QV]P\^[??._&I0Q910-I?V>:^- MAN%*-5."U8X[)T?MTTJ/4(U+6JS4=$[ SW8%E"DA_>KDX./Y80P4EQ!6G[[6 MU.&25JCO^#0PBH_):1$N3F3U'5X(_9,NG*/[?[E $N?[$B#(MSN:K3'I#Q*U M_V?W2X]A)97OL ;ZG\^/S_ASY]"M['Z/5#[N=FEY)9'OIOJ_NIV3_A$0P.PN M2?#=5#UN[W]M>W63\'LKFFZLHD;9PU/GN?,?J]J'I[$E2U$8^Q<3:(J)`ZV1 M24A_")H=6C`PE: :D/V`+"5)-;:4K-X:H3]X0SMN.4F3*'-)R]N:3"AZ:W(H MR!SEJ2I-_J6!X!B&:2;AY+F9(WFC.-U</1?6<)9BCCEN' E.;4WJ W$845]A M4M2)'0LHMUDY)RE>\LKI-)XDO%`D8:0T)^ID(*8M]]."RI02TR,69Y]<3%GZ M78W>OL) *5A-7*23XGTIT\6H<'($4.Z8)%1$5ICH9<D1'I63IR8U I/(9J6Y M'F>8,?;*3EADOA^DEI?FR1,Y__85M>&D*--&*)0>`2,L\E$ZF]SCDM2L0;D] M*>NI6>_\J4%YWR[)^A`&\"L<:ZF.N"I+/=;L`>'-;!./$.)>-L;#?#YI,,XM M== _:I\='K?H ;+J8AB\C\< G37CJHS!FH9PGY:$?;D2]FQF A-]3[W$ID91 M#_)*[JFL&,XG>D/!_P#-#N#5Z;;4! #0S[->7"(O2AZ"%^[F:<"O2!S$[`XW M7:*-[M)2QF#Z9AO1NXOVCW;W>YWPX<6+.[6QI_ZV].0ZH U ^7_W5%AL>O#Q MZ#$>=]%Q.]%?:6_H+>!L*$M.?(L9&W9\N_B218>V1,WE0LOJLA-V6!J)H78E M1.),(B=EY?XDNXDN(9P:7N#X$Q4MO)A!D=G1WX2Y,:4)(%Y<"]\XR :*16=_ M?6GKG8*R;38W&/2&P*ZJTQ>P$S7<B+Y6-HYP;D+5N6^Z[N(H&,X?=*/97&,K M1(BUAYX3"GY8Y#D:?`57)Q%>%%.IS\CJ7%R-IOG50=0N$L/M?`UAL9%<H[C9 M"_-X29VJNX(IPD;?>OOM;]WSXP-:#N2X.YM)WE$O8)"^\/)7M4VTZD%M=TZ^ MG':/3MN]WJH ?1A1A=V[<UM1=F%BVWF4NQIOB]W:RE-.P4YLU&0KL4PP)B&` M.<%IP.NW27&Y?()U?9Y?:;$&XW%[5-J6<A\?EEWCI\M9XP<*#LX,4W^3S)QP M+4RXRH1/A:<W2WU^>LG:2TKRZPBVVJKD"+[!SF('XV+F-6MX$BP=W=!*#F>B M_FU4MDUT>R8E!Z/G3$FX7QU\/E!OD^VWVQSJ?D=QN/_-QJ:ZO0("IG?7,`8\ MF#9W-YUL]IO(7"GF?;?*L.X)J'C-OTF SRA>IE8$,T?H-L*V3J)"%K H'P3W MDBXW:,3T^:#Y&>I4N`(!:[(#8#LEZ%3H6/.E",5U.ZF[KG'7U$GBJH/L.6$] M;U:C&X]MX4H-5JZ":<WR*V! 4!%,A6DQ2H/^K,HA!QNT+#$Z-_]I#FCVCC3O MPRT=^BQ[RJSL.M-21.[=/8IZYU2I[W<;_G6ONBIN#=LGIA+S"W$3QM;'2MXU MD<[GK;<_ZD!CZFFY#YH;$VKDB')K&?D3VV5LLQP.)A.2S&543= Z,/ZY$C^< M63HLIK#"1F2)VMH:4XIO8=TWQ2R#U6>VHM(<I:P/R.#Z(1J:S3QNC)'/28;$ MDA$S (4L%>#'8L*KI`2U$UA%XA`[MT`#(%<DK%75[V!'7NPCT)H7U?B-W8!^ MDZB.;A:BU3O[L%YOVQ\JW=%?HW0\ /8Q8'X4]DK*`TL[YS ZI;*25$A*6Z"F M R%H\RD>-^BP1 DZ5&>4#M1X5DSQ'NNR2*P/K>,*2&YW$<F4JKQ[_^&[H(!5 M_A3 ("P"(TZR:3;G(_W=^_<$M4QJ3VR`CQV2(,8P6QJV)$A8X_ N+N:#++>C MC6C02T(6.3(R8V`R004*`-TWS5,3KRAD;>UC5ED"8D\6-S_MI)EX(?QKR72= M`G\AF2*B]H8&\0AB\5CDD!-_TBKAY+T4=AN)L2&+UR6R..:&Y"/N_,74P_'] M!.KQ0OL5Q./(L#A^/2[EC=.:36=Z'V`+&3D6T=W=8#A?P.EQC[Y`L,C 6`#% M&Y\KH`1G[M1`!L?S`'TA%\9Z1LY-BA+9>.X>"`D02:B9%KJQ%?S0J]<Y<+FY MMPC3/'*KYV%0R0N!Q2%F"3I;-6.0SHKEHVFIF.H8C&Q>K#:V>HURE4$'J$;P M<D `E:-$P'X#-85-LZ6Z+Q9&7VZ2;+`JD9Z!,"REOUU*B+5178<P`5$>7"/L M8H<7\6]QC5 !B 2EQ2RM64"ZW:H$1<N!(1N>MW)7K4`_U+XE:)'_0:=Z `51 M)KC>9AP&Z)F1`"XWZZQ*.,H1(6R.J$1[,P+(8!0R<77HX01)C=76KZY]"*+* M0XL8'2A-"!^H_Q,)3)+3:J<35 U/IV!ZL,JJ:\B`\XXL+S ,UGCH>'F>6:[, M2NT4^'-/[6JV+FJVSHZP,H?\P 6WSHR&MHLG3,WC2+7V)-5LHZ1RZ$%BUA#< M2UNXJV(![ZE:J%=O4/V]5Z-L/$YG>);0 G*,V$V-\:5<NC<J-_#0%_QL>5?S MJJ#_6DJ/3DOP[M$UH57I*1</BHS6K&XF3W=N_I:.17O9F*PG25[:*P &5:^U M`.1`Z?L$NGY!_J^<)!M=4B[A1$-NQH<JZ4`H0SK84PB+*UR<80+JVCR&&K*& M(TT;&[H!NV-N?Z]L]D]!BMUH0IS,TK: :<HJ\)M5#P]S?>*4)-KEI68P3Z0! MV[.>QO(W \DB76X?+]?F: *J_WN$1EX^S-R/Y^8G$4U8V:=:63]]7/'Y9T^S MKX_'UE;Y[&P;&<`CQ[NU95Y6;)9J<3T::(-/EM/["0K/JM"PDQH?U]NK;' % M,ZF 'XP".AR"%#VJ'"-6(J=ZI1;`T6,.UKHC=9/SW6RAWPYI0^?`'GW6?Z&E M;F?9/!U<9)-L?J^FP$6EU'.,I`.Y;?*:XD'KM^1:_/IF:^M;EF/5'75=E&5V M`<,FQ'+2(AQ3V(??#"6N4WR/,[>&-^O-VC!T5<.K=/CC%'IOJ>#C-QQ-Y6L; MM9"6O.-YI>8WH1O[U'BQYT6>RO'LSN2`[,A0"<WY!4FV>BLQV$3<V:5(O<Q* M!T/_8B-2BS!VC./2#;>.]T-EM2!";W=Q+1X#8<:W\"^U8KJ3W+O.DL_O D;% M+=[78=C4ZUD!^]J4'=+2Z37P!'?Q'^W##01$"1)%NH33U*,IRQG\QH:=V$2_ M$&JJ/YR/U U:)X'6^>YO#2"F 4"BORJ ^&L=K-3`( (:6/17!19_C<.*.'Q7 MN$5NEHD6L8%JXWCN%1OW;C=GCKFM=D': ?W/WL 'G&0:W$HG(85VY0'M7/7E MCKR?^[4#G.B,S=7O*I<K=JS?SY=B?+L48V9HKT$J.(3SL!QCKOT<&*<AQC9Y M2RZB()N$:`O+6\YZTQ)%?RC[4A/VI0>674QRT;T`HW[K[1^E\V.`2B-D#1== M*3HG9Z=-+W#SF^V:FS?K.K%*CR#205=YP5VMT,_#CQ_J!#0KPRZ5K^2]"1&< M[4_1.^G:ZZ*?</"$;T*MAR?//!Q(?"5^D\ +3WF.!9^\EY][X>-2Q\1'R#HH MNHBYZ&PPGSDBRW1PETT74Q$E? 85JA;)5=$U1 "#[VOM)W9=3"8-EH4\;199 M'K_VN`][1]VBHJ\8*O^*:K")BF=H<I+.;XO9CS8#E+>O=+O[3OTAP*E3_#$> MP>DY*KEQ;G[3-.3VYWEV1TUQ`;S>"CS'SX;73*H=SXD\XJUKKW^=5][B>&S= M>)/>V6E[_W.K\HC%HU_D6>*RW$+$(12!84BLX3806?&L\.&9SY4P^[LZE1]) MHK9U+*_X^>BYR7-P=%JASOG!$ZA#C?X/4$L#!!0`` `(`+B4/#1*RO `U0$` M`/L#```&`!4`=&5S="YD550)``/KJ]M#ZZO;0U5X!`#H`V0`C5-;:]LP%'Y. MH?_A8. F0^TJI6R0=(%=FI&7,NC82],'Q3Z.Q6PY2$JZTNV_[^CB)'/[,(PM M^SO?Y> RW;3:0O&EKGIBI]HIZ<G\ BSI>S^A;109=<.:5JJ-6&$* NMD(JE MSZ<GHZVI'<<3/P#_->><PV] !R._P!NJ\?E\GDZ!5*.+"PA5J.6Z]G+G/2IJ MH>\?H.Z,LTLFDW$RC7S_`=D,FJX0#3V[#;#%M]V[M">,+]_GG*Y7:5>>1O=" M6=0*[<>RU& ,2$%)"A]A4&"NB7/?6NIZ>-328M4HEAC4.]1O#8C`G,"96>JE M2L[)S'/%UG9PY\<- 1TSOA>;`#,I\BB?BU8V3RSURL#.5U*5+)I%J)'&HF)C M[L%!2-%(5/:5D!?M:&P[B\2,MJ(H<&-9;QK*N4'*KSK="LN2+(.[L(D?DNRS MS&W6C[??>5`=S2':>%(_SW0/AV6/IWWX8<04^3ELZ;\CPPA>1$9X&#D]/FZK M;56A=DV$M[Q!M;8U#6G,+Z\<[ X] 83L_0J4.V1!,# L5BZ[F#U9-$LU:>; MKXM;F,VH4S**^;)BSG4&W/],T8(E9X9HP?J>0YX[R8,/^>-UAZCK:[BY_9+X MFD:[U0HXO7O:7U!+`0(7`PH``````&Z6/30````````````````$``T````` M````$`#M00````!S=&0O550%``.?`-U#57 ``%!+`0(7`Q0`` `(`/1F1#0B M(7*J(28``"FD```,``T```````$```"D 3<```!S=&0O<V]C:V5T+F155`4` M`SN6Y$-5>```4$L!`A<#%``"`` `N)0\-$K*^`#5`0``^P,```8`#0`````` M`0```*2!ER8``'1E<W0N9%54!0`#ZZO;0U5X``!02P4&``````,``P#'```` &I2 ````` ` end -----BEGIN PGP SIGNATURE----- iD8DBQFD5Jpq3w+/yD4P9tIRAkqlAJ9hZqZgazcvQK6YVwhEwpNoYg07lQCfasJo gv+/wFwbq4C5Y5USAChWZko= =zlc0 -----END PGP SIGNATURE-----
Feb 04 2006
parent reply Thomas Kuehne <thomas-dloop kuehne.cn> writes:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

some more code clean up from the previous post

As far as I'm aware, there aren't any bugs left in the code.

Thomas

begin 644 socket_ip6_4.zip
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
9>```4$L%! `````#``,`QP```)DI````````
`
end


-----BEGIN PGP SIGNATURE-----

iD8DBQFD5LV63w+/yD4P9tIRAv1mAJ9Y5higuTDJ8BLmNR4SleGZmFlBQACeJMlw
EIBMYDL8/zw7mFjVgZgcNgM=
=paHq
-----END PGP SIGNATURE-----
Feb 04 2006
parent Sohgo Takeuchi <sohgo sohgo.dyndns.org> writes:
Thomas Kuehne Wrote:

 some more code clean up from the previous post
 
 As far as I'm aware, there aren't any bugs left in the code.
I've compiled the std/socket.d of socket_ip6_4.zip on the current D1 and D2 environment. But the compiler outputs a lot of error messages. Do you have a plan to catch up with current D1 and D2? regards,
Mar 20 2010