]> xenbits.xensource.com Git - xen.git/commitdiff
tools/libxs: Track whether we're using a socket or file
authorAndrew Cooper <andrew.cooper3@citrix.com>
Mon, 25 Nov 2024 10:53:35 +0000 (11:53 +0100)
committerJan Beulich <jbeulich@suse.com>
Mon, 25 Nov 2024 10:53:35 +0000 (11:53 +0100)
It will determine whether to use writev() or sendmsg().

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Juergen Gross <jgross@suse.com>
Reviewed-by: Jason Andryuk <jason.andryuk@amd.com>
master commit: 046efe529e82b8b999d8453d4ea49cb817c3f9b5
master date: 2024-07-23 15:11:27 +0100

tools/libs/store/xs.c

index 4d24bf7b0ff6a8d4133784e0e8331a8b2e1f8bb8..ae1f80d5e694cf516f166dfcb2e87767a82f84bc 100644 (file)
@@ -65,6 +65,9 @@ struct xs_stored_msg {
 struct xs_handle {
        /* Communications channel to xenstore daemon. */
        int fd;
+
+       bool is_socket; /* is @fd a file or socket? */
+
        Xentoolcore__Active_Handle tc_ah; /* for restrict */
 
        /*
@@ -140,6 +143,7 @@ static void *read_thread(void *arg);
 
 struct xs_handle {
        int fd;
+       bool is_socket; /* is @fd a file or socket? */
        Xentoolcore__Active_Handle tc_ah; /* for restrict */
        XEN_TAILQ_HEAD(, struct xs_stored_msg) reply_list;
        XEN_TAILQ_HEAD(, struct xs_stored_msg) watch_list;
@@ -300,7 +304,9 @@ static struct xs_handle *get_handle(const char *connect_to)
        if (stat(connect_to, &buf) != 0)
                goto err;
 
-       if (S_ISSOCK(buf.st_mode))
+       h->is_socket = S_ISSOCK(buf.st_mode);
+
+       if (h->is_socket)
                h->fd = get_socket(connect_to);
        else
                h->fd = get_dev(connect_to);