Vai al contenuto


Foto

Multicast


Questa discussione e' stata archiviata Questo significa che non e' possibile rispondere
65 risposte a questa discussione

#1 trallallero

trallallero

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 16.188 Messaggi:

Inviato 22 giugno 2011 - 08:02

C'è qualche esperto di multicast qui ?
Don't worry, faith will come soon, like a recall but,
if you can't wait, just stop thinking at all 

 


#2 LilithSChild

LilithSChild

    Schiavo

  • Donatori di sperma
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 12.764 Messaggi:

Inviato 22 giugno 2011 - 08:38

Mh credo di no.... :patpat:

#3 trallallero

trallallero

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 16.188 Messaggi:

Inviato 22 giugno 2011 - 08:40

Sto smadonnando!!! :patpat:
Don't worry, faith will come soon, like a recall but,
if you can't wait, just stop thinking at all 

 


#4 trallallero

trallallero

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 16.188 Messaggi:

Inviato 22 giugno 2011 - 09:01

Spiego il problema perché forse mi basta qualcuno esperto in sockets per risolverlo.

Se apro 2 applicazioni su 2 PC sulla porta 4000 che comunicano su 225.0.0.1, tutto funziona a meraviglia.
Se provo a fare un JoinMulticastGroup 225.0.0.2 porta 5000 non va niente perché, pare, se apri le applicazioni sulla porta 4000, quella puoi usare e basta.

Siccome ci servono più applicazioni sullo stesso PC, mi tocca aprirle tutte sulla porta 4000 e non ci riesco perché la porta, una volta aperta la prima applicazione, è busy.

Quindi: come cacchio faccio ad aprire più applicazioni che usano la stessa porta ?
ho già provato la socket option SO_REUSEADDRESS ma nada.
Don't worry, faith will come soon, like a recall but,
if you can't wait, just stop thinking at all 

 


#5 MadJackal

MadJackal

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStelletta
  • 3.105 Messaggi:

Inviato 22 giugno 2011 - 09:10

