I ran into the same issue, and worked around the problem.
Some background:
I self-built 4.23.1 to test out the linux pixel streaming. Since 4.23.1 is the only version that supports linux pixel streaming now, I can’t upgrade to the latest version.
I purchased a finished game level from Epic’s marketplace, but after a few modifications, I saw the same error when trying to rebuild lighting.
I googled, the top answer is enabling multicast for the loopback network interface. Others suggested disabling the ufw firewall.
Looking at the message, it seems to be a communication issue between the swarm server / or the lightmass process. (I’m very new to unreal, so not sure if I’m interpreting it correctly).
Later I learned that Unreal doesn’t support swarm, which is a rendering server, on linux. Instead, we need to use the local version of swarm, which should be transparent to user.
Since all internet solutions didn’t work, I debugged the C++ code, here is the problematic part:
int32 FSwarmInterfaceLocalImpl::SendMessage( const FMessage& Message )
{
#if USE_LOCAL_SWARM_INTERFACE
...
while (bIsConnected && !Recepient.IsValid())
{
MessageEndpoint->Publish(new FSwarmPingMessage(), EMessageScope::Network);
...
if (TimeWaitingSec >= kMaxTimeToWaitSec)
{
UE_LOG(LogInit, Error, TEXT("Timed out waiting for the recipient (TimeWaitingSec = %f)"), TimeWaitingSec);
return -1;
}
}
...
Basically the code tries to issue a ping message to another process and expect a pong message, as a way to verify an interprocess communication.
But it times out. I then found the pong message handler:
void FSwarmInterfaceLocalImpl::HandlePongMessage( const FSwarmPongMessage& Message, const TSharedRef<IMessageContext, ESPMode::ThreadSafe>& Context )
{
if (!Recepient.IsValid() && Message.bIsEditor != bIsEditor && Message.ComputerName == FPlatformProcess::ComputerName())
{
Recepient = Context->GetSender();
}
}
This handler is called as soon as the ping message is sent. This means that the communication is good. However, the if condition fails and results in the timeout.
The failed condition is actually “Message.bIsEditor != bIsEditor” , this seems to be a condition to verify that the message is indeed heard from another process, not a loopback message.
Somehow, both Message.bIsEditor and bIsEditor are zeros. With some further debugging, I feel that bIsEditor is correct. But Message.bIsEditor is wrong.
But anyway, I hacked it to Message.bIsEditor == bIsEditor, my lightmaps seem to build now. But it has been 8 hours and not finished. Who knows if I will see new problems.