user/dev discussion of public-inbox itself
 help / color / mirror / code / Atom feed
Search results ordered by [date|relevance]  view[summary|nested|Atom feed]
thread overview below | download mbox.gz: |
* Re: [PATCH v2] Clarify Inline::C dependency (optional on Linux, required elsewhere)
  @ 2023-09-02 20:45  5%                     ` Štěpán Němec
  0 siblings, 0 replies; 5+ results
From: Štěpán Němec @ 2023-09-02 20:45 UTC (permalink / raw)
  To: Eric Wong; +Cc: meta

On Sat, 02 Sep 2023 19:44:07 +0000
Eric Wong wrote:

> Perhaps the per-module "optional, for .." statements should be
> "only for ...".

Well, if that's really true (i.e., they're not needed/useful for
anything else)...

I guess you see INSTALL as mainly for public-inbox without lei (and
indeed the first sentence is "This is for folks who want to set up their
own public-inbox instance."), so from that perspective saying "optional"
about something that is optional for public-inbox but required for lei
makes sense, but lei is then mentioned repeatedly in the dependencies
section, and it seems a safe bet there are much more people using lei
than there are people setting up public-inbox instances, so I'm not sure
maintaining that perspective in INSTALL is the best way to help those
users.

Then again, maybe it's just in my head and I might as well let such
users speak for themselves if they exist and ever wish to do so.

So here's just a reroll with your suggestions implemented:

-- 8< --
Subject: [PATCH v3] Clarify Inline::C dependency (optional on Linux, required
 elsewhere)

Link: https://public-inbox.org/meta/20230901110903.M876537@dcvr/
Link: https://public-inbox.org/meta/20230902194407.M464597@dcvr/
Fixes: 88c7c7c26b44 ("lei: wire up pure Perl sendmsg/recvmsg for Linux users")
Fixes: acefd91b302d ("syscall: implement sendmsg+recvmsg in pure Perl")
---
changes since v2:
- add another Link: to the parent of this message
- don't change "optional" to "other", focus is on public-inbox
- don't repeat "optional" in individual module items, say "only for"

 Documentation/lei-overview.pod | 12 +++++++-----
 INSTALL                        | 11 ++++++-----
 2 files changed, 13 insertions(+), 10 deletions(-)

diff --git a/Documentation/lei-overview.pod b/Documentation/lei-overview.pod
index 7095b504cdb8..e9a97d64fb56 100644
--- a/Documentation/lei-overview.pod
+++ b/Documentation/lei-overview.pod
@@ -119,11 +119,13 @@ code repository.
 
 =head1 PERFORMANCE NOTES
 
-L<Inline::C> is required, lei runs as a background daemon to reduce
-startup costs and can provide real-time L<kqueue(2)>/L<inotify(7)>
-Maildir monitoring.  L<IO::KQueue> (p5-IO-KQueue on FreeBSD) and
-L<Linux::Inotify2> (liblinux-inotify2-perl and perl-Linux-Inotify2 in
-.deb and .rpm-based distros, respectively) are recommended.
+L<Inline::C> is required on BSDs and can speed things up on Linux.
+
+lei runs as a background daemon to reduce startup costs and can
+provide real-time L<kqueue(2)>/L<inotify(7)> Maildir monitoring.
+L<IO::KQueue> (p5-IO-KQueue on FreeBSD) and L<Linux::Inotify2>
+(liblinux-inotify2-perl and perl-Linux-Inotify2 in .deb and .rpm-based
+distros, respectively) are recommended.
 
 L<Socket::MsgHdr> is optional (libsocket-msghdr-perl in Debian),
 and further improves startup performance.  Its effect is most felt
diff --git a/INSTALL b/INSTALL
index 5f080f2889ce..2e1c7ef7bb0a 100644
--- a/INSTALL
+++ b/INSTALL
@@ -76,7 +76,8 @@ Numerous optional modules are likely to be useful as well:
 - Inline::C                        deb: libinline-c-perl
                                    pkg: p5-Inline-C
                                    rpm: perl-Inline (or perl-Inline-C)
-                                   (speeds up process spawning on Linux,
+                                   (required for lei on *BSD;
+                                    speeds up process spawning on Linux,
                                     see public-inbox-daemon(8))
 
 - Email::Address::XS               deb: libemail-address-xs-perl
@@ -88,17 +89,17 @@ Numerous optional modules are likely to be useful as well:
 - Parse::RecDescent                deb: libparse-recdescent-perl
                                    pkg: p5-Parse-RecDescent
                                    rpm: perl-ParseRecDescent
-                                   (optional, for public-inbox-imapd(1))
+                                   (only for public-inbox-imapd(1))
 
 - Mail::IMAPClient                 deb: libmail-imapclient-perl
                                    pkg: p5-Mail-IMAPClient
                                    rpm: perl-Mail-IMAPClient
-                                   (optional for lei and public-inbox-watch)
+                                   (only for lei and public-inbox-watch)
 
 - BSD::Resource                    deb: libbsd-resource-perl
                                    pkg: p5-BSD-Resource
                                    rpm: perl-BSD-Resource
-                                   (optional, for PSGI limiters
+                                   (only for PSGI limiters,
                                     see public-inbox-config(5))
 
 - Plack::Middleware::ReverseProxy  deb: libplack-middleware-reverseproxy-perl
@@ -113,7 +114,7 @@ Numerous optional modules are likely to be useful as well:
 * xapian-compact (tool)            deb: xapian-tools
                                    pkg: xapian-core
                                    rpm: xapian-core
-                                   (optional, for public-inbox-compact(1))
+                                   (only for public-inbox-compact(1))
 
 * curl (tool)                      deb, pkg, rpm: curl
                                    (for HTTP(S) externals with curl)

-- 
2.42.0

^ permalink raw reply related	[relevance 5%]

* [PATCH v2] Clarify Inline::C dependency (optional on Linux, required elsewhere)
  2023-09-02 10:54  6%           ` Štěpán Němec
