Просмотр исходного кода

BTap: fix broken MTU reporting

ambrop7 14 лет назад
Родитель
Сommit
f5a542dbc4
1 измененных файлов с 22 добавлено и 23 удалено
  1. 22 23
      tuntap/BTap.c

+ 22 - 23
tuntap/BTap.c

@@ -572,32 +572,31 @@ fail0:
     #endif
     #endif
     
     
     // get MTU
     // get MTU
-    if (tun) {
-        // open dummy socket for ioctls
-        int sock = socket(AF_INET, SOCK_DGRAM, 0);
-        if (sock < 0) {
-            BLog(BLOG_ERROR, "socket failed");
-            goto fail1;
-        }
-        
-        memset(&ifr, 0, sizeof(ifr));
-        strcpy(ifr.ifr_name, o->devname);
-        
-        if (ioctl(sock, SIOCGIFMTU, (void *)&ifr) < 0) {
-            BLog(BLOG_ERROR, "error getting MTU");
-            close(sock);
-            goto fail1;
-        }
-        
-        if (tun) {
-            o->frame_mtu = ifr.ifr_mtu;
-        } else {
-            o->frame_mtu = ifr.ifr_mtu + BTAP_ETHERNET_HEADER_LENGTH;
-        }
-        
+    
+    // open dummy socket for ioctls
+    int sock = socket(AF_INET, SOCK_DGRAM, 0);
+    if (sock < 0) {
+        BLog(BLOG_ERROR, "socket failed");
+        goto fail1;
+    }
+    
+    memset(&ifr, 0, sizeof(ifr));
+    strcpy(ifr.ifr_name, o->devname);
+    
+    if (ioctl(sock, SIOCGIFMTU, (void *)&ifr) < 0) {
+        BLog(BLOG_ERROR, "error getting MTU");
         close(sock);
         close(sock);
+        goto fail1;
     }
     }
     
     
+    if (tun) {
+        o->frame_mtu = ifr.ifr_mtu;
+    } else {
+        o->frame_mtu = ifr.ifr_mtu + BTAP_ETHERNET_HEADER_LENGTH;
+    }
+    
+    close(sock);
+    
     // set non-blocking
     // set non-blocking
     if (fcntl(o->fd, F_SETFL, O_NONBLOCK) < 0) {
     if (fcntl(o->fd, F_SETFL, O_NONBLOCK) < 0) {
         BLog(BLOG_ERROR, "cannot set non-blocking");
         BLog(BLOG_ERROR, "cannot set non-blocking");