[Spice-devel] [PATCH v4 06/17] sound: Implements config_socket RedChannel callback
Frediano Ziglio
fziglio at redhat.com
Thu Dec 1 11:24:28 UTC 2016
This code is the same inside __new_channel but will set the
RedsStream from RedChannel.
Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
---
server/sound.c | 46 +++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 45 insertions(+), 1 deletion(-)
diff --git a/server/sound.c b/server/sound.c
index 011cff2..bf59789 100644
--- a/server/sound.c
+++ b/server/sound.c
@@ -1001,7 +1001,51 @@ error1:
static int snd_channel_config_socket(RedChannelClient *rcc)
{
- g_assert_not_reached();
+ int delay_val;
+ int flags;
+#ifdef SO_PRIORITY
+ int priority;
+#endif
+ int tos;
+ RedsStream *stream = red_channel_client_get_stream(rcc);
+ RedClient *red_client = red_channel_client_get_client(rcc);
+ MainChannelClient *mcc = red_client_get_main(red_client);
+
+ if ((flags = fcntl(stream->socket, F_GETFL)) == -1) {
+ spice_printerr("accept failed, %s", strerror(errno));
+ return FALSE;
+ }
+
+#ifdef SO_PRIORITY
+ priority = 6;
+ if (setsockopt(stream->socket, SOL_SOCKET, SO_PRIORITY, (void*)&priority,
+ sizeof(priority)) == -1) {
+ if (errno != ENOTSUP) {
+ spice_printerr("setsockopt failed, %s", strerror(errno));
+ }
+ }
+#endif
+
+ tos = IPTOS_LOWDELAY;
+ if (setsockopt(stream->socket, IPPROTO_IP, IP_TOS, (void*)&tos, sizeof(tos)) == -1) {
+ if (errno != ENOTSUP) {
+ spice_printerr("setsockopt failed, %s", strerror(errno));
+ }
+ }
+
+ delay_val = main_channel_client_is_low_bandwidth(mcc) ? 0 : 1;
+ if (setsockopt(stream->socket, IPPROTO_TCP, TCP_NODELAY, &delay_val, sizeof(delay_val)) == -1) {
+ if (errno != ENOTSUP) {
+ spice_printerr("setsockopt failed, %s", strerror(errno));
+ }
+ }
+
+ if (fcntl(stream->socket, F_SETFL, flags | O_NONBLOCK) == -1) {
+ spice_printerr("accept failed, %s", strerror(errno));
+ return FALSE;
+ }
+
+ return TRUE;
}
static void snd_channel_on_disconnect(RedChannelClient *rcc)
--
git-series 0.9.1
More information about the Spice-devel
mailing list