非阻塞socket通信一定要心跳包吗?

非阻塞socket中,都会有循环recv()的操作,可以通过该函数返回值判断是否掉线,为什么一定要有心跳包呢?

心跳包主要还是用在维持长连接,检测掉线只是反推的功能