> At this point I'm mainly interested in feedback about the API, if it
looks sane and future proof.

The example code provided gives users a great start. I'm wondering if some
of the example code could be pulled into the library itself? My guess is
that many people who use the library will basically copy/paste portions
into their own code.

What do you think of something like the following:

int main() {
  chrony_session *csess;
  chrony_socket *csock = chrony_socket_open();

  int r = chrony_session_init(&csess, csock);

  if(r == CHRONY_OK) {
    print_all_reports(csess);
    chrony_session_deinit(csess);
  }
  else {
    chrony_error(r);
  }

  chrony_socket_close(&csock);

  return r;
}

The following line would try both UNIX and INET sockets automatically using
the default path:

  chrony_socket *csock = chrony_socket_open();

Under the hood, perhaps chrony_socket_open makes use of:

  chrony_socket_open_unix();
  chrony_socket_open_inet();

This also allows for:

  chrony_socket *csock = chrony_socket_open("/var/run/chrony/custom.sock");

It would mean that chrony_error would be responsible for invoking perror,
or perhaps users would have to switch on the result from
chrony_session_init to handle any errors:

switch(r) {
  case CRHONY_ERROR_SOCKET_UNIX:
    perror("socket unix");
    break;
  case CRHONY_ERROR_SOCKET_BIND:
    perror("bind unix");
    break;
  case CRHONY_ERROR_SOCKET_INET:
    perror("socket inet");
    break;
}

Would that be useful and likely lead to more reuse of library code?

Reply via email to