bool SocketDescriptor::CreateConnectUDP(const char *host, const char *port) { const int socktype = SOCK_DGRAM; SocketAddress address; if (!address.Lookup(host, port, socktype)) return false; return Create(address.GetFamily(), socktype, 0) && Connect(address); }
bool TCPClientPort::Connect(const char *host, unsigned port) { NarrowString<32> service; service.UnsafeFormat("%u", port); SocketAddress address; if (!address.Lookup(host, service, AF_INET)) return false; SocketDescriptor s; if (!s.CreateTCP()) return false; #ifdef HAVE_POSIX s.SetNonBlocking(); #endif if (s.Connect(address)) { #ifdef HAVE_POSIX s.SetBlocking(); #endif Set(std::move(s)); return true; } #ifdef HAVE_POSIX if (errno == EINPROGRESS) { connecting = std::move(s); io_thread->LockAdd(connecting.Get(), Poll::WRITE, *this); return true; } #endif return false; }
int main(int argc, char *argv[]) { Args args(argc, argv, "HOST KEY"); const char *host = args.ExpectNext(); const char *key = args.ExpectNext(); SocketAddress address; if (!address.Lookup(host, "5597", SOCK_DGRAM)) { fprintf(stderr, "Failed to look up: %s\n", host); return EXIT_FAILURE; } #ifdef HAVE_SKYLINES_TRACKING_HANDLER InitialiseIOThread(); #endif SkyLinesTracking::Client client; #ifdef HAVE_SKYLINES_TRACKING_HANDLER client.SetIOThread(io_thread); Handler handler; client.SetHandler(&handler); #endif client.SetKey(ParseUint64(key, NULL, 16)); if (!client.Open(address)) { fprintf(stderr, "Failed to create client\n"); return EXIT_FAILURE; } if (args.IsEmpty() || StringIsEqual(args.PeekNext(), "fix")) { NMEAInfo basic; basic.Reset(); basic.UpdateClock(); basic.time = fixed(1); basic.time_available.Update(basic.clock); return client.SendFix(basic) ? EXIT_SUCCESS : EXIT_FAILURE; } else if (StringIsEqual(args.PeekNext(), "ping")) { client.SendPing(1); #ifdef HAVE_SKYLINES_TRACKING_HANDLER handler.Wait(); #endif } else if (StringIsEqual(args.PeekNext(), "traffic")) { client.SendTrafficRequest(true, true); #ifdef HAVE_SKYLINES_TRACKING_HANDLER handler.Wait(); #endif } else { DebugReplay *replay = CreateDebugReplay(args); if (replay == NULL) return EXIT_FAILURE; while (replay->Next()) { client.SendFix(replay->Basic()); usleep(100000); } } #ifdef HAVE_SKYLINES_TRACKING_HANDLER client.Close(); DeinitialiseIOThread(); #endif return EXIT_SUCCESS; }