| 1076 | } |
| 1077 | |
| 1078 | int Socket::ReleaseReferenceIfIdle(int idle_seconds) { |
| 1079 | const int64_t last_active_us = last_active_time_us(); |
| 1080 | if (butil::cpuwide_time_us() - last_active_us <= idle_seconds * 1000000L) { |
| 1081 | return 0; |
| 1082 | } |
| 1083 | LOG_IF(WARNING, FLAGS_log_idle_connection_close) |
| 1084 | << "Close " << *this << " due to no data transmission for " |
| 1085 | << idle_seconds << " seconds"; |
| 1086 | if (shall_fail_me_at_server_stop()) { |
| 1087 | // sockets for streaming purposes (say RTMP) are probably referenced |
| 1088 | // by many places, ReleaseAdditionalReference() cannot notify other |
| 1089 | // places to release refs, SetFailed() is a must. |
| 1090 | return SetFailed(EUNUSED, "No data transmission for %d seconds", |
| 1091 | idle_seconds); |
| 1092 | } |
| 1093 | return ReleaseAdditionalReference(); |
| 1094 | } |
| 1095 | |
| 1096 | |
| 1097 | int Socket::SetFailed() { |
no test coverage detected