Różnice między wybraną wersją a wersją aktualną.
| Nowa wersja | Poprzednia wersja | ||
| 
                    sk2:multicast_example [2016/11/21 22:13] jkonczak utworzono  | 
                
                    sk2:multicast_example [2021/12/20 13:49] (aktualna) jkonczak  | 
            ||
|---|---|---|---|
| Linia 1: | Linia 1: | ||
| ==== Przykład użycia UDP multicast ==== | ==== Przykład użycia UDP multicast ==== | ||
| - | <code cpp multicast_example> | + | <code cpp multicast_example.cpp> | 
| + | #include <cstdlib> | ||
| #include <cstdio> | #include <cstdio> | ||
| #include <csignal> | #include <csignal> | ||
| Linia 25: | Linia 26: | ||
| *  - bind to some address and MCASTPORT | *  - bind to some address and MCASTPORT | ||
| *  - prepare ip_mreqn structure – fill it with MCASTIP and optionally (but recommended) with local IP and interface id | *  - prepare ip_mreqn structure – fill it with MCASTIP and optionally (but recommended) with local IP and interface id | ||
| - | *  - call setsockopt to set option IP_ADD_MEMBERSHIP of the domain IPPROTO_IP to the aforementioned structure | + | *  - call setsockopt to set option IP_ADD_MEMBERSHIP on level IPPROTO_IP to the aforementioned structure | 
| *  - receive datagrams | *  - receive datagrams | ||
| *  | *  | ||
| * setsockopt of IP_ADD_MEMBERSHIP sends an IGMP message "join group" and tells OS that the program waits for messages for the group. | * setsockopt of IP_ADD_MEMBERSHIP sends an IGMP message "join group" and tells OS that the program waits for messages for the group. | ||
| *  | *  | ||
| - | * More info at: http://www.tldp.org/HOWTO/text/Multicast-HOWTO | + | * More info at: https://tldp.org/HOWTO/Multicast-HOWTO-6.html | 
| */ | */ | ||
| Linia 54: | Linia 55: | ||
| // create socket | // create socket | ||
| int sockfd = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP); | int sockfd = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP); | ||
| - | if(sockfd==-1) error(1,errno, "sendto"); | + | if(sockfd==-1) error(1,errno, "socket"); | 
| // set SO_REUSEADDR (or only one app will be allowed to receive multicast messages from the groupIP:port pair) | // set SO_REUSEADDR (or only one app will be allowed to receive multicast messages from the groupIP:port pair) | ||
| Linia 115: | Linia 116: | ||
| // close socket AND interrupt all blocked recvfrom  | // close socket AND interrupt all blocked recvfrom  | ||
| shutdown(sockfd, SHUT_RDWR); | shutdown(sockfd, SHUT_RDWR); | ||
| + | close(sockfd); | ||
| // wait for child | // wait for child | ||
| readerThread.join(); | readerThread.join(); | ||