]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Handle EINPROGRESS properly.
authorMartin Mares <mj@ucw.cz>
Mon, 20 Mar 2000 21:49:21 +0000 (21:49 +0000)
committerMartin Mares <mj@ucw.cz>
Mon, 20 Mar 2000 21:49:21 +0000 (21:49 +0000)
Set IP_DONTROUTE sockopt only if sk->ttl == 1.

sysdep/unix/io.c

index 824c7e297ca2aa0f1fdbdbbe5c6efb3a0e04a3ce..69f3f066d4369ebe4c1fa2d1b038a60da7664c5c 100644 (file)
@@ -451,13 +451,10 @@ sk_setup(sock *s)
 #else
   if ((s->tos >= 0) && setsockopt(fd, SOL_IP, IP_TOS, &s->tos, sizeof(s->tos)) < 0)
     WARN("IP_TOS");
-  if (s->ttl >= 0)
-    {
-      if (setsockopt(fd, SOL_IP, IP_TTL, &s->ttl, sizeof(s->ttl)) < 0)
-       ERR("IP_TTL");
-      if (setsockopt(fd, SOL_SOCKET, SO_DONTROUTE, &one, sizeof(one)) < 0)
-       ERR("SO_DONTROUTE");
-    }
+  if (s->ttl >= 0 && setsockopt(fd, SOL_IP, IP_TTL, &s->ttl, sizeof(s->ttl)) < 0)
+    ERR("IP_TTL");
+  if (s->ttl == 1 && setsockopt(fd, SOL_SOCKET, SO_DONTROUTE, &one, sizeof(one)) < 0)
+    ERR("SO_DONTROUTE");
 #endif
   /* FIXME: Set send/receive buffers? */
   /* FIXME: Set keepalive for TCP connections? */
@@ -618,7 +615,7 @@ sk_open(sock *s)
     case SK_TCP_ACTIVE:
       if (connect(fd, (struct sockaddr *) &sa, sizeof(sa)) >= 0)
        sk_tcp_connected(s);
-      else if (errno != EINTR && errno != EAGAIN)
+      else if (errno != EINTR && errno != EAGAIN && errno != EINPROGRESS)
        ERR("connect");
       break;
     case SK_TCP_PASSIVE:
@@ -776,7 +773,7 @@ sk_read(sock *s)
        fill_in_sockaddr(&sa, s->daddr, s->dport);
        if (connect(s->fd, (struct sockaddr *) &sa, sizeof(sa)) >= 0)
          sk_tcp_connected(s);
-       else if (errno != EINTR && errno != EAGAIN)
+       else if (errno != EINTR && errno != EAGAIN && errno != EINPROGRESS)
          {
            log(L_ERR "connect: %m");
            s->err_hook(s, errno);