comparison network.c @ 438:3be600124da8

Fix packet shifting.
author Matti Hamalainen <ccr@tnsp.org>
date Fri, 25 May 2012 21:30:57 +0300
parents 691400f1c9bb
children bb65460c7aa2
comparison
equal deleted inserted replaced
437:8e9690a3f973 438:3be600124da8
377 fd_set tmpfds; 377 fd_set tmpfds;
378 378
379 if (conn == NULL) 379 if (conn == NULL)
380 return -10; 380 return -10;
381 381
382 // Prod the input buffer 382 // Shift the input buffer
383 if (conn->ptr > conn->buf && conn->in_ptr - conn->ptr > 0) 383 if (conn->ptr > conn->buf)
384 { 384 {
385 size_t delta = conn->ptr - conn->buf; 385 size_t left = conn->in_ptr - conn->ptr;
386 memmove(conn->buf, conn->ptr, delta); 386 if (left > 0)
387 conn->ptr = conn->buf; 387 {
388 conn->in_ptr -= delta; 388 size_t moved = conn->ptr - conn->buf;
389 conn->total_bytes -= delta; 389 memmove(conn->buf, conn->ptr, left);
390 conn->ptr = conn->buf;
391 conn->in_ptr -= moved;
392 conn->total_bytes -= moved;
393 }
394 else
395 nn_conn_reset(conn);
390 } 396 }
391 397
392 // Check for incoming data 398 // Check for incoming data
393 socktv.tv_sec = 0; 399 socktv.tv_sec = 0;
394 socktv.tv_usec = NN_DELAY_USEC; 400 socktv.tv_usec = NN_DELAY_USEC;