@ 2023-09-02 11:07  6%             ` Štěpán Němec
    0 siblings, 1 reply; 5+ results
From: Štěpán Němec @ 2023-09-02 11:07 UTC (permalink / raw)
  To: Eric Wong; +Cc: meta


Link: https://public-inbox.org/meta/20230901110903.M876537@dcvr/
Fixes: 88c7c7c26b44 ("lei: wire up pure Perl sendmsg/recvmsg for Linux users")
Fixes: acefd91b302d ("syscall: implement sendmsg+recvmsg in pure Perl")
---
v2: expand tabs, sorry about that...

 Documentation/lei-overview.pod | 12 +++++++-----
 INSTALL                        |  7 ++++---
 2 files changed, 11 insertions(+), 8 deletions(-)

diff --git a/Documentation/lei-overview.pod b/Documentation/lei-overview.pod
index 7095b504cdb8..e9a97d64fb56 100644
--- a/Documentation/lei-overview.pod
+++ b/Documentation/lei-overview.pod
@@ -119,11 +119,13 @@ code repository.
 
 =head1 PERFORMANCE NOTES
 
-L<Inline::C> is required, lei runs as a background daemon to reduce
-startup costs and can provide real-time L<kqueue(2)>/L<inotify(7)>
-Maildir monitoring.  L<IO::KQueue> (p5-IO-KQueue on FreeBSD) and
-L<Linux::Inotify2> (liblinux-inotify2-perl and perl-Linux-Inotify2 in
-.deb and .rpm-based distros, respectively) are recommended.
+L<Inline::C> is required on BSDs and can speed things up on Linux.
+
+lei runs as a background daemon to reduce startup costs and can
+provide real-time L<kqueue(2)>/L<inotify(7)> Maildir monitoring.
+L<IO::KQueue> (p5-IO-KQueue on FreeBSD) and L<Linux::Inotify2>
+(liblinux-inotify2-perl and perl-Linux-Inotify2 in .deb and .rpm-based
+distros, respectively) are recommended.
 
 L<Socket::MsgHdr> is optional (libsocket-msghdr-perl in Debian),
 and further improves startup performance.  Its effect is most felt
diff --git a/INSTALL b/INSTALL
index 5f080f2889ce..8f08a11f7ee1 100644
--- a/INSTALL
+++ b/INSTALL
@@ -60,7 +60,7 @@ Where "deb" indicates package names for Debian-derived distributions,
 "pkg" is for the FreeBSD package (maybe other common BSDs, too), and
 "rpm" is for RPM-based distributions (only known to work on Fedora).
 
-Numerous optional modules are likely to be useful as well:
+Numerous other modules are likely to be useful as well:
 
 - DBD::SQLite                      deb: libdbd-sqlite3-perl
                                    pkg: p5-DBD-SQLite
@@ -76,8 +76,9 @@ Numerous optional modules are likely to be useful as well:
 - Inline::C                        deb: libinline-c-perl
                                    pkg: p5-Inline-C
                                    rpm: perl-Inline (or perl-Inline-C)
-                                   (speeds up process spawning on Linux,
-                                    see public-inbox-daemon(8))
+                                   (required for lei on *BSD; speeds up process
+                                    spawning on Linux, see
+                                    public-inbox-daemon(8))
 
 - Email::Address::XS               deb: libemail-address-xs-perl
                                    pkg: p5-Email-Address-XS

-- 
2.42.0


^ permalink raw reply related	[relevance 6%]

* Re: [PATCH 0/7] various build fixes + OpenBSD compat, [PATCH 7/7] xap_helper.h: fix double-free on OpenBSD hdestroy
  @ 2023-09-02 10:54  6%           ` Štěpán Němec
  2023-09-02 11:07  6%             ` [PATCH v2] Clarify Inline::C dependency (optional on Linux, required elsewhere) Štěpán Němec
  0 siblings, 1 reply; 5+ results
From: Štěpán Němec @ 2023-09-02 10:54 UTC (permalink / raw)
  To: Eric Wong; +Cc: meta

On Fri, 01 Sep 2023 11:09:03 +0000
Eric Wong wrote:

> Štěpán Němec <stepnem@smrk.net> wrote:
>> Ah, I see now that PERFORMANCE NOTES in lei-overview.pod says Inline::C
>> is required, so perhaps just some adjustments to the test
>> skipping/diagnostics and INSTALL instructions (which say Inline::C is
>> optional) would be helpful?
>
> Actually, Inline::C is only needed for lei on *BSDs nowadays.
> Common/available-on-cfarm Linux arches can rely on stable
> syscall numbers to do FD passing.

I see, thanks.  How about this then:

-- >8 --
Subject: [PATCH] Clarify Inline::C dependency (optional on Linux, required
 elsewhere)

Link: https://public-inbox.org/meta/20230901110903.M876537@dcvr/
Fixes: 88c7c7c26b44 ("lei: wire up pure Perl sendmsg/recvmsg for Linux users")
Fixes: acefd91b302d ("syscall: implement sendmsg+recvmsg in pure Perl")
---
 Documentation/lei-overview.pod | 12 +++++++-----
 INSTALL                        |  7 ++++---
 2 files changed, 11 insertions(+), 8 deletions(-)

diff --git a/Documentation/lei-overview.pod b/Documentation/lei-overview.pod
index 7095b504cdb8..e9a97d64fb56 100644
--- a/Documentation/lei-overview.pod
+++ b/Documentation/lei-overview.pod
@@ -119,11 +119,13 @@ code repository.
 
 =head1 PERFORMANCE NOTES
 
-L<Inline::C> is required, lei runs as a background daemon to reduce
-startup costs and can provide real-time L<kqueue(2)>/L<inotify(7)>
-Maildir monitoring.  L<IO::KQueue> (p5-IO-KQueue on FreeBSD) and
-L<Linux::Inotify2> (liblinux-inotify2-perl and perl-Linux-Inotify2 in
-.deb and .rpm-based distros, respectively) are recommended.
+L<Inline::C> is required on BSDs and can speed things up on Linux.
+
+lei runs as a background daemon to reduce startup costs and can
+provide real-time L<kqueue(2)>/L<inotify(7)> Maildir monitoring.
+L<IO::KQueue> (p5-IO-KQueue on FreeBSD) and L<Linux::Inotify2>
+(liblinux-inotify2-perl and perl-Linux-Inotify2 in .deb and .rpm-based
+distros, respectively) are recommended.
 
 L<Socket::MsgHdr> is optional (libsocket-msghdr-perl in Debian),
 and further improves startup performance.  Its effect is most felt
diff --git a/INSTALL b/INSTALL
index 5f080f2889ce..e8d686d8f21b 100644
--- a/INSTALL
+++ b/INSTALL
@@ -60,7 +60,7 @@ Where "deb" indicates package names for Debian-derived distributions,
 "pkg" is for the FreeBSD package (maybe other common BSDs, too), and
 "rpm" is for RPM-based distributions (only known to work on Fedora).
 
-Numerous optional modules are likely to be useful as well:
+Numerous other modules are likely to be useful as well:
 
 - DBD::SQLite                      deb: libdbd-sqlite3-perl
                                    pkg: p5-DBD-SQLite
@@ -76,8 +76,9 @@ Numerous optional modules are likely to be useful as well:
 - Inline::C                        deb: libinline-c-perl
                                    pkg: p5-Inline-C
                                    rpm: perl-Inline (or perl-Inline-C)
-                                   (speeds up process spawning on Linux,
-                                    see public-inbox-daemon(8))
+                                   (required for lei on *BSD; speeds up process
+				    spawning on Linux, see
+				    public-inbox-daemon(8))
 
 - Email::Address::XS               deb: libemail-address-xs-perl
                                    pkg: p5-Email-Address-XS

-- 
2.42.0


^ permalink raw reply related	[relevance 6%]

* [PATCH 3/3] syscall: implement sendmsg+recvmsg in pure Perl
  2022-03-23  8:54  7% [PATCH 0/3] support sendmsg+recvmsg in pure Perl under Linux Eric Wong
@ 2022-03-23  8:54  5% ` Eric Wong
  0 siblings, 0 replies; 5+ results
