ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/AnyEvent-FastPing/FastPing.xs
(Generate patch)

Comparing AnyEvent-FastPing/FastPing.xs (file contents):
Revision 1.13 by root, Sat Feb 5 23:37:21 2011 UTC vs.
Revision 1.14 by root, Wed Oct 8 21:12:28 2014 UTC

197} 197}
198 198
199static void 199static void
200pkt_cksum (PKT *pkt) 200pkt_cksum (PKT *pkt)
201{ 201{
202 uint_fast32_t sum = -pkt->cksum; 202 uint_fast32_t sum = 0;
203 uint32_t *wp = (uint32_t *)pkt; 203 uint32_t *wp = (uint32_t *)pkt;
204 int len = sizeof (*pkt) / 4; 204 int len = sizeof (*pkt) / 4;
205 205
206 do 206 do
207 { 207 {
208 uint_fast32_t w = *(volatile uint32_t *)wp++; 208 uint_fast32_t w = *(volatile uint32_t *)wp++;
209 sum += (w & 0xffff) + (w >> 16); 209 sum += (w & 0xffff) + (w >> 16);
210 } 210 }
211 while (len--); 211 while (--len);
212 212
213 sum = (sum >> 16) + (sum & 0xffff); /* add high 16 to low 16 */ 213 sum = (sum >> 16) + (sum & 0xffff); /* add high 16 to low 16 */
214 sum += sum >> 16; /* add carry */ 214 sum += sum >> 16; /* add carry */
215 215
216 pkt->cksum = ~sum; 216 pkt->cksum = ~sum;
268 268
269 if (addrlen == 4) 269 if (addrlen == 4)
270 { 270 {
271 struct sockaddr_in sa; 271 struct sockaddr_in sa;
272 272
273 pkt->type = ICMP4_ECHO; 273 pkt->type = ICMP4_ECHO;
274 pkt_cksum (pkt); 274 pkt_cksum (pkt);
275 275
276 sa.sin_family = AF_INET; 276 sa.sin_family = AF_INET;
277 sa.sin_port = 0; 277 sa.sin_port = 0;
278 278

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines