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));