changeset 22147:edc9369f9d60

lib: Use unix streams with connection when using unix socket This makes it easier to send file descriptors over connection
author Aki Tuomi <aki.tuomi@dovecot.fi>
date Wed, 31 May 2017 14:39:55 +0300
parents 88d2ad3f2463
children 3272674e4e5d
files src/lib/connection.c src/lib/connection.h
diffstat 2 files changed, 16 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib/connection.c	Tue May 30 21:57:06 2017 +0300
+++ b/src/lib/connection.c	Wed May 31 14:39:55 2017 +0300
@@ -3,7 +3,9 @@
 #include "lib.h"
 #include "ioloop.h"
 #include "istream.h"
+#include "istream-unix.h"
 #include "ostream.h"
+#include "ostream-unix.h"
 #include "iostream.h"
 #include "net.h"
 #include "strescape.h"
@@ -130,16 +132,24 @@
 	conn->version_received = set->major_version == 0;
 
 	if (set->input_max_size != 0) {
-		conn->input = i_stream_create_fd(conn->fd_in,
-						 set->input_max_size, FALSE);
+		if (conn->unix_socket)
+			conn->input = i_stream_create_unix(conn->fd_in,
+							   set->input_max_size);
+		else
+			conn->input = i_stream_create_fd(conn->fd_in,
+							 set->input_max_size, FALSE);
 		i_stream_set_name(conn->input, conn->name);
 		conn->io = io_add_istream(conn->input, *conn->list->v.input, conn);
 	} else {
 		conn->io = io_add(conn->fd_in, IO_READ, *conn->list->v.input, conn);
 	}
 	if (set->output_max_size != 0) {
-		conn->output = o_stream_create_fd(conn->fd_out,
-						  set->output_max_size, FALSE);
+		if (conn->unix_socket)
+			conn->output = o_stream_create_unix(conn->fd_out,
+							    set->output_max_size);
+		else
+			conn->output = o_stream_create_fd(conn->fd_out,
+							  set->output_max_size, FALSE);
 		o_stream_set_no_error_handling(conn->output, TRUE);
 		o_stream_set_name(conn->output, conn->name);
 	}
@@ -212,6 +222,7 @@
 	conn->fd_in = conn->fd_out = -1;
 	conn->list = list;
 	conn->name = i_strdup(path);
+	conn->unix_socket = TRUE;
 
 	DLLIST_PREPEND(&list->connections, conn);
 	list->connections_count++;
--- a/src/lib/connection.h	Tue May 30 21:57:06 2017 +0300
+++ b/src/lib/connection.h	Wed May 31 14:39:55 2017 +0300
@@ -99,6 +99,7 @@
 	enum connection_disconnect_reason disconnect_reason;
 
 	unsigned int version_received:1;
+	unsigned int unix_socket:1;
 };
 
 struct connection_list {