4 * Client-side IPC functions
16 #include <sys/types.h>
17 #include <sys/socket.h>
18 #include <netinet/in.h>
19 #include <arpa/inet.h>
26 #include <libcitadel.h>
28 #include "citadel_ipc.h"
29 #include "citadel_decls.h"
34 /* Note that some of these functions may not work with multiple instances. */
36 static void (*deathHook
)(void) = NULL
;
37 int (*error_printf
)(char *s
, ...) = (int (*)(char *, ...))printf
;
39 void setIPCDeathHook(void (*hook
)(void)) {
43 void setIPCErrorPrintf(int (*func
)(char *s
, ...)) {
47 void connection_died(CtdlIPC
* ipc
, int using_ssl
) {
48 if (deathHook
!= NULL
) {
52 stty_ctdl(SB_RESTORE
);
53 fprintf(stderr
, "\r\n\n\n");
54 fprintf(stderr
, "Your connection to %s is broken.\n", ipc
->ServInfo
.humannode
);
58 fprintf(stderr
, "Last error: %s\n", ERR_reason_error_string(ERR_get_error()));
63 fprintf(stderr
, "Last error: %s\n", strerror(errno
));
65 fprintf(stderr
, "Please re-connect and log in again.\n");
68 shutdown(ipc
->sock
, 2);