(trunk libT) possible fix for the `few peers' errors reported on OS X. denis_, merlyn3d, give this a spin...

This commit is contained in:
Charles Kerr 2009-01-19 13:55:41 +00:00
parent b484b77b90
commit 69f59b423a
2 changed files with 17 additions and 4 deletions

View File

@ -190,6 +190,8 @@ event_read_cb( int fd, short event UNUSED, void * vio )
assert( tr_isPeerIo( io ) );
io->hasFinishedConnecting = TRUE;
curlen = EVBUFFER_LENGTH( io->inbuf );
howmuch = curlen >= max ? 0 : max - curlen;
howmuch = tr_bandwidthClamp( &io->bandwidth, TR_DOWN, howmuch );
@ -270,6 +272,8 @@ event_write_cb( int fd, short event UNUSED, void * vio )
assert( tr_isPeerIo( io ) );
io->hasFinishedConnecting = TRUE;
dbgmsg( io, "libevent says this peer is ready to write" );
/* Write as much as possible, since the socket is non-blocking, write() will
@ -352,6 +356,7 @@ tr_peerIoNew( tr_session * session,
io->port = port;
io->socket = socket;
io->isIncoming = isIncoming != 0;
io->hasFinishedConnecting = FALSE;
io->timeCreated = time( NULL );
io->inbuf = evbuffer_new( );
io->outbuf = evbuffer_new( );
@ -821,10 +826,13 @@ tr_peerIoFlush( tr_peerIo * io, tr_direction dir, size_t limit )
assert( tr_isPeerIo( io ) );
assert( tr_isDirection( dir ) );
if( dir == TR_DOWN )
bytesUsed = tr_peerIoTryRead( io, limit );
else
bytesUsed = tr_peerIoTryWrite( io, limit );
if( io->hasFinishedConnecting )
{
if( dir == TR_DOWN )
bytesUsed = tr_peerIoTryRead( io, limit );
else
bytesUsed = tr_peerIoTryWrite( io, limit );
}
dbgmsg( io, "flushing peer-io, direction %d, limit %zu, bytesUsed %zd", (int)dir, limit, bytesUsed );
return bytesUsed;

View File

@ -64,6 +64,11 @@ typedef struct tr_peerIo
tr_bool extendedProtocolSupported;
tr_bool fastExtensionSupported;
/* we create the socket in a nonblocking way, so this flag is initially
* false and then set to true when libevent says that the socket is ready
* for reading or writing */
tr_bool hasFinishedConnecting;
int magicNumber;
uint8_t encryptionMode;