The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.


POE::Component::Client::NTP - A POE Component to query NTP servers


version 0.14


  use strict;
  use warnings;
  use POE qw(Component::Client::NTP);
  use Data::Dumper;

  my $host = shift or die "Please specify a host name to query\n";

    package_states => [
            main => [qw(_start _response)],

  exit 0;

  sub _start {
       host => $host,
       event => '_response',

  sub _response {
    my $packet = $_[ARG0];
    print Dumper( $packet );


POE::Component::Client::NTP is a POE component that provides Network Time Protocol (NTP) client services to other POE sessions and components.

NTP is a protocol for synchronising the clocks of computer systems over data networks and is described in RFC 1305 and RFC 2030.

The code in this module is derived from Net::NTP by James G. Willmore



Takes a number of options, only those marked as mandatory are required:

  'event', the event to emit when completed, mandatory;
  'session', provide an alternative session to send the resultant event to;
  'host', the name/address of the NTP server to query, default is 'localhost';
  'port', the UDP port to send the query to, default is 123;
  'timeout', the number of seconds to wait for a response, default is 60 seconds;
  'context', any reference data you wish to receive in the response event;

The session parameter is only required if you wish the output event to go to a different session than the calling session, or if you have spawned the poco outside of a session.


This is generated by the poco. ARG0 will be a hash reference with the following keys:

  'response', this will be a HASHREF on success;
  'host', the host string that was passed to the constructor;
  'error', on failure this will be defined, with an error string;
  'context', whatever was passed to the constructor;

The response hashref will contain various parts of the NTP response packet as outlined in RFC1305. Like Net::NTP some of the data will be normalised/humanised, such as timestamps are in epoch, NOT hexadecimal.

Hexadecimal timestamps are available for Reference, Originate and Transmit as hex_ref_time, hex_org_time and hex_trans_time, respectively.

An example:

   'Version Number' => 3,
   'Mode' => 4,
   'Stratum' => 3,
   'Poll Interval' => '3.0000',
   'Reference Clock Identifier' => ''
   'Precision' => -21,
   'Root Delay' => '0.0540924072265625',
   'Delay' => '0.01513',
   'Leap Indicator' => 0,
   'Root Dispersion' => '0.0000',
   'Originate Timestamp' => '1423758184.59018',
   'Transmit Timestamp' => '1423758184.17864',
   'Receive Timestamp' => '1423758184.17854',
   'Reference Timestamp' => '1423757055.50512',
   'Offset' => '-0.00148022174835205',
   'hex_org_time' => 'd88751e8.232d70e5',
   'hex_trans_time' => 'd88751e8.aa5e272',
   'hex_ref_time' => 'd8874d7f.1e1b7956',





  • Chris Williams <>

  • James G. Willmore

  • Ask Bjørn Hansen


This software is copyright (c) 2015 by Chris Williams and James G. Willmore and Ask Bjørn Hansen.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.