[Spice-devel] [PATCH 1/2] server: don't fail on ENOPROTOOPT from setsockopt

Nahum Shalman nshalman at elys.com
Fri Mar 9 09:26:50 PST 2012


If we allow listening on arbitrary sockets like unix sockets,
we can get ENOPROTOOPT errors from setsockopt calls that set TCP
specific options.  This should be allowed to happen.
---
 server/inputs_channel.c |    2 +-
 server/spicevmc.c       |    2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/server/inputs_channel.c b/server/inputs_channel.c
index a3f26c0..fb25fe0 100644
--- a/server/inputs_channel.c
+++ b/server/inputs_channel.c
@@ -470,7 +470,7 @@ static int inputs_channel_config_socket(RedChannelClient *rcc)
 
     if (setsockopt(stream->socket, IPPROTO_TCP, TCP_NODELAY,
             &delay_val, sizeof(delay_val)) == -1) {
-        if (errno != ENOTSUP) {
+        if (errno != ENOTSUP && errno != ENOPROTOOPT) {
             red_printf("setsockopt failed, %s", strerror(errno));
             return FALSE;
         }
diff --git a/server/spicevmc.c b/server/spicevmc.c
index 30aaf2f..9449c1e 100644
--- a/server/spicevmc.c
+++ b/server/spicevmc.c
@@ -92,7 +92,7 @@ static int spicevmc_red_channel_client_config_socket(RedChannelClient *rcc)
     if (rcc->channel->type == SPICE_CHANNEL_USBREDIR) {
         if (setsockopt(stream->socket, IPPROTO_TCP, TCP_NODELAY,
                 &delay_val, sizeof(delay_val)) != 0) {
-            if (errno != ENOTSUP) {
+            if (errno != ENOTSUP && errno != ENOPROTOOPT) {
                 red_printf("setsockopt failed, %s", strerror(errno));
                 return FALSE;
             }
-- 
1.7.7.6



More information about the Spice-devel mailing list