AFAIK non puoi, a meno di non usare un qualche "middleware" tra le tue applicazioni e la porta in questione (ed avere un modo per "distinguere" cosa va ad una e cosa all'altra). La bind() è il punto chiave della questione, se la usi (e DEVI), non puoi più usare la porta con un'altra applicazione.

SO_REUSEADDR e SO_REUSEPORT non fanno quello che ti aspetti.

Edito per chiarezza:
1. SO_REUSEPORT non c'è sotto linux, solo sotto *BSD, quindi non so se ti interessa.
2. SO_REUSEADDR ti permette di bindarti() ad un indirizzo/porta già bindato, SE questo è in TIME_WAIT. Se è in altro stato ti viene restituito un errore. Non c'è nulla di "contemporaneo", IIRC la vecchia applicazione che era in bind() sul socket viene "sbindata".
In Soviet Italy, the evil army owns you!

#6 trallallero

trallallero

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 16.188 Messaggi:

Inviato 22 giugno 2011 - 09:23

AFAIK non puoi, a meno di non usare un qualche "middleware" tra le tue applicazioni e la porta in questione (ed avere un modo per "distinguere" cosa va ad una e cosa all'altra). La bind() è il punto chiave della questione, se la usi (e DEVI), non puoi più usare la porta con un'altra applicazione.

SO_REUSEADDR e SO_REUSEPORT non fanno quello che ti aspetti.

:poker:


Grazie.

Ma quello che non capisco è perché non posso fare un join multicast address su una porta diversa. Cioè, posso usare UNA sola porta ???
Don't worry, faith will come soon, like a recall but,
if you can't wait, just stop thinking at all 

 


#7 trallallero

trallallero

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 16.188 Messaggi:

Inviato 22 giugno 2011 - 09:31

Eppure qui http://www.boost.org... ... ceiver.cpp vedo:

socket_.set_option(boost::asio::ip::udp::socket::reuse_address(true));


Don't worry, faith will come soon, like a recall but,
if you can't wait, just stop thinking at all 

 


#8 MadJackal

MadJackal

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStelletta
  • 3.105 Messaggi:

Inviato 22 giugno 2011 - 09:41

Ma quello che non capisco è perché non posso fare un join multicast address su una porta diversa. Cioè, posso usare UNA sola porta ???


Mi pare che anche il multicast (UDP) necessiti di una dest port, o sbaglio? :asd:
Non prendermi sul serio, dovrei recuperare il manuale di reti e darci un occhio, ma ora sono in ufficio :poker:
In Soviet Italy, the evil army owns you!

#9 trallallero

trallallero

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 16.188 Messaggi:

Inviato 22 giugno 2011 - 09:47

[quote name="MadJackal ?":2e9gxauk] [quote name='"trallallero ?":2e9gxauk]Ma quello che non capisco è perché non posso fare un join multicast address su una porta diversa. Cioè' date=' posso usare UNA sola porta ???[/quote']

Mi pare che anche il multicast (UDP) necessiti di una dest port, o sbaglio? :v
Non prendermi sul serio, dovrei recuperare il manuale di reti e darci un occhio, ma ora sono in ufficio :poker:[/quote]
Allora, ho compilato il boost sender
http://www.boost.org... ... sender.cpp
e il boost receiver
http://www.boost.org... ... ceiver.cpp

Poi ho lanciato 2 clients e un server e funziona tutto like a charm!

Ora mi preparo ad entrare nel code dei boost guys, se non mi vedete nelle prossime 4-5 ore, venitemi cercare in qualche header file :asd:
Don't worry, faith will come soon, like a recall but,
if you can't wait, just stop thinking at all 

 


#10 trallallero

trallallero

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 16.188 Messaggi:

Inviato 22 giugno 2011 - 09:48

Quello che ho notato è che solo i clients fanno la bind, non il sender.
Don't worry, faith will come soon, like a recall but,
if you can't wait, just stop thinking at all 

 


#11 MadJackal

MadJackal

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStelletta
  • 3.105 Messaggi:

Inviato 22 giugno 2011 - 09:52

Eppure qui http://www.boost.org... ... ceiver.cpp vedo:

socket_.set_option(boost::asio::ip::udp::socket::reuse_address(true));


Perchè non sono un esperto di multicast. Mi dicono dalla scrivania dietro la mia che in multicast il kernel dovrebbe consegnare il messaggio a tutti i processi in ascolto. Però devi mettere il setsockopt() con il SO_REUSEADDR prima della bind().

Se non ti funziona è perchè ricordo bene e SO_REUSADDR sotto linux è broken.
In Soviet Italy, the evil army owns you!

#12 trallallero

trallallero

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 16.188 Messaggi:

Inviato 22 giugno 2011 - 09:55

Ieri ho visto che SO_REUSEPORT è deprecated su Linux, non SO_REUSEADDR.

Però vedo che i boost guys usano anche SO_BROADCAST.
Don't worry, faith will come soon, like a recall but,
if you can't wait, just stop thinking at all 

 


#13 MadJackal

MadJackal

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStelletta
  • 3.105 Messaggi:

Inviato 22 giugno 2011 - 10:02

Ieri ho visto che SO_REUSEPORT è deprecated su Linux, non SO_REUSEADDR.


MI confondo sempre tra *BSD e linux, troppo abituato ad usare il primo.
Quelli di Linux hanno deprecato SO_REUSEPORT perchè era solo un modo di girare intorno ad alcune limitazioni di SO_REUSEADDR, che ora sotto linux non ci sono più.
In Soviet Italy, the evil army owns you!

#14 trallallero

trallallero

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 16.188 Messaggi:

Inviato 22 giugno 2011 - 10:04

[quote name="MadJackal ?":16xz6wwe] [quote name='"trallallero ?":16xz6wwe] Ieri ho visto che SO_REUSEPORT è deprecated su Linux' date=' non SO_REUSEADDR.[/quote']

MI confondo sempre tra *BSD e linux, troppo abituato ad usare il primo.
Quelli di Linux hanno deprecato SO_REUSEPORT perchè era solo un modo di girare intorno ad alcune limitazioni di SO_REUSEADDR, che ora sotto linux non ci sono più.[/quote]
Ah ecco.

Comunque non ne vengo fuori... devo solo controllare questa manciata di files :poker:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include
Don't worry, faith will come soon, like a recall but,
if you can't wait, just stop thinking at all 

 


#15 MadJackal

MadJackal

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStelletta
  • 3.105 Messaggi:

Inviato 22 giugno 2011 - 10:04

Prova ad usare SO_REUSEADDR e SO_BROADCAST.
Già fatto sto test?
In Soviet Italy, the evil army owns you!

#16 trallallero

trallallero

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 16.188 Messaggi:

Inviato 22 giugno 2011 - 10:13

Prova ad usare SO_REUSEADDR e SO_BROADCAST.
Già fatto sto test?

No, ma mi sa che mi sono confuso su sto SO_BROADCAST, non so se veramente lo usano sti stronzi.

In pratica devo capire cosa fanno qui:

boost::asio::ip::udp::endpoint listen_endpoint(listen_address, multicast_port);

socket_.open(listen_endpoint.protocol());

socket_.set_option(boost::asio::ip::udp::socket::reuse_address(true));

socket_.bind(listen_endpoint);



// Join the multicast group.

socket_.set_option(boost::asio::ip::multicast::join_group(multicast_address));




Don't worry, faith will come soon, like a recall but,
if you can't wait, just stop thinking at all 

 


#17 MadJackal

MadJackal

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStelletta
  • 3.105 Messaggi:

Inviato 22 giugno 2011 - 10:39

http://linux.die.net/man/7/ip

Datagrams to broadcast addresses can be only sent or received when the SO_BROADCAST socket flag is set. In the current implementation connection oriented sockets are only allowed to use unicast addresses.


A me sa proprio che lo usano, almeno stando a man 7 ip :poker:
In Soviet Italy, the evil army owns you!

#18 trallallero

trallallero

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 16.188 Messaggi:

Inviato 22 giugno 2011 - 10:45

http://linux.die.net/man/7/ip

Datagrams to broadcast addresses can be only sent or received when the SO_BROADCAST socket flag is set. In the current implementation connection oriented sockets are only allowed to use unicast addresses.


A me sa proprio che lo usano, almeno stando a man 7 ip :asd:

Si ma broadcast <> multicast.


Comunque ora ci si mette anche Abbraccianigga OS, diolinux :poker:

./jackd -d alsa -r48000 -p1024 -S -n3
the playback device "hw:0" is already in use. Please stop the application using it and run JACK again


NON C'È NIENTE CHE USA LA hw:0! HO KILLATO TUTTO :v
Don't worry, faith will come soon, like a recall but,
if you can't wait, just stop thinking at all 

 


#19 trallallero

trallallero

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 16.188 Messaggi:

Inviato 22 giugno 2011 - 10:47

Era virtual box :poker:
Don't worry, faith will come soon, like a recall but,
if you can't wait, just stop thinking at all 

 


#20 MadJackal

MadJackal

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStelletta
  • 3.105 Messaggi:

Inviato 22 giugno 2011 - 10:56

Si ma broadcast <> multicast.


My fault, sto fondendo a causa di file system che esplodono e alert che suonano come battone. :poker:
E quelle puttane degli sviluppatori chiedono pure i log! :asd:
In Soviet Italy, the evil army owns you!