#3336·brpc

为什么在receiver卡死的情况下,导致sender也卡死?一直卡在BRPC_HANDLE_EOVERCROWDED这个宏中。

作者: chinaux创建于 2026年6月9日更新于 2026年8月9日

// Sleep a while when `write_expr' returns negative with errno=EOVERCROWDED // Implemented as a macro rather than a field of Socket.WriteOptions because // the macro works for other functions besides Socket.Write as well. #define BRPC_HANDLE_EOVERCROWDED(write_expr)
({
int64_t ret_code;
int sleep_time = 250;
while (true) {
ret_code = (write_expr);
if (ret_code >= 0 || errno != ::brpc::EOVERCROWDED) {
break;
}
sleep_time *= 2;
if (sleep_time > 2000) { sleep_time = 2000; }
::bthread_usleep(sleep_time);
}
ret_code;
}) I see there is also BRPC_HANDLE_EOVERCROWDED_N, can you tell me why it is not used with _N?