Today I heard someone struggling while trying to understand the meaning
and possible uses of the -d ping(8) flag.  Looking at the code it seems
that SO_DEBUG has no effect on a raw socket (right?), so I thought that
it would be better to document that.

ok?

Index: ping.8
===================================================================
RCS file: /cvs/src/sbin/ping/ping.8,v
retrieving revision 1.48
diff -u -p -r1.48 ping.8
--- ping.8      14 Aug 2013 08:39:30 -0000      1.48
+++ ping.8      11 Nov 2013 15:14:08 -0000
@@ -86,6 +86,8 @@ bit.
 Set the
 .Dv SO_DEBUG
 option on the socket being used.
+This option has no effect on
+.Ox .
 .It Fl E
 Emit an audible beep (by sending an ASCII BEL character to the
 standard error output) when no packet is received before the next
Index: ping.c
===================================================================
RCS file: /cvs/src/sbin/ping/ping.c,v
retrieving revision 1.96
diff -u -p -r1.96 ping.c
--- ping.c      28 Oct 2013 15:05:35 -0000      1.96
+++ ping.c      11 Nov 2013 15:21:29 -0000
@@ -99,14 +99,13 @@ int options;
 #define        F_PINGFILLED    0x0008
 #define        F_QUIET         0x0010
 #define        F_RROUTE        0x0020
-#define        F_SO_DEBUG      0x0040
-#define        F_SO_DONTROUTE  0x0080
-#define        F_VERBOSE       0x0100
-#define        F_SADDR         0x0200
-#define        F_HDRINCL       0x0400
-#define        F_TTL           0x0800
-#define        F_AUD_RECV      0x2000
-#define        F_AUD_MISS      0x4000
+#define        F_SO_DONTROUTE  0x0040
+#define        F_VERBOSE       0x0080
+#define        F_SADDR         0x0100
+#define        F_HDRINCL       0x0200
+#define        F_TTL           0x0400
+#define        F_AUD_RECV      0x0800
+#define        F_AUD_MISS      0x1000
 
 /* multicast options */
 int moptions;
@@ -218,7 +217,7 @@ main(int argc, char *argv[])
                        df = 1;
                        break;
                case 'd':
-                       options |= F_SO_DEBUG;
+                       /* Option retained for compatibility. */
                        break;
                case 'E':
                        options |= F_AUD_MISS;
@@ -400,9 +399,6 @@ main(int argc, char *argv[])
                }
        }
 
-       if (options & F_SO_DEBUG)
-               (void)setsockopt(s, SOL_SOCKET, SO_DEBUG, &hold,
-                   sizeof(hold));
        if (options & F_SO_DONTROUTE)
                (void)setsockopt(s, SOL_SOCKET, SO_DONTROUTE, &hold,
                    sizeof(hold));

Reply via email to