[Spice-devel] [spice-server v2 5/6] reds-stream: Cache TCP socket 'no-delay' value
Christophe Fergeau
cfergeau at redhat.com
Fri Mar 10 08:59:41 UTC 2017
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 at redhat.com>
---
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
More information about the Spice-devel
mailing list