KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I'm trying to get udp multicast data using sockets and c++ (c). I have a server with 2 network cards so I need to bind socket to specific interface. Currently I'm testing on another server that has only one network card. When I use INADDR_ANY I can see the udp data, when I bind to specific interface I don't see any data. Function inet_addr is not failing (I removed checking for return value for now). Code is below. On a server with one network card, my IP address is 10.81.128.44. I receive data when I run as: ./client 225.0.0.37 12346 This gives me no data: ./client 225.0.0.37 12346 10.81.128.44 Any suggestions? (Hope the code compiles, I removed comments ...) #include <stdlib.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <time.h> #include <string.h> #include <stdio.h> #include <iostream> #include <string> using namespace std; #define HELLO_PORT 12345 #define HELLO_GROUP "225.0.0.37" #define MSGBUFSIZE 256 int main(int argc, char *argv[]) { string source_iface; string group(HELLO_GROUP); int port(HELLO_PORT); if (!(argc < 2)) group = argv[1]; if (!(argc < 3)) port = atoi(argv[2]); if (!(argc < 4)) source_iface = argv[3]; cout << "group: " << group << " port: " << port << " source_iface: " << source_iface << endl; int fd; if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { perror("socket"); exit(1); } u_int yes = 1; if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(yes)) < 0) { perror("Reusing ADDR failed"); exit(1); } struct sockaddr_in addr; memset(&addr, 0, sizeof(addr));
Tags (comma-separated)
Save Edits
Cancel