Date: Sat, 22 Nov 2025 03:41:38 +0000 From: bugzilla-noreply@freebsd.org To: bugs@FreeBSD.org Subject: [Bug 291145] UDP connected sockets cannot be disconnected Message-ID: <bug-291145-227@https.bugs.freebsd.org/bugzilla/>
index | next in thread | raw e-mail
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=291145 Bug ID: 291145 Summary: UDP connected sockets cannot be disconnected Product: Base System Version: 14.3-RELEASE Hardware: amd64 OS: Any Status: New Severity: Affects Only Me Priority: --- Component: kern Assignee: bugs@FreeBSD.org Reporter: contact@zentec.dev Hello, I've been trying to use the libc connect syscall to change the association of a UDP datagram socket in a Rust application, but I have had trouble with successfully invoking connect on the same socket fd multiple times. I read the connect(2) man page says this: Generally, stream sockets may successfully connect() only once; data- gram sockets may use connect() multiple times to change their associa- tion. Datagram sockets may dissolve the association by connecting to an invalid address, such as a null address. However, I have not been successful in disconnecting and dissolving the socket association when I end a connection from a UDP client. The following code works as expected on macOS Tahoe 26.1 and removes the association with a single address: { // sockaddr WITH sa_len on these platforms let addr = libc::sockaddr { sa_len: std::mem::size_of::<libc::sockaddr>() as u8, sa_family: libc::AF_UNSPEC as libc::sa_family_t, sa_data: [0; 14], }; let rc = unsafe { libc::connect( fd, &addr as *const libc::sockaddr, addr.sa_len as libc::socklen_t, ) }; if ok_or_eafnosupport(rc).is_ok() { return Ok(()); } // Fallback: connect(fd, NULL, 0) let rc2 = unsafe { libc::connect(fd, std::ptr::null(), 0) }; return ok_or_eafnosupport(rc2); } macOS will return EAFNOSUPPORT from the AF_UNSPEC call and stop filtering to a single address, but FreeBSD 14.3 returns EAFNOSUPPORT from AF_UNSPEC and does not change the socket behavior. The call with the NULL address also returns EINVAL on FreeBSD and does not dissolve the association like the man page would imply. Can you please advise if this is the expected behavior? Thank you -- You are receiving this mail because: You are the assignee for the bug.home | help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-291145-227>
