Pergunta

Eu tenho vários sistemas Linux incorporados que quero escrever um 'quem está online?' Serviço de rede em Ruby. Abaixo está parte relacionada do meu código:

mySocket = UDPSocket.new
mySocket.bind("<broadcast>", 50050)
loop do
    begin
        text, sender = mySocket.recvfrom(1024)
        puts text
        if text =~ /KNOCK KNOCK/ then   
            begin
                sock = UDPSocket.open
                sock.send(r.ipaddress, 0, sender[3], 50051)
                sock.close
            rescue
                retry
            end             
        end
    rescue Exception => inLoopEx
        puts inLoopEx.message
        puts inLoopEx.backtrace.inspect
        retry
    end
end

Eu envio o comando 'knock knock' de um PC. Agora, o problema é que, como todos recebem a mensagem ao mesmo tempo, eles tentam responder ao mesmo tempo, o que causa uma exceção de tubo quebrado (que é o motivo do meu código 'Réstima de resgate'). Esse código funciona bem às vezes, mas; Outras vezes, a parte de repetição do resgate do código (que é acionada pela exceção do tubo quebrado da Sock.send) faz com que um ou mais sistemas respondam após 5 segundos ou mais.

Existe uma maneira melhor de fazer isso, pois presumo que não consigo escapar da exceção do tubo quebrado?

Foi útil?

Solução

Descobri que a exceção foi causada pela parte 'R.ipaddress' no comando de envio, que está relacionado aos internos do meu sistema incorporado ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top