Changeset 7055 for trunk/libtransmission/peer-io.c
- Timestamp:
- Nov 6, 2008, 2:56:51 AM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/libtransmission/peer-io.c
r7042 r7055 30 30 #include "net.h" 31 31 #include "peer-io.h" 32 #include "ratecontrol.h"33 32 #include "trevent.h" 34 33 #include "utils.h" 35 34 36 35 #define IO_TIMEOUT_SECS 8 36 37 static size_t 38 addPacketOverhead( size_t d ) 39 { 40 /** 41 * http://sd.wareonearth.com/~phil/net/overhead/ 42 * 43 * TCP over Ethernet: 44 * Assuming no header compression (e.g. not PPP) 45 * Add 20 IPv4 header or 40 IPv6 header (no options) 46 * Add 20 TCP header 47 * Add 12 bytes optional TCP timestamps 48 * Max TCP Payload data rates over ethernet are thus: 49 * (1500-40)/(38+1500) = 94.9285 % IPv4, minimal headers 50 * (1500-52)/(38+1500) = 94.1482 % IPv4, TCP timestamps 51 * (1500-52)/(42+1500) = 93.9040 % 802.1q, IPv4, TCP timestamps 52 * (1500-60)/(38+1500) = 93.6281 % IPv6, minimal headers 53 * (1500-72)/(38+1500) = 92.8479 % IPv6, TCP timestamps 54 * (1500-72)/(42+1500) = 92.6070 % 802.1q, IPv6, ICP timestamps 55 */ 56 static const double assumed_payload_data_rate = 94.0; 57 58 return (size_t)( d * ( 100.0 / assumed_payload_data_rate ) ); 59 } 37 60 38 61 /** … … 83 106 84 107 struct tr_bandwidth bandwidth[2]; 85 tr_ratecontrol * speedometer[2];86 108 87 109 tr_crypto * crypto; … … 177 199 if( len < io->bufferSize[TR_UP] ) 178 200 { 179 const size_t n = io->bufferSize[TR_UP] - len; 201 const size_t payload = io->bufferSize[TR_UP] - len; 202 const size_t n = addPacketOverhead( payload ); 180 203 struct tr_bandwidth * b = &io->bandwidth[TR_UP]; 181 204 b->bytesLeft -= MIN( b->bytesLeft, (size_t)n ); 182 205 b->bytesUsed += n; 183 tr_rcTransferred( io->speedometer[TR_UP], n );184 206 dbgmsg( io, 185 207 "wrote %zu bytes to peer... upload bytesLeft is now %zu", … … 209 231 if( len > io->bufferSize[TR_DOWN] ) 210 232 { 211 const size_t n = len - io->bufferSize[TR_DOWN]; 233 const size_t payload = len - io->bufferSize[TR_DOWN]; 234 const size_t n = addPacketOverhead( payload ); 212 235 struct tr_bandwidth * b = io->bandwidth + TR_DOWN; 213 236 b->bytesLeft -= MIN( b->bytesLeft, (size_t)n ); 214 237 b->bytesUsed += n; 215 tr_rcTransferred( io->speedometer[TR_DOWN], n );216 238 dbgmsg( io, 217 239 "%zu new input bytes. bytesUsed is %zu, bytesLeft is %zu", … … 314 336 io->bandwidth[TR_UP].isUnlimited = 1; 315 337 io->bandwidth[TR_DOWN].isUnlimited = 1; 316 io->speedometer[TR_UP] = tr_rcInit( );317 io->speedometer[TR_DOWN] = tr_rcInit( );318 338 bufevNew( io ); 319 339 return io; … … 360 380 tr_peerIo * io = vio; 361 381 362 tr_rcClose( io->speedometer[TR_DOWN] );363 tr_rcClose( io->speedometer[TR_UP] );364 382 evbuffer_free( io->output ); 365 383 bufferevent_free( io->bufev ); … … 646 664 adjustInputBuffer( io ); 647 665 adjustOutputBuffer( io ); 648 }649 650 double651 tr_peerIoGetRateToClient( const tr_peerIo * io )652 {653 return tr_rcRate( io->speedometer[TR_DOWN] );654 }655 656 double657 tr_peerIoGetRateToPeer( const tr_peerIo * io )658 {659 return tr_rcRate( io->speedometer[TR_UP] );660 666 } 661 667
Note: See TracChangeset
for help on using the changeset viewer.