- my $n = $send_cmd->($s1, $fds, $buf, MSG_EOR);
- return if defined($n); # likely
- croak "sendmsg: $! (check RLIMIT_NOFILE)" if $!{ETOOMANYREFS};
- croak "sendmsg: $!" if !$!{EMSGSIZE};
- socketpair(my $r, my $w, AF_UNIX, SOCK_STREAM, 0) or
- croak "socketpair: $!";
- $n = $send_cmd->($s1, [ fileno($r) ],
- ipc_freeze(['do_sock_stream', length($buf)]),
- MSG_EOR) // croak "sendmsg: $!";
- undef $r;
- $n = $send_cmd->($w, $fds, $buf, 0) // croak "sendmsg: $!";
- while ($n < length($buf)) {
- my $x = syswrite($w, $buf, length($buf) - $n, $n) //
- croak "syswrite: $!";
- croak "syswrite wrote 0 bytes" if $x == 0;
- $n += $x;
+ if (length($buf) > $MY_MAX_ARG_STRLEN) {
+ stream_in_full($s1, $fds, $buf);
+ } else {
+ my $n = $send_cmd->($s1, $fds, $buf, MSG_EOR);
+ return if defined($n); # likely
+ $!{ETOOMANYREFS} and
+ croak "sendmsg: $! (check RLIMIT_NOFILE)";
+ $!{EMSGSIZE} ? stream_in_full($s1, $fds, $buf) :
+ croak("sendmsg: $!");