void TcpClient::connect(const IpAddress& address, NetPort port, const Duration& timeout, const Duration& pause) { Expect(address.isValid(), Throw(InvalidParameter, "Invalid IpAddress")); Expect(port != NetPort_Any, Throw(InvalidParameter, "Invalid NetPort")); int ret; Clock clock; Socket::create(address.getProtocol()); prv::SockAddrBuffer buffer(address, port); clock.start(); do { ret = ::connect(getHandler(), buffer.getSockAddr(), buffer.getLength()); if(ret != 0) { std::this_thread::sleep_for(std::chrono::milliseconds(static_cast<long long>(pause.asMilliseconds()))); } }while(ret != 0 && clock.getElapsedTime() < timeout); Expect(ret == 0, Throw(InternalError, "Failed to connect to the remote host")); }
void TcpClient::connect(const IpAddress& address, NetPort port) { Expect(address.isValid(), Throw(InvalidParameter, "Invalid IpAddress")); Expect(port != NetPort_Any, Throw(InvalidParameter, "Invalid NetPort")); Socket::create(address.getProtocol()); prv::SockAddrBuffer buffer(address, port); int ret = ::connect(getHandler(), buffer.getSockAddr(), buffer.getLength()); Expect(ret == 0, Throw(InternalError, "Failed to connect to the remote host")); }
MacAddress MacAddress::lookup_from_ip_with_arp_table(const IpAddress& ipAddress, bool ping) { if(!ipAddress.isValid()) { return MacAddress(); } char line[500]; char ip_address[500]; int hw_type; int flags; char mac_address[500]; char mask[500]; char device[500]; MacAddress foundMac; if (ping) { ipAddress.ping(1000); } // ARP Table Reading Suggestion From // http://stackoverflow.com/a/21031888 FILE *fp = fopen("/proc/net/arp", "r"); fgets(line, sizeof(line), fp); // Skip the first line (column headers). while(fgets(line, sizeof(line), fp)) { sscanf(line, "%s 0x%x 0x%x %s %s %s\n", ip_address, &hw_type, &flags, mac_address, mask, device); if (ipAddress.toString().compare(ip_address) == 0) { foundMac = MacAddress(mac_address); break; } } fclose(fp); return foundMac; }