AES is marvelous.
Firefox keep polling notification (or something similar). The size of packages is fixed, which may be a obvious feature. The same thing happens for any network communication, like, for example socks.
There is something wrong with Bilibili's DNS configuration. Sometimes the answer of Bilibili DNS exceeds the maximum size of DNS package. And Bilibili seems not to support DNS over TCP, making things even worse.
getaddrinfo of socket
The biggest problem is not on Bilibili, but on this system function.
getaddrinfo is always synchronic, and blocking, even if non-blocking is set or
timeout = 0.0. It will return only if it receives a DNS answer, or timeout after 30 seconds, which is disastrous for async programming (especially for event-driven programming).