@@ -3138,68 +3138,50 @@ def _drain_server_buffers(
3138
3138
) -> None :
3139
3139
"""Reads from server SSL and raw sockets to drain any pending data."""
3140
3140
logger .debug ("--- Phase 2: Draining server buffers ---" )
3141
- total_read = 0
3142
- read_chunks = []
3141
+ total_ssl_read = 0
3142
+ consecutive_empty_ssl_reads = 0
3143
3143
3144
- try :
3145
- # First, try to read any SSL data that might be available
3144
+ while total_ssl_read < 1024 * 1024 :
3146
3145
try :
3147
- server .recv (65536 )
3148
- except (
3149
- SSL .WantReadError ,
3150
- SSL .Error ,
3151
- ) as ssl_error : # pragma: no cover
3146
+ data = server .recv (65536 )
3147
+ if not data : # Peer closed or empty read for some reason
3148
+ logger .debug (
3149
+ "SSL peer closed or empty data, stopping SSL drain."
3150
+ )
3151
+ break
3152
+ total_ssl_read += len (data )
3152
3153
logger .debug (
3153
- f"No SSL data available or SSL error: { ssl_error } "
3154
+ f"Read { len (data )} bytes of SSL application data "
3155
+ f"(total: { total_ssl_read } )."
3154
3156
)
3157
+ # Reset counter on successful read
3158
+ consecutive_empty_ssl_reads = 0
3155
3159
3156
- # Now read raw data from the underlying server socket to
3157
- # drain buffer
3158
- server_socket .setblocking (False ) # Ensure non-blocking
3159
- consecutive_empty_reads = 0
3160
-
3161
- while (
3162
- total_read < 1024 * 1024
3163
- ): # Read up to 1MB or until no more data
3164
- try :
3165
- data = server_socket .recv (65536 )
3166
- read_chunks .append (data )
3167
- total_read += len (data )
3160
+ except SSL .WantReadError :
3161
+ consecutive_empty_ssl_reads += 1
3162
+ if consecutive_empty_ssl_reads >= 10 :
3168
3163
logger .debug (
3169
- f"Read { len ( data ) } bytes of data from "
3170
- f"server socket (total: { total_read } ) ."
3164
+ "No more SSL application data available after "
3165
+ f"{ consecutive_empty_ssl_reads } retries ."
3171
3166
)
3172
- time .sleep (0.01 ) # Small delay between reads
3167
+ break
3168
+ logger .debug (
3169
+ "No SSL data available, waiting... "
3170
+ f"(attempt { consecutive_empty_ssl_reads } )."
3171
+ )
3172
+ time .sleep (0.01 ) # Small delay for non-blocking SSL reads
3173
3173
3174
- except OSError as e :
3175
- if e .errno == EWOULDBLOCK :
3176
- consecutive_empty_reads += 1
3177
- if consecutive_empty_reads >= 10 :
3178
- logger .debug (
3179
- "No more data available from server socket "
3180
- f"after { consecutive_empty_reads } retries."
3181
- )
3182
- break
3183
- logger .debug (
3184
- "No data available, waiting... "
3185
- f"(attempt { consecutive_empty_reads } )."
3186
- )
3187
- time .sleep (0.1 ) # Wait longer when buffer is empty
3188
- continue
3189
- else : # pragma: no cover
3190
- logger .error (
3191
- f"OSError while reading from server socket: { e } "
3192
- )
3193
- break
3174
+ except SSL .Error as ssl_error :
3175
+ logger .debug (f"SSL error during drain: { ssl_error } " )
3176
+ break # Stop on SSL protocol errors
3177
+ except Exception as e : # Catch other potential errors
3178
+ logger .error (f"Unexpected error during SSL drain: { e } " )
3179
+ break
3194
3180
3195
- logger .debug (
3196
- f"Finished reading from server. Bytes read: { total_read } . "
3197
- )
3198
- # Allow network buffers to settle
3199
- time .sleep (0.1 )
3181
+ logger .debug (f"Finished draining SSL. Bytes read: { total_ssl_read } ." )
3200
3182
3201
- except Exception as read_exception : # pragma: no cover
3202
- logger . error ( f"Exception reading from server: { read_exception } " )
3183
+ # Allow network buffers to settle
3184
+ time . sleep ( 0.1 )
3203
3185
3204
3186
def _perform_moving_buffer_test (
3205
3187
self , client : Connection , buffer_size : int , want_bad_retry : bool
0 commit comments