From: Eric Wong @ 2022-03-23  8:54 UTC (permalink / raw)
  To: meta

Socket::MsgHdr is only packaged for Debian and derivatives at
the moment, and Inline::C pulling in gcc/clang is a huge amount
of disk space and bandwidth for some users.

This enables disk space and/or bandwidth-limited users to use lei.

Only Linux guarantees a stable ABI and syscall numbers, but
that's the majority of our userbase.  FreeBSD users will still
have to use Inline::C (or get Socket::MsgHdr packaged).

x86, x32, and x86-64 are all currently supported, more to be added.
---
 devel/syscall-list         |  2 +
 lib/PublicInbox/Syscall.pm | 95 ++++++++++++++++++++++++++++++++++++++
 script/lei                 |  6 ++-
 t/cmd_ipc.t                | 13 +++++-
 4 files changed, 114 insertions(+), 2 deletions(-)

diff --git a/devel/syscall-list b/devel/syscall-list
index a6b1bfa7..d33a8a78 100755
--- a/devel/syscall-list
+++ b/devel/syscall-list
@@ -49,6 +49,8 @@ int main(void)
 	D(SYS_inotify_rm_watch);
 	D(SYS_prctl);
 	D(SYS_fstatfs);
+	D(SYS_sendmsg);
+	D(SYS_recvmsg);
 #ifdef FS_IOC_GETFLAGS
 	printf("FS_IOC_GETFLAGS=%#lx\nFS_IOC_SETFLAGS=%#lx\n",
 		(unsigned long)FS_IOC_GETFLAGS, (unsigned long)FS_IOC_SETFLAGS);
