Re: spread-5.0.0rc1 : Solaris setsockopt issue
Martin Schu <[email protected]> Wed, 14 Dec 2016 12:04:52 +0100
| Newsgroups | gmane.network.spread.user |
|---|---|
| Message-ID | <CAOSQKUU4jZqLc5dCdp=eQibVsPAXDHHCrqpirTvmE9Y-mieGeg@mail.gmail.com> |
--001a11423a3264379e05439c4e08 Content-Type: multipart/alternative; boundary=001a11423a3264379a05439c4e06 --001a11423a3264379a05439c4e06 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable John, attached is our patch for spread-src-5.0.0rc1/libspread-util/src/data_link.= c to avoid setsockopt failing at runtime at Solaris. This code is running well now on both Solaris and Linux. We use the same parameter style for setsockopt as you did it in the older spread-src-4.4.0/.../data_link.c. Concerning Solaris the setsockopt value parameter must be unsigned char or int depending on the kind of option to be set. We don't like and understand this, but apparently it is necessary at Solaris. On the other hand the new code is running well at both Solaris and Linux. So there is no need to make it OS dependent. We would be glad if you could include that patch in your upcoming release. Kind regards, Martin *** libspread-util/src/data_link.c.orig 2016-11-22 21:07:12.000000000 +0100 --- libspread-util/src/data_link.c 2016-12-13 09:32:34.707739959 +0100 *************** *** 167 **** ! * TODO: check on sizeof setsockopt types across platforms (i.e. - Sun: char vs. int) --- 167 ---- ! * DONE: check on sizeof setsockopt types across platforms (i.e. - Sun: char vs. int) *************** *** 174 **** --- 175,176 ---- + int on =3D1, off =3D0; + unsigned char one=3D1, zero=3D0; *************** *** 176 **** ! Alarmp(SPLOG_INFO, DATA_LINK, "DL_init_channel_gen: creating a SOCK_DGRAM socket of family %d\n", family); --- 178 ---- ! Alarmp(SPLOG_INFO, DATA_LINK, "DL_init_channel_gen: 5.0.0-rc1-p1 creating a SOCK_DGRAM socket of family %d\n", family); *************** *** 200 **** ! if (setsockopt(chan, SOL_SOCKET, SO_BROADCAST, (tmp =3D 1, &tmp), sizeof(tmp))) --- 202 ---- ! if (setsockopt(chan, SOL_SOCKET, SO_BROADCAST, (char *)&on, sizeof(on))) *************** *** 205 **** ! if (setsockopt(chan, IPPROTO_IP, IP_MULTICAST_TTL, (tmp =3D 1, &tmp= ), sizeof(tmp))) --- 207 ---- ! if (setsockopt(chan, IPPROTO_IP, IP_MULTICAST_TTL, (void *)&one, sizeof(one))) *************** *** 213 **** ! if (setsockopt(chan, IPPROTO_IP, IP_MULTICAST_LOOP, (tmp =3D 0, &tmp), sizeof(tmp))) --- 215 ---- ! if (setsockopt(chan, IPPROTO_IP, IP_MULTICAST_LOOP, (void *)&zero, sizeof(zero))) *************** *** 221 **** ! if (setsockopt(chan, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, (tmp =3D 1, &tmp), sizeof(tmp))) --- 223 ---- ! if (setsockopt(chan, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, (void *)&one, sizeof(one))) *************** *** 229 **** ! if (setsockopt(chan, IPPROTO_IPV6, IPV6_MULTICAST_LOOP, (tmp =3D = 0, &tmp), sizeof(tmp))) --- 231 ---- ! if (setsockopt(chan, IPPROTO_IPV6, IPV6_MULTICAST_LOOP, (void *)&zero, sizeof(zero))) *************** *** 243 **** ! if (setsockopt(chan, SOL_SOCKET, SO_BROADCAST, (tmp =3D 1, &tmp), sizeof(tmp))) --- 245 ---- ! if (setsockopt(chan, SOL_SOCKET, SO_BROADCAST, (char *)&on, sizeof(on))) *************** *** 254 **** ! if (setsockopt(chan, SOL_SOCKET, SO_REUSEADDR, (tmp =3D 1, &tmp), sizeof(tmp))) --- 256 ---- ! if (setsockopt(chan, SOL_SOCKET, SO_REUSEADDR, (char *)&on, sizeof(on))) On Thu, Dec 8, 2016 at 3:13 PM, John Lane Schultz < [email protected]> wrote: > Martin, > > Yes, I am vaguely aware that SunOS expects different sized parameters for > options to setsockopt than other platforms but I have no SunOS instance > with which to test readily available. > > My hope was that SunOS would have changed to allow larger than expected > parameters (e.g. - int) so that the same code was more cross platform. > > If you could take a crack at modifying and testing that bit of code and > post the diff here, then I=E2=80=99d appreciate it. Otherwise, I will tr= y my best > (without testing) for the next release candidate. > > Cheers! > > ----- > John Lane Schultz > Spread Concepts LLC > Cell: 443 838 2200 > > On Dec 8, 2016, at 8:10 AM, Martin Schu <[email protected]> wrote: > > Hi John, > > we are very glad to see the new version, 5.0.0 RC1, of The Spread Toolkit= . > Apparently you've not only added IPv6 support but did further polishing, > e.g. improved logging and error handling. > > We've tested 5.0.0rc1 in our environment and observed some problems. > > In our Sun/Oracle/Solaris environment spread 5.0.0rc1 fails during startu= p > saying: > "DL_init_channel_gen: problem (22: Invalid argument) in setsockopt of > multicast ttl =3D 1; ignore on Windows" > > In spread-src-5.0.0rc1:libspread-util/src/data_link.c you made some > comment: > > " * TODO: check on sizeof setsockopt types across platforms (i.e. - Sun: > char vs. int)" > > This leads to my assumption that you are aware of that issue, aren't you? > Are you planning to fix it? > > Kind regards, > > Martin > > Set Alarm mask to: ffffffff > 2016-12-06 14:42:29 GMT Disabling Dangerous Monitor Commands! > 2016-12-06 14:42:29 GMT Setting SO_REUSEADDR to auto > 2016-12-06 14:42:29 GMT Hash value for this configuration is: 3310648069 > 2016-12-06 14:42:29 GMT Finished configuration file. > 2016-12-06 14:42:29 GMT Conf_load_conf_file: using sin6_scope_id 0 for > interface 172.16.0.171 > 2016-12-06 14:42:29 GMT Conf_load_conf_file: My name: easy-serv-02b, id: > 176040470, addr: 172.16.0.171, port: 7982 > 2016-12-06 14:42:29 GMT E_init: went ok > 2016-12-06 14:42:29 GMT new: creating pointer 0x39f7b0 to object type 2 > named pack_head > 2016-12-06 14:42:29 GMT new: creating pointer 0x385a10 to object type 50 > named packet_body > 2016-12-06 14:42:29 GMT new: creating pointer 0x39f800 to object type 8 > named token_head > 2016-12-06 14:42:29 GMT new: creating pointer 0x3a1fb0 to object type 9 > named token_body > 2016-12-06 14:42:29 GMT new: creating pointer 0x39f850 to object type 8 > named token_head > 2016-12-06 14:42:29 GMT new: creating pointer 0x385fd0 to object type 50 > named packet_body > 2016-12-06 14:42:29 GMT Net_signal_conf_reload: Bcast is not needed > 2016-12-06 14:42:29 GMT Net_init: implicit: binding bcast recv channel to > [0.0.0.0]:7982 > 2016-12-06 14:42:29 GMT DL_init_channel_gen: creating a SOCK_DGRAM socket > of family 2 > 2016-12-06 14:42:29 GMT DL_init_channel_gen: turning SO_BROADCAST on for > recv IPv4 channel > 2016-12-06 14:42:29 GMT DL_init_channel_gen: binding recv channel to > [0.0.0.0]:7982 > 2016-12-06 14:42:29 GMT DL_init_channel_gen: success; chan =3D 4 > 2016-12-06 14:42:29 GMT Net_init: implicit: binding token recv channel to > [0.0.0.0]:7983 > 2016-12-06 14:42:29 GMT DL_init_channel_gen: creating a SOCK_DGRAM socket > of family 2 > 2016-12-06 14:42:29 GMT DL_init_channel_gen: turning SO_BROADCAST on for > recv IPv4 channel > 2016-12-06 14:42:29 GMT DL_init_channel_gen: binding recv channel to > [0.0.0.0]:7983 > 2016-12-06 14:42:29 GMT DL_init_channel_gen: success; chan =3D 5 > 2016-12-06 14:42:29 GMT Net_init: creating send channel bound to > 172.16.0.171 > 2016-12-06 14:42:29 GMT DL_init_channel_gen: creating a SOCK_DGRAM socket > of family 2 > 2016-12-06 14:42:29 GMT DL_init_channel_gen: turning SO_BROADCAST on for > send IPv4 channel > 2016-12-06 14:42:29 GMT DL_init_channel_gen: setting IPv4 multicast TTL t= o > 1 for send channel > 2016-12-06 14:42:29 GMT DL_init_channel_gen: problem (22: Invalid > argument) in setsockopt of multicast ttl =3D 1; ignore on Windows > Exit caused by Alarm! > > > > --001a11423a3264379a05439c4e06 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr"><div><div><div>John,<br><br></div>attached is our patch fo= r spread-src-5.0.0rc1/libspread-<wbr>util/src/data_link.c to avoid setsocko= pt failing at runtime at Solaris.<br><br></div>This code is running well no= w on both Solaris and Linux. We use the same parameter style for setsockopt= as you did it in the older spread-src-4.4.0/.../data_<wbr>link.c. Concerni= ng Solaris the setsockopt value parameter must be unsigned char or int depe= nding on the kind of option to be set. We don't like and understand thi= s, but apparently it is necessary at Solaris. On the other hand the new cod= e is running well at both Solaris and Linux. So there is no need to make it= OS dependent. <br><br></div><div>We would be glad if you could include tha= t patch in your upcoming release.<br><br></div><div>Kind regards,<br></div>= <div>Martin<br></div><br><div><div><font size=3D"1"><span style=3D"font-fam= ily:monospace,monospace">*** libspread-util/src/data_link.<wbr>c.orig=C2=A0= =C2=A0=C2=A0 2016-11-22 21:07:12.000000000 +0100<br>--- libspread-util/src/= data_link.<wbr>c=C2=A0=C2=A0=C2=A0 2016-12-13 09:32:34.707739959 +0100<br>*= **************<br>*** 167 ****<br>!=C2=A0 * TODO: check on sizeof setsockop= t types across platforms (i.e. - Sun: char vs. int)<br>--- 167 ----<br>!=C2= =A0 * DONE: check on sizeof setsockopt types across platforms (i.e. - Sun: = char vs. int)<br>***************<br>*** 174 ****<br>--- 175,176 ----<br>+= =C2=A0=C2=A0 int=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0 on =3D1, off =3D0;<br>+=C2=A0=C2=A0 unsigned char one=3D1, zero=3D0;<br= >***************<br>*** 176 ****<br>!=C2=A0=C2=A0 Alarmp(SPLOG_INFO, DATA_L= INK, "DL_init_channel_gen: creating a SOCK_DGRAM socket of family %d\n= ", family);<br>--- 178 ----<br>!=C2=A0=C2=A0 Alarmp(SPLOG_INFO, DATA_L= INK, "DL_init_channel_gen: 5.0.0-rc1-p1 creating a SOCK_DGRAM socket o= f family %d\n", family);<br>***************<br>*** 200 ****<br>!=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (setsockopt(chan, SOL_SOCKET, SO_BROADCAS= T, (tmp =3D 1, &tmp), sizeof(tmp)))<br>--- 202 ----<br>!=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 if (setsockopt(chan, SOL_SOCKET, SO_BROADCAST, (char = *)&on, sizeof(on)))<br>***************<br>*** 205 ****<br>!=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0 if (setsockopt(chan, IPPROTO_IP, IP_MULTICAST_TTL,= (tmp =3D 1, &tmp), sizeof(tmp))) <br>--- 207 ----<br>!=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 if (setsockopt(chan, IPPROTO_IP, IP_MULTICAST_TTL, (v= oid *)&one, sizeof(one))) <br>***************<br>*** 213 ****<br>!=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (setsockopt(chan, IPPROTO_= IP, IP_MULTICAST_LOOP, (tmp =3D 0, &tmp), sizeof(tmp)))<br>--- 215 ----= <br>!=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (setsockopt(chan, = IPPROTO_IP, IP_MULTICAST_LOOP, (void *)&zero, sizeof(zero)))<br>*******= ********<br>*** 221 ****<br>!=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (setso= ckopt(chan, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, (tmp =3D 1, &tmp), sizeo= f(tmp))) <br>--- 223 ----<br>!=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (sets= ockopt(chan, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, (void *)&one, sizeof(on= e))) <br>***************<br>*** 229 ****<br>!=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 if (setsockopt(chan, IPPROTO_IPV6, IPV6_MULTICAST_LOOP, = (tmp =3D 0, &tmp), sizeof(tmp)))<br>--- 231 ----<br>!=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (setsockopt(chan, IPPROTO_IPV6, IPV6_MULT= ICAST_LOOP, (void *)&zero, sizeof(zero)))<br>***************<br>*** 243= ****<br>!=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (setsockopt(chan, SOL_SOC= KET, SO_BROADCAST, (tmp =3D 1, &tmp), sizeof(tmp)))<br>--- 245 ----<br>= !=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (setsockopt(chan, SOL_SOCKET, SO_B= ROADCAST, (char *)&on, sizeof(on)))<br>***************<br>*** 254 ****<= br>!=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (setsockopt(chan, SOL_SOCKET, S= O_REUSEADDR, (tmp =3D 1, &tmp), sizeof(tmp)))<br>--- 256 ----<br>!=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (setsockopt(chan, SOL_SOCKET, SO_REUSE= ADDR, (char *)&on, sizeof(on)))<br></span></font><br><br><br><div><br><= /div></div></div></div><div class=3D"gmail_extra"><br><div class=3D"gmail_q= uote">On Thu, Dec 8, 2016 at 3:13 PM, John Lane Schultz <span dir=3D"ltr">&= lt;<a href=3D"mailto:[email protected]" target=3D"_blank">jschult= [email protected]</a>></span> wrote:<br><blockquote class=3D"gmail_qu= ote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex= ">Martin,<br> <br> Yes, I am vaguely aware that SunOS expects different sized parameters for o= ptions to setsockopt than other platforms but I have no SunOS instance with= which to test readily available.<br> <br> My hope was that SunOS would have changed to allow larger than expected par= ameters (e.g. - int) so that the same code was more cross platform.<br> <br> If you could take a crack at modifying and testing that bit of code and pos= t the diff here, then I=E2=80=99d appreciate it.=C2=A0 Otherwise, I will tr= y my best (without testing) for the next release candidate.<br> <br> Cheers!<br> <br> -----<br> John Lane Schultz<br> Spread Concepts LLC<br> Cell: 443 838 2200<br> <div class=3D"HOEnZb"><div class=3D"h5"><br> On Dec 8, 2016, at 8:10 AM, Martin Schu <<a href=3D"mailto:martin.sc1111= [email protected]">[email protected]</a>> wrote:<br> <br> Hi John,<br> <br> we are very glad to see the new version, 5.0.0 RC1, of The Spread Toolkit.<= br> Apparently you've not only added IPv6 support but did further polishing= , e.g. improved logging and error handling.<br> <br> We've tested 5.0.0rc1 in our environment and observed some problems.<br= > <br> In our Sun/Oracle/Solaris environment spread 5.0.0rc1 fails during startup = saying:<br> "DL_init_channel_gen: problem (22: Invalid argument) in setsockopt of = multicast ttl =3D 1; ignore on Windows"<br> <br> In spread-src-5.0.0rc1:libspread-<wbr>util/src/data_link.c you made some co= mment:<br> <br> " * TODO: check on sizeof setsockopt types across platforms (i.e. - Su= n: char vs. int)"<br> <br> This leads to my assumption that you are aware of that issue, aren't yo= u? Are you planning to fix it?<br> <br> Kind regards,<br> <br> Martin<br> <br> Set Alarm mask to: ffffffff<br> 2016-12-06 14:42:29 GMT Disabling Dangerous Monitor Commands!<br> 2016-12-06 14:42:29 GMT Setting SO_REUSEADDR to auto<br> 2016-12-06 14:42:29 GMT Hash value for this configuration is: 3310648069<br= > 2016-12-06 14:42:29 GMT Finished configuration file.<br> 2016-12-06 14:42:29 GMT Conf_load_conf_file: using sin6_scope_id 0 for inte= rface 172.16.0.171<br> 2016-12-06 14:42:29 GMT Conf_load_conf_file: My name: easy-serv-02b, id: 17= 6040470, addr: 172.16.0.171, port: 7982<br> 2016-12-06 14:42:29 GMT E_init: went ok<br> 2016-12-06 14:42:29 GMT new: creating pointer 0x39f7b0 to object type 2 nam= ed pack_head<br> 2016-12-06 14:42:29 GMT new: creating pointer 0x385a10 to object type 50 na= med packet_body<br> 2016-12-06 14:42:29 GMT new: creating pointer 0x39f800 to object type 8 nam= ed token_head<br> 2016-12-06 14:42:29 GMT new: creating pointer 0x3a1fb0 to object type 9 nam= ed token_body<br> 2016-12-06 14:42:29 GMT new: creating pointer 0x39f850 to object type 8 nam= ed token_head<br> 2016-12-06 14:42:29 GMT new: creating pointer 0x385fd0 to object type 50 na= med packet_body<br> 2016-12-06 14:42:29 GMT Net_signal_conf_reload: Bcast is not needed<br> 2016-12-06 14:42:29 GMT Net_init: implicit: binding bcast recv channel to [= 0.0.0.0]:7982<br> 2016-12-06 14:42:29 GMT DL_init_channel_gen: creating a SOCK_DGRAM socket o= f family 2<br> 2016-12-06 14:42:29 GMT DL_init_channel_gen: turning SO_BROADCAST on for re= cv IPv4 channel<br> 2016-12-06 14:42:29 GMT DL_init_channel_gen: binding recv channel to [0.0.0= .0]:7982<br> 2016-12-06 14:42:29 GMT DL_init_channel_gen: success; chan =3D 4<br> 2016-12-06 14:42:29 GMT Net_init: implicit: binding token recv channel to [= 0.0.0.0]:7983<br> 2016-12-06 14:42:29 GMT DL_init_channel_gen: creating a SOCK_DGRAM socket o= f family 2<br> 2016-12-06 14:42:29 GMT DL_init_channel_gen: turning SO_BROADCAST on for re= cv IPv4 channel<br> 2016-12-06 14:42:29 GMT DL_init_channel_gen: binding recv channel to [0.0.0= .0]:7983<br> 2016-12-06 14:42:29 GMT DL_init_channel_gen: success; chan =3D 5<br> 2016-12-06 14:42:29 GMT Net_init: creating send channel bound to 172.16.0.1= 71<br> 2016-12-06 14:42:29 GMT DL_init_channel_gen: creating a SOCK_DGRAM socket o= f family 2<br> 2016-12-06 14:42:29 GMT DL_init_channel_gen: turning SO_BROADCAST on for se= nd IPv4 channel<br> 2016-12-06 14:42:29 GMT DL_init_channel_gen: setting IPv4 multicast TTL to = 1 for send channel<br> 2016-12-06 14:42:29 GMT DL_init_channel_gen: problem (22: Invalid argument)= in setsockopt of multicast ttl =3D 1; ignore on Windows<br> Exit caused by Alarm!<br> <br> <br> <br> </div></div></blockquote></div><br></div> --001a11423a3264379a05439c4e06-- --001a11423a3264379e05439c4e08 Content-Type: application/octet-stream; name="spread-setsockopt.patch" Content-Disposition: attachment; filename="spread-setsockopt.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_iwotx1b40 KioqIGxpYnNwcmVhZC11dGlsL3NyYy9kYXRhX2xpbmsuYy5vcmlnCTIwMTYtMTEtMjIgMjE6MDc6 MTIuMDAwMDAwMDAwICswMTAwCi0tLSBsaWJzcHJlYWQtdXRpbC9zcmMvZGF0YV9saW5rLmMJMjAx Ni0xMi0xMyAwOTozMjozNC43MDc3Mzk5NTkgKzAxMDAKKioqKioqKioqKioqKioqCioqKiAxNjcg KioqKgohICAqIFRPRE86IGNoZWNrIG9uIHNpemVvZiBzZXRzb2Nrb3B0IHR5cGVzIGFjcm9zcyBw bGF0Zm9ybXMgKGkuZS4gLSBTdW46IGNoYXIgdnMuIGludCkKLS0tIDE2NyAtLS0tCiEgICogRE9O RTogY2hlY2sgb24gc2l6ZW9mIHNldHNvY2tvcHQgdHlwZXMgYWNyb3NzIHBsYXRmb3JtcyAoaS5l LiAtIFN1bjogY2hhciB2cy4gaW50KQoqKioqKioqKioqKioqKioKKioqIDE3NCAqKioqCi0tLSAx NzUsMTc2IC0tLS0KKyAgIGludCAgICAgICAgICAgb24gPTEsIG9mZiA9MDsKKyAgIHVuc2lnbmVk IGNoYXIgb25lPTEsIHplcm89MDsKKioqKioqKioqKioqKioqCioqKiAxNzYgKioqKgohICAgQWxh cm1wKFNQTE9HX0lORk8sIERBVEFfTElOSywgIkRMX2luaXRfY2hhbm5lbF9nZW46IGNyZWF0aW5n IGEgU09DS19ER1JBTSBzb2NrZXQgb2YgZmFtaWx5ICVkXG4iLCBmYW1pbHkpOwotLS0gMTc4IC0t LS0KISAgIEFsYXJtcChTUExPR19JTkZPLCBEQVRBX0xJTkssICJETF9pbml0X2NoYW5uZWxfZ2Vu OiA1LjAuMC1yYzEtcDEgY3JlYXRpbmcgYSBTT0NLX0RHUkFNIHNvY2tldCBvZiBmYW1pbHkgJWRc biIsIGZhbWlseSk7CioqKioqKioqKioqKioqKgoqKiogMjAwICoqKioKISAgICAgICBpZiAoc2V0 c29ja29wdChjaGFuLCBTT0xfU09DS0VULCBTT19CUk9BRENBU1QsICh0bXAgPSAxLCAmdG1wKSwg c2l6ZW9mKHRtcCkpKQotLS0gMjAyIC0tLS0KISAgICAgICBpZiAoc2V0c29ja29wdChjaGFuLCBT T0xfU09DS0VULCBTT19CUk9BRENBU1QsIChjaGFyICopJm9uLCBzaXplb2Yob24pKSkKKioqKioq KioqKioqKioqCioqKiAyMDUgKioqKgohICAgICAgIGlmIChzZXRzb2Nrb3B0KGNoYW4sIElQUFJP VE9fSVAsIElQX01VTFRJQ0FTVF9UVEwsICh0bXAgPSAxLCAmdG1wKSwgc2l6ZW9mKHRtcCkpKSAK LS0tIDIwNyAtLS0tCiEgICAgICAgaWYgKHNldHNvY2tvcHQoY2hhbiwgSVBQUk9UT19JUCwgSVBf TVVMVElDQVNUX1RUTCwgKHZvaWQgKikmb25lLCBzaXplb2Yob25lKSkpIAoqKioqKioqKioqKioq KioKKioqIDIxMyAqKioqCiEgICAgICAgICBpZiAoc2V0c29ja29wdChjaGFuLCBJUFBST1RPX0lQ LCBJUF9NVUxUSUNBU1RfTE9PUCwgKHRtcCA9IDAsICZ0bXApLCBzaXplb2YodG1wKSkpCi0tLSAy MTUgLS0tLQohICAgICAgICAgaWYgKHNldHNvY2tvcHQoY2hhbiwgSVBQUk9UT19JUCwgSVBfTVVM VElDQVNUX0xPT1AsICh2b2lkICopJnplcm8sIHNpemVvZih6ZXJvKSkpCioqKioqKioqKioqKioq KgoqKiogMjIxICoqKioKISAgICAgICBpZiAoc2V0c29ja29wdChjaGFuLCBJUFBST1RPX0lQVjYs IElQVjZfTVVMVElDQVNUX0hPUFMsICh0bXAgPSAxLCAmdG1wKSwgc2l6ZW9mKHRtcCkpKSAKLS0t IDIyMyAtLS0tCiEgICAgICAgaWYgKHNldHNvY2tvcHQoY2hhbiwgSVBQUk9UT19JUFY2LCBJUFY2 X01VTFRJQ0FTVF9IT1BTLCAodm9pZCAqKSZvbmUsIHNpemVvZihvbmUpKSkgCioqKioqKioqKioq KioqKgoqKiogMjI5ICoqKioKISAgICAgICAgIGlmIChzZXRzb2Nrb3B0KGNoYW4sIElQUFJPVE9f SVBWNiwgSVBWNl9NVUxUSUNBU1RfTE9PUCwgKHRtcCA9IDAsICZ0bXApLCBzaXplb2YodG1wKSkp Ci0tLSAyMzEgLS0tLQohICAgICAgICAgaWYgKHNldHNvY2tvcHQoY2hhbiwgSVBQUk9UT19JUFY2 LCBJUFY2X01VTFRJQ0FTVF9MT09QLCAodm9pZCAqKSZ6ZXJvLCBzaXplb2YoemVybykpKQoqKioq KioqKioqKioqKioKKioqIDI0MyAqKioqCiEgICAgICAgaWYgKHNldHNvY2tvcHQoY2hhbiwgU09M X1NPQ0tFVCwgU09fQlJPQURDQVNULCAodG1wID0gMSwgJnRtcCksIHNpemVvZih0bXApKSkKLS0t IDI0NSAtLS0tCiEgICAgICAgaWYgKHNldHNvY2tvcHQoY2hhbiwgU09MX1NPQ0tFVCwgU09fQlJP QURDQVNULCAoY2hhciAqKSZvbiwgc2l6ZW9mKG9uKSkpCioqKioqKioqKioqKioqKgoqKiogMjU0 ICoqKioKISAgICAgICBpZiAoc2V0c29ja29wdChjaGFuLCBTT0xfU09DS0VULCBTT19SRVVTRUFE RFIsICh0bXAgPSAxLCAmdG1wKSwgc2l6ZW9mKHRtcCkpKQotLS0gMjU2IC0tLS0KISAgICAgICBp ZiAoc2V0c29ja29wdChjaGFuLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsIChjaGFyICopJm9u LCBzaXplb2Yob24pKSkK --001a11423a3264379e05439c4e08 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Spread-users mailing list [email protected] http://lists.spread.org/mailman/listinfo/spread-users --001a11423a3264379e05439c4e08--