Subject: Linux socket emulation change (was: CVS commit: src/sys/compat/linux/common)
To: Jaromir Dolecek <jdolecek@netbsd.org>
From: Matthias Scheler <tron@zhadum.de>
List: tech-net
Date: 09/13/2004 23:27:45
In article <20040912153256.8C5E92DA1D@cvs.netbsd.org>,
	Jaromir Dolecek <jdolecek@NetBSD.org> writes:
> 
> Module Name:	src
> Committed By:	jdolecek
> Date:		Sun Sep 12 15:32:56 UTC 2004
> 
> Modified Files:
> 	src/sys/compat/linux/common: linux_socket.c
> 
> Log Message:
> if passed sockaddr has family AF_UNSPEC, use socket family of the socket
> the sockaddr is used for
> 
> this fixes bind() problem in Linux version of Theocracy, testing
> by Thomas Klausner

This change is not correct. Calling connect() with an AF_UNSPEC
sockaddr is well defined(*) interface to unconnect a UDP socket. Your
code changes have broken this. Please fix this issue and supply and
additional commit message which addresses this bug. I suggest that you
move the "bdom == AF_UNSPEC" hack linux_sys_bind() or add a boolean
argument to linux_sa_get() which allows to (de)activate it.

	Kind regards

(*) See "Unix Network Programming" by W. Richard Stevens, page 226
    "Calling connect Multiple Times for a UDP socket".

-- 
Matthias Scheler                                  http://scheler.de/~matthias/