Mercurial > hg > nnchat
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; |