SSL 利用時に遅延が生じる問題について。
SSL の場合は、can_read の代わりに、pending でバッファにデータがあるかどうかを確かめるように変更。
POPFile/Module.pm の 530 行目と 531 行目を、
my $can_read; $self->log_( 2, "cr-check1" ); $can_read = ( ( $handle !~ /socket/i ) && ( $^O eq 'MSWin32' ) ); $self->log_( 2, "( \$handle !~ /socket/i ) && ( \$^O eq 'MSWin32' ) : " . ( $can_read ? "true" : "false" ) ); if ( !$can_read ) { if ( $handle =~ /ssl/i ) { # If using SSL, check internal buffer of OpenSSL first. $can_read = ( $handle->pending() > 0 ); $self->log_( 2, "( \$handle->pending() > 0 ) : " . ( $can_read ? "true" : "false" ) ); } if ( !$can_read ) { $can_read = defined( $slurp_data__{"$handle"}{select}->can_read( $self->global_config_( 'timeout' ) ) ); $self->log_( 2, "( defined( ... ) ) : " . ( $can_read ? "true" : "false" ) ); } } if ( $can_read ) {
と変更する(ログ記録ありの場合)。
本家のパッチセクションに [Patch for SSL delay] として登録したので、そちらを参照。今後の変更についてはこのパッチセクションで行う予定。
パッチは、ログ記録ありとログ記録なしの 2 種類があるので、必要に応じて好きな方を使う。ログ記録ありの場合は、次のようなログが記録される。
2004/9/27 00:17:30 1143: bayes: 531: cr-check1 2004/9/27 00:17:30 1143: bayes: 533: ( $handle !~ /socket/i ) && ( $^O eq 'MSWin32' ) : false 2004/9/27 00:17:30 1143: bayes: 537: ( $handle->pending() > 0 ) : true
あるいは、
2004/9/27 00:17:32 1143: bayes: 531: cr-check1 2004/9/27 00:17:32 1143: bayes: 533: ( $handle !~ /socket/i ) && ( $^O eq 'MSWin32' ) : false 2004/9/27 00:17:32 1143: bayes: 537: ( $handle->pending() > 0 ) : false 2004/9/27 00:17:32 1143: bayes: 541: ( defined( ... ) ) : true
というようなログが記録される。前者は、バッファにデータがあった場合で、後者はバッファにデータがなかった場合。
SSL を使用していない場合には、
2004/9/27 00:19:16 1145: bayes: 531: cr-check1 2004/9/27 00:19:16 1145: bayes: 533: ( $handle !~ /socket/i ) && ( $^O eq 'MSWin32' ) : false 2004/9/27 00:19:16 1145: bayes: 541: ( defined( ... ) ) : true
というようなログが記録される。