diff --git a/lib/PublicInbox/Syscall.pm b/lib/PublicInbox/Syscall.pm
index 806c192e..e9175ceb 100644
--- a/lib/PublicInbox/Syscall.pm
+++ b/lib/PublicInbox/Syscall.pm
@@ -2,6 +2,9 @@
 # specifically the Debian libsys-syscall-perl 0.25-6 version to
 # fix upstream regressions in 0.25.
 #
+# See devel/syscall-list in the public-inbox source tree for maintenance
+# <https://80x24.org/public-inbox.git>
+#
 # This license differs from the rest of public-inbox
 #
 # This module is Copyright (c) 2005 Six Apart, Ltd.
@@ -16,6 +19,7 @@ use strict;
 use v5.10.1;
 use parent qw(Exporter);
 use POSIX qw(ENOENT ENOSYS EINVAL O_NONBLOCK);
+use Socket qw(SOL_SOCKET SCM_RIGHTS);
 use Config;
 
 # $VERSION = '0.25'; # Sys::Syscall version
@@ -42,8 +46,19 @@ use constant {
 	EPOLL_CTL_ADD => 1,
 	EPOLL_CTL_DEL => 2,
 	EPOLL_CTL_MOD => 3,
+	SIZEOF_int => $Config{intsize},
+	SIZEOF_size_t => $Config{sizesize},
+	NUL => "\0",
+};
+
+use constant {
+	TMPL_size_t => SIZEOF_size_t == 8 ? 'Q' : 'L',
+	BYTES_4_hole => SIZEOF_size_t == 8 ? 'L' : '',
+	# cmsg_len, cmsg_level, cmsg_type
+	SIZEOF_cmsghdr => SIZEOF_int * 2 + SIZEOF_size_t,
 };
 
