SO_BSDCOMPAT MESSAGE

Mark Andrews Mark_Andrews at isc.org
Thu Nov 17 03:49:22 UTC 2005


> Hi Everybody , 
>  
>             I installed bind 9.3.1 on fedora core 3 and When I start named
> it's giving an message like this  " dns2 kernel: process `named' is using
> obsolete setsockopt SO_BSDCOMPAT " I check mailing list and history but I
> couldn't find any information for solve it , also on google. Do you have any
> idea why this message anonced by kernel ? one time named are stopped , any
> relation with this message ? 
>  
> Thanks
> Best Regards 
>  
> Vahric MUHTARYAN
> Sistem Mühendisi/System Engineer
> DorukNet
> Tel / Phone : +90 212 326 92 00
> Fax : +90 212 227 28 11
> E-mail : vahric.muhtaryan at doruk.net.tr 
> http://www.doruk.net.tr 
> http://www.doruk.net.tr/english.html

	Complain to the Linux kernel developers.  They should remove
	the message or the #define.

	I suspect that all usage instances are actually protected
	with a #ifdef SO_BSDCOMPAT because it is not in early versions
	of the kernel.

	e.g.

#ifdef SO_BSDCOMPAT
        if (type != isc_sockettype_unix &&
            setsockopt(sock->fd, SOL_SOCKET, SO_BSDCOMPAT,
                       (void *)&on, sizeof(on)) < 0) {
                isc__strerror(errno, strbuf, sizeof(strbuf));
                UNEXPECTED_ERROR(__FILE__, __LINE__,
                                 "setsockopt(%d, SO_BSDCOMPAT) %s: %s",
                                 sock->fd,
                                 isc_msgcat_get(isc_msgcat, ISC_MSGSET_GENERAL,
                                                ISC_MSG_FAILED, "failed"),
                                 strbuf);
                /* Press on... */
        }
#endif

	Do they really expect application developers to try to
	workout what kernel version is running to see if they need
	to set SO_BSDCOMPAT especially when some kernel versions
	need the option turned on?

	As to why it was that the Linux kernel developers thought
	that making unconnected UDP sockets return errors after
	getting a ICMP message would be good.  Unfortunately this
	is only really useful in the case where a connected UDP
	socket could be used (always talking to the same end point).
	There is not enough information to do anything with the
	error code when you are talking to thousands of different
	clients a second.

	They then came up with this socket option to restore the
	BSD Socket API behaviour (SO_BSDCOMPAT) and not pass the
	error information back up the stack.

	They then decided to change the default to be the BSD Socket
	API behaviour so the setsockopt(SO_BSDCOMPAT) call was no
	longer necessary and decided to make the kernel complain
	about all such calls but also did not remove the #define for
	SO_BSDCOMPAT.

	Mark
--
Mark Andrews, ISC
1 Seymour St., Dundas Valley, NSW 2117, Australia
PHONE: +61 2 9871 4742                 INTERNET: Mark_Andrews at isc.org



More information about the bind-users mailing list