From 41d93b126ac4fb558fa3de7af71bb54096fed511 Mon Sep 17 00:00:00 2001
From: Max Lv <mlv@nvidia.com>
Date: Fri, 6 May 2016 13:23:18 +0800
Subject: [PATCH] Fix #626

---
 src/local.c    | 3 ++-
 src/server.c   | 3 ++-
 src/tunnel.c   | 3 ++-
 src/udprelay.c | 9 ++++++---
 4 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/src/local.c b/src/local.c
index 4530e303..6d904f35 100644
--- a/src/local.c
+++ b/src/local.c
@@ -919,7 +919,8 @@ static remote_t *create_remote(listen_ctx_t *listener,
     setnonblocking(remotefd);
 #ifdef SET_INTERFACE
     if (listener->iface) {
-        setinterface(remotefd, listener->iface);
+        if (setinterface(remotefd, listener->iface) == -1)
+            ERROR("setinterface");
     }
 #endif
 
diff --git a/src/server.c b/src/server.c
index d09c7d53..44838763 100644
--- a/src/server.c
+++ b/src/server.c
@@ -431,7 +431,8 @@ static remote_t *connect_to_remote(struct addrinfo *res,
     setnonblocking(sockfd);
 #ifdef SET_INTERFACE
     if (iface) {
-        setinterface(sockfd, iface);
+        if (setinterface(sockfd, iface) == -1)
+            ERROR("setinterface");
     }
 #endif
 
diff --git a/src/tunnel.c b/src/tunnel.c
index ded83762..1e7cd9b1 100644
--- a/src/tunnel.c
+++ b/src/tunnel.c
@@ -660,7 +660,8 @@ static void accept_cb(EV_P_ ev_io *w, int revents)
     setnonblocking(remotefd);
 #ifdef SET_INTERFACE
     if (listener->iface) {
-        setinterface(remotefd, listener->iface);
+        if (setinterface(remotefd, listener->iface) == -1)
+            ERROR("setinterface");
     }
 #endif
 
diff --git a/src/udprelay.c b/src/udprelay.c
index 2b8c0b3c..3814b021 100644
--- a/src/udprelay.c
+++ b/src/udprelay.c
@@ -589,7 +589,8 @@ static void query_resolve_cb(struct sockaddr *addr, void *data)
 #endif
 #ifdef SET_INTERFACE
                 if (query_ctx->server_ctx->iface) {
-                    setinterface(remotefd, query_ctx->server_ctx->iface);
+                    if (setinterface(remotefd, query_ctx->server_ctx->iface) == -1)
+                        ERROR("setinterface");
                 }
 #endif
                 remote_ctx                  = new_remote(remotefd, query_ctx->server_ctx);
@@ -1089,7 +1090,8 @@ static void server_recv_cb(EV_P_ ev_io *w, int revents)
 #endif
 #ifdef SET_INTERFACE
         if (server_ctx->iface) {
-            setinterface(remotefd, server_ctx->iface);
+            if (setinterface(remotefd, server_ctx->iface) == -1)
+                ERROR("setinterface");
         }
 #endif
 
@@ -1169,7 +1171,8 @@ static void server_recv_cb(EV_P_ ev_io *w, int revents)
 #endif
 #ifdef SET_INTERFACE
                 if (server_ctx->iface) {
-                    setinterface(remotefd, server_ctx->iface);
+                    if (setinterface(remotefd, server_ctx->iface) == -1);
+                        ERROR("setinterface");
                 }
 #endif
                 remote_ctx                  = new_remote(remotefd, server_ctx);