+my @BYTES_4_hole = BYTES_4_hole ? (0) : ();
 our $loaded_syscall = 0;
 
 sub _load_syscall {
@@ -68,6 +83,7 @@ our (
      $SYS_renameat2,
      );
 
+my ($SYS_sendmsg, $SYS_recvmsg);
 my $SYS_fstatfs; # don't need fstatfs64, just statfs.f_type
 my ($FS_IOC_GETFLAGS, $FS_IOC_SETFLAGS);
 my $SFD_CLOEXEC = 02000000; # Perl does not expose O_CLOEXEC
@@ -99,6 +115,8 @@ if ($^O eq "linux") {
         $SYS_signalfd4 = 327;
         $SYS_renameat2 //= 353;
 	$SYS_fstatfs = 100;
+	$SYS_sendmsg = 370;
+	$SYS_recvmsg = 372;
 	$FS_IOC_GETFLAGS = 0x80046601;
 	$FS_IOC_SETFLAGS = 0x40046602;
     } elsif ($machine eq "x86_64") {
@@ -108,6 +126,8 @@ if ($^O eq "linux") {
         $SYS_signalfd4 = 289;
 	$SYS_renameat2 //= 316;
 	$SYS_fstatfs = 138;
+	$SYS_sendmsg = 46;
+	$SYS_recvmsg = 47;
 	$FS_IOC_GETFLAGS = 0x80086601;
 	$FS_IOC_SETFLAGS = 0x40086602;
     } elsif ($machine eq 'x32') {
@@ -117,6 +137,8 @@ if ($^O eq "linux") {
         $SYS_signalfd4 = 1073742113;
 	$SYS_renameat2 //= 0x40000000 + 316;
 	$SYS_fstatfs = 138;
+	$SYS_sendmsg = 0x40000206;
+	$SYS_recvmsg = 0x40000207;
 	$FS_IOC_GETFLAGS = 0x80046601;
 	$FS_IOC_SETFLAGS = 0x40046602;
     } elsif ($machine eq 'sparc64') {
@@ -378,6 +400,79 @@ sub nodatacow_dir {
 	if (open my $fh, '<', $_[0]) { nodatacow_fh($fh) }
 }
 
+sub CMSG_ALIGN ($) { ($_[0] + SIZEOF_size_t - 1) & ~(SIZEOF_size_t - 1) }
+use constant CMSG_ALIGN_SIZEOF_cmsghdr => CMSG_ALIGN(SIZEOF_cmsghdr);
+sub CMSG_SPACE ($) { CMSG_ALIGN($_[0]) + CMSG_ALIGN_SIZEOF_cmsghdr }
+sub CMSG_LEN ($) { CMSG_ALIGN_SIZEOF_cmsghdr + $_[0] }
+
+if (defined($SYS_sendmsg) && defined($SYS_recvmsg)) {
+no warnings 'once';
+*send_cmd4 = sub ($$$$) {
+	my ($sock, $fds, undef, $flags) = @_;
+	my $iov = pack('P'.TMPL_size_t,
+			$_[2] // NUL, length($_[2] // NUL) || 1);
+	my $cmsghdr = pack(TMPL_size_t . # cmsg_len
+			'LL' .  # cmsg_level, cmsg_type,
+			('i' x scalar(@$fds)),
+			CMSG_LEN(scalar(@$fds) * SIZEOF_int), # cmsg_len
+			SOL_SOCKET, SCM_RIGHTS, # cmsg_{level,type}
+			@$fds); # CMSG_DATA
+	my $mh = pack('PL' . # msg_name, msg_namelen (socklen_t (U32))
+			BYTES_4_hole . # 4-byte padding on 64-bit
+			'P'.TMPL_size_t . # msg_iov, msg_iovlen,
+			'P'.TMPL_size_t . # msg_control, msg_controllen,
+			'i', # msg_flags
+			NUL, 0, # msg_name, msg_namelen (unused)
+			@BYTES_4_hole,
+			$iov, 1, # msg_iov, msg_iovlen
+			$cmsghdr, # msg_control
+			CMSG_SPACE(scalar(@$fds) * SIZEOF_int), # msg_controllen
+			0); # msg_flags
+	my $sent;
+	my $try = 0;
+	do {
+		$sent = syscall($SYS_sendmsg, fileno($sock), $mh, $flags);
+	} while ($sent < 0 &&
+			($!{ENOBUFS} || $!{ENOMEM} || $!{ETOOMANYREFS}) &&
+			(++$try < 50) &&
+			warn "sleeping on sendmsg: $! (#$try)\n" &&
+			select(undef, undef, undef, 0.1) == 0);
+	$sent >= 0 ? $sent : undef;
+};
+
+*recv_cmd4 = sub ($$$) {
+	my ($sock, undef, $len) = @_;
+	vec($_[1], ($len + 1) * 8, 1) = 0;
+	vec(my $cmsghdr = '', 256 * 8 - 1, 1) = 1;
+	my $iov = pack('P'.TMPL_size_t, $_[1], $len);
+	my $mh = pack('PL' . # msg_name, msg_namelen (socklen_t (U32))
+			BYTES_4_hole . # 4-byte padding on 64-bit
+			'P'.TMPL_size_t . # msg_iov, msg_iovlen,
+			'P'.TMPL_size_t . # msg_control, msg_controllen,
+			'i', # msg_flags
+			NUL, 0, # msg_name, msg_namelen (unused)
+			@BYTES_4_hole,
+			$iov, 1, # msg_iov, msg_iovlen
+			$cmsghdr, # msg_control
+			256, # msg_controllen
+			0); # msg_flags
+	my $r = syscall($SYS_recvmsg, fileno($sock), $mh, 0);
+	return (undef) if $r < 0; # $! set
+	substr($_[1], $r, length($_[1]), '');
+	my @ret;
+	if ($r > 0) {
+		my ($len, $lvl, $type, @fds) = unpack(TMPL_size_t . # cmsg_len
+					'LLi*', # cmsg_level, cmsg_type, @fds
+					$cmsghdr);
+		if ($lvl == SOL_SOCKET && $type == SCM_RIGHTS) {
+			$len -= CMSG_ALIGN_SIZEOF_cmsghdr;
+			@ret = @fds[0..(($len / SIZEOF_int) - 1)];
+		}
+	}
+	@ret;
+};
+}
+
 1;
 
 =head1 WARRANTY
diff --git a/script/lei b/script/lei
index 5cad19d7..adef9944 100755
--- a/script/lei
+++ b/script/lei
@@ -1,5 +1,5 @@
 #!perl -w
-# Copyright (C) 2020-2021 all contributors <meta@public-inbox.org>
+# Copyright (C) all contributors <meta@public-inbox.org>
 # License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
 use strict;
 use v5.10.1;
@@ -9,6 +9,10 @@ my $narg = 5;
 my $sock;
 my $recv_cmd = PublicInbox::CmdIPC4->can('recv_cmd4');
 my $send_cmd = PublicInbox::CmdIPC4->can('send_cmd4') // do {
+	require PublicInbox::Syscall;
+	$recv_cmd = PublicInbox::Syscall->can('recv_cmd4');
+	PublicInbox::Syscall->can('send_cmd4');
+} // do {
 	my $inline_dir = $ENV{PERL_INLINE_DIRECTORY} //= (
 			$ENV{XDG_CACHE_HOME} //
 			( ($ENV{HOME} // '/nonexistent').'/.cache' )
diff --git a/t/cmd_ipc.t b/t/cmd_ipc.t
index dd90fa2a..75697a15 100644
--- a/t/cmd_ipc.t
+++ b/t/cmd_ipc.t
@@ -1,5 +1,5 @@
 #!perl -w
-# Copyright (C) 2021 all contributors <meta@public-inbox.org>
+# Copyright (C) all contributors <meta@public-inbox.org>
 # License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
 use strict;
 use v5.10.1;
@@ -142,4 +142,15 @@ SKIP: {
 	}
 }
 
+SKIP: {
+	skip 'not Linux', 1 if $^O ne 'linux';
+	require_ok 'PublicInbox::Syscall';
+	$send = PublicInbox::Syscall->can('send_cmd4') or
+		skip 'send_cmd4 not defined for arch';
+	$recv = PublicInbox::Syscall->can('recv_cmd4') or
+		skip 'recv_cmd4 not defined for arch';
+	$do_test->(SOCK_STREAM, 0, 'PP Linux stream');
+	$do_test->($SOCK_SEQPACKET, MSG_EOR, 'PP Linux seqpacket');
+}
+
 done_testing;

^ permalink raw reply related	[relevance 5%]

* [PATCH 0/3] support sendmsg+recvmsg in pure Perl under Linux
@ 2022-03-23  8:54  7% Eric Wong
  2022-03-23  8:54  5% ` [PATCH 3/3] syscall: implement sendmsg+recvmsg in pure Perl Eric Wong
  0 siblings, 1 reply; 5+ results
From: Eric Wong @ 2022-03-23  8:54 UTC (permalink / raw)
  To: meta

Most C compilers are bandwidth and storage hogs; while binary
distribution makes it harder for ordinary users to exercise
software freedom.  So no great options here, but relying on
the stable Linux ABI is probably the easiest for the majority
of our users (currently on x86-64 and x86 Linux).

Eric Wong (3):
  syscall: drop unused EEXIST import
  recv_cmd: do not undef recvmsg buffer arg on errors
  syscall: implement sendmsg+recvmsg in pure Perl

 devel/syscall-list         |  2 +
 lib/PublicInbox/CmdIPC4.pm |  4 +-
 lib/PublicInbox/Syscall.pm | 97 +++++++++++++++++++++++++++++++++++++-
 script/lei                 |  6 ++-
 t/cmd_ipc.t                | 13 ++++-
 5 files changed, 117 insertions(+), 5 deletions(-)


^ permalink raw reply	[relevance 7%]

Results 1-5 of 5 | reverse | options above
-- pct% links below jump to the message on this page, permalinks otherwise --
2022-03-23  8:54  7% [PATCH 0/3] support sendmsg+recvmsg in pure Perl under Linux Eric Wong
2022-03-23  8:54  5% ` [PATCH 3/3] syscall: implement sendmsg+recvmsg in pure Perl Eric Wong
2023-08-30  5:10     [PATCH 0/7] various build fixes + OpenBSD compat Eric Wong
2023-08-30 12:34     ` [PATCH 0/7] various build fixes + OpenBSD compat, [PATCH 7/7] xap_helper.h: fix double-free on OpenBSD hdestroy Štěpán Němec
2023-08-30 21:18       ` Eric Wong
2023-08-31  9:11         ` Štěpán Němec
2023-08-31 17:26           ` Štěpán Němec
2023-09-01 11:09             ` Eric Wong
2023-09-02 10:54  6%           ` Štěpán Němec
2023-09-02 11:07  6%             ` [PATCH v2] Clarify Inline::C dependency (optional on Linux, required elsewhere) Štěpán Němec
2023-09-02 18:50                   ` Eric Wong
2023-09-02 19:08                     ` Štěpán Němec
2023-09-02 19:44                       ` Eric Wong
2023-09-02 20:45  5%                     ` Štěpán Němec

Code repositories for project(s) associated with this public inbox

	https://80x24.org/public-inbox.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).