2 * A dummy Socket implementation which just holds an error message.
8 #define DEFINE_PLUG_METHOD_MACROS
13 typedef struct Socket_error_tag *Error_Socket;
15 struct Socket_error_tag {
16 const struct socket_function_table *fn;
17 /* the above variable absolutely *must* be the first in this structure */
24 static Plug sk_error_plug(Socket s, Plug p)
26 Error_Socket ps = (Error_Socket) s;
33 static void sk_error_close(Socket s)
35 Error_Socket ps = (Error_Socket) s;
41 static void sk_error_set_private_ptr(Socket s, void *ptr)
43 Error_Socket ps = (Error_Socket) s;
47 static void *sk_error_get_private_ptr(Socket s)
49 Error_Socket ps = (Error_Socket) s;
53 static const char *sk_error_socket_error(Socket s)
55 Error_Socket ps = (Error_Socket) s;
59 Socket new_error_socket(const char *errmsg, Plug plug)
61 static const struct socket_function_table socket_fn_table = {
68 sk_error_set_private_ptr,
69 sk_error_get_private_ptr,
70 NULL /* set_frozen */,
76 ret = snew(struct Socket_error_tag);
77 ret->fn = &socket_fn_table;
79 ret->error = dupstr(errmsg);