Changeset 4699
- Timestamp:
- 03/19/10 13:48:18 (3 years ago)
- Files:
-
- 1 modified
-
vic/branches/mpeg4/net/net-ip.cpp (modified) (13 diffs)
Legend:
- Unmodified
- Added
- Removed
-
vic/branches/mpeg4/net/net-ip.cpp
r4681 r4699 97 97 class IPNetwork : public Network { 98 98 public: 99 IPNetwork() : Network(*(new IPAddress), *(new IPAddress), *(new IPAddress)), local_preset (0) {;}99 IPNetwork() : Network(*(new IPAddress), *(new IPAddress), *(new IPAddress)), local_preset_(0) {;} 100 100 virtual int command(int argc, const char*const* argv); 101 101 virtual void reset(); … … 112 112 } 113 113 protected: 114 struct sockaddr_in sin; 114 struct sockaddr_in sin_;//Sockaddr setup in ssock, used by sendto in dosend 115 time_t last_reset_; 116 int local_preset_;// Indicates if local_ has been set on cmd line 117 115 118 virtual int dorecv(u_char* buf, int len, Address &from, int fd); 116 119 int open(const char * host, int port, int ttl); 117 120 int close(); 118 121 int localname(sockaddr_in*); 119 int local_preset; // Indicates if local_ has been set on cmd line120 122 int openssock(Address & addr, u_short port, int ttl); 121 123 int disconnect_sock(int fd); 122 124 int openrsock(Address & g_addr, Address & s_addr_ssm, u_short port, Address & local); 123 125 void dosend(u_char* buf, int len, int fd); 124 time_t last_reset_;125 126 }; 126 127 … … 211 212 if (strlen(tcl.attr("ifAddr"))>1) { 212 213 (IPAddress&)local_ = tcl.attr("ifAddr"); 213 local_preset =1;214 local_preset_=1; 214 215 } 215 216 if (open(argv[2], port, ttl) < 0) … … 298 299 299 300 // Use Local interface name if already set via command line 300 if (local_preset ) {301 if (local_preset_) { 301 302 p->sin_addr.s_addr=(IPAddress&)local_; 302 303 debug_msg("Setting localname from cmd line:%s\n",(const char*)local_); … … 336 337 { 337 338 int fd; 339 struct sockaddr_in sin; 338 340 339 341 u_int32_t g_addri = (IPAddress&)g_addr; … … 383 385 sin.sin_addr.s_addr = INADDR_ANY; 384 386 if (bind(fd, (struct sockaddr*)&sin, sizeof(sin)) < 0) { 387 debug_msg("Error binding Recv mcast socket\n"); 385 388 perror("bind"); 386 389 exit(1); … … 423 426 424 427 mr.imr_multiaddr.s_addr = g_addri; 425 if (local_preset ) {428 if (local_preset_) { 426 429 mr.imr_interface.s_addr = locali; 427 430 if (setsockopt(fd, IPPROTO_IP,IP_ADD_MEMBERSHIP, … … 450 453 sin.sin_addr.s_addr = locali; 451 454 if (bind(fd, (struct sockaddr *)&sin, sizeof(sin)) < 0) { 455 debug_msg("Error binding Recv ucast socket\n"); 452 456 perror("bind"); 453 ::close(fd);454 return (-1);457 ::close(fd); 458 return (-1); 455 459 } 456 460 /* … … 517 521 #endif 518 522 519 memset((char *)&sin, 0, sizeof(sin)); 520 sin.sin_family = AF_INET; 521 sin.sin_port = port; 522 sin.sin_addr.s_addr = INADDR_ANY; 523 if (bind(fd, (struct sockaddr *)&sin, sizeof(sin)) < 0) { 524 sin.sin_port = 0; 525 if (bind(fd, (struct sockaddr *)&sin, sizeof(sin)) < 0) { 523 memset((char *)&sin_, 0, sizeof(sin_)); 524 sin_.sin_family = AF_INET; 525 sin_.sin_port = port; 526 sin_.sin_addr.s_addr = INADDR_ANY; 527 if (bind(fd, (struct sockaddr *)&sin_, sizeof(sin_)) < 0) { 528 sin_.sin_port = 0; 529 if (bind(fd, (struct sockaddr *)&sin_, sizeof(sin_)) < 0) { 530 debug_msg("Error binding send socket\n"); 526 531 perror("bind"); 527 532 exit(1); … … 529 534 } 530 535 531 memset((char *)&sin , 0, sizeof(sin));532 sin .sin_family = AF_INET;533 sin .sin_port = port;534 sin .sin_addr.s_addr = addri;535 536 /* Connect() is useful for localname() call to find the iface addr being used537 * Because of a problem with OSX we disconnect this socket once localname() has 538 * found out the ip address of the interface */539 if (connect(fd, (struct sockaddr *)&sin , sizeof(sin)) < 0) {536 memset((char *)&sin_, 0, sizeof(sin_)); 537 sin_.sin_family = AF_INET; 538 sin_.sin_port = port; 539 sin_.sin_addr.s_addr = addri; 540 541 /* Connect() is useful for localname() to find the interface addr 542 * being used. Also because of a problem with OSX we disconnect this 543 * socket once localname() has found out the ip addr of the iface */ 544 if (connect(fd, (struct sockaddr *)&sin_, sizeof(sin_)) < 0) { 540 545 perror("connect"); 541 546 exit(1); … … 573 578 * is specified on command line 574 579 */ 575 if (local_preset ) {580 if (local_preset_) { 576 581 u_int32_t locali = (IPAddress&)local_; 577 582 if (setsockopt(fd, IPPROTO_IP, IP_MULTICAST_IF, … … 604 609 int IPNetwork::disconnect_sock(int fd) 605 610 { 611 struct sockaddr_in sin; 612 606 613 memset((char *)&sin, 0, sizeof(sin)); 607 614 sin.sin_family = AF_UNSPEC; … … 635 642 void IPNetwork::dosend(u_char* buf, int len, int fd) 636 643 { 637 int cc = ::sendto(fd, (char*)buf, len, 0, (struct sockaddr *)&sin , sizeof(sin));644 int cc = ::sendto(fd, (char*)buf, len, 0, (struct sockaddr *)&sin_, sizeof(sin_)); 638 645 if (cc < 0) { 639 646 switch (errno) {
