On Thu, 18 Nov 2021 18:04:26 -0800 Steve Williams <st...@williamsitconsulting.com> wrote:
> Hi, > > I'm trying to compile a Linux/FreeBSD application (zoneminder) under > OpenBSD 7.0. > > I'm slowly working through it but have gotten stuck at the point where > it has a dependency on sendfile(2) which OpenBSD doesn't have. > > Doing some research, I found one reference that sosplice(2) might be > able to be used in place of sendfile. Elsewhere, I have found reference > to a "simple-sendfile" package, but that doesn't seem to exist. Linux sendfile(2) and FreeBSD sendfile(2) are different functions. simple_sendfile() is a function in lang/ruby that wraps FreeBSD's sendfile to act like Linux's. simple_sendfile() is not for OpenBSD. Linux: https://man7.org/linux/man-pages/man2/sendfile.2.html FreeBSD: https://www.freebsd.org/cgi/man.cgi?query=sendfile simple_sendfile: https://github.com/ruby/ruby/blob/0db68f023372b634603c74fca94588b457be084c/io.c#L11320 OpenBSD's SO_SPLICE can only "splice together two TCP or UDP sockets", says setsockopt(2). You can't SO_SPLICE if your code copies a regular file to a socket. > Is this an issue people have already resolved with other ports? Or is > it a deal breaker? > > I guess the devil is in the details, but I thought I'd reach out here > first in case there's already a good solution to this. Check what your code does if sendfile fails. If it falls back to a read/write loop, then you might patch it to skip sendfile. If it doesn't have a read/write loop, then you might need to add one. --George > > Thanks, > Steve Williams >