Rather than calling getsockopt when we need its value, we can cache it as it can only be set through a call to reds_stream_set_no_delay() Signed-off-by: Christophe Fergeau <cfergeau@xxxxxxxxxx> --- server/reds-stream.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/server/reds-stream.c b/server/reds-stream.c index 1d815c1..66b1166 100644 --- a/server/reds-stream.c +++ b/server/reds-stream.c @@ -99,6 +99,7 @@ struct RedsStreamPrivate { ssize_t (*writev)(RedsStream *s, const struct iovec *iov, int iovcnt); RedsState *reds; + bool no_delay; }; static ssize_t stream_write_cb(RedsStream *s, const void *buf, size_t size) @@ -263,12 +264,17 @@ bool reds_stream_is_plain_unix(const RedsStream *s) bool reds_stream_set_no_delay(RedsStream *stream, bool no_delay) { - return red_socket_set_no_delay(stream->socket, no_delay); + bool success; + success = red_socket_set_no_delay(stream->socket, no_delay); + if (success) { + stream->priv->no_delay = !!no_delay; + } + return success; } int reds_stream_get_no_delay(RedsStream *stream) { - return red_socket_get_no_delay(stream->socket); + return stream->priv->no_delay; } int reds_stream_send_msgfd(RedsStream *stream, int fd) @@ -372,7 +378,13 @@ void reds_stream_push_channel_event(RedsStream *s, int event) static void reds_stream_set_socket(RedsStream *stream, int socket) { + int no_delay; stream->socket = socket; + no_delay = red_socket_get_no_delay(socket); + if (no_delay != -1) { + stream->priv->no_delay = !!no_delay; + } + /* deprecated fields. Filling them for backward compatibility */ stream->priv->info->llen = sizeof(stream->priv->info->laddr); stream->priv->info->plen = sizeof(stream->priv->info->paddr); -- 2.9.3 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel