Carrot
view release on metacpan or search on metacpan
lib/Carrot/Continuity/Coordination/Episode/Paragraph/FDx2_IO.pm view on Meta::CPAN
# //parameters
# //returns
{
my ($this) = @ARGUMENTS;
return if ($this->[ATR_OBUF_STATE] == BST_CLOSED); # no point
if (length($this->[ATR_OBUF]) == 0) { # $n == 0 indicates eof
$this->[ATR_TARGET_OUT]->fd_ignore_write;
$this->[ATR_PROTOCOL]->evt_fdx2_io_pending_output(IS_FALSE);
return;
}
WRITE: {
my $n = syswrite(
$this->[ATR_FD_OUT],
$this->[ATR_OBUF],
$syswrite_size);
unless (defined($n))
{
#FIXME: log $OS_ERROR
return if ($this->is_temporary_error());
$this->destructor;
return;
};
if ($n == 0) { # eof
$this->destructor;
return;
}
substr($this->[ATR_OBUF], 0, $n, '');
}
if (length($this->[ATR_OBUF]) == 0)
{
$this->[ATR_TARGET_OUT]->fd_ignore_write;
$this->[ATR_OBUF_STATE] = BST_IDLE;
$this->[ATR_PROTOCOL]->evt_fdx2_io_pending_output(IS_FALSE);
}
return;
}
sub is_temporary_error
# /type method
# /effect ""
# //parameters
# //returns
# ::Personality::Abstract::Boolean
{
if (($OS_ERROR == EAGAIN)
or ($OS_ERROR == EINTR)
or ($OS_ERROR == EINPROGRESS)
or ($OS_ERROR == ENOMEM)) {
return(IS_TRUE);
}
return(IS_FALSE);
}
sub is_alive
# /type method
# /effect ""
# //parameters
# //returns
# ::Personality::Abstract::Boolean
{
return(IS_TRUE);
} # FIXME
sub attribute_destruction
# /type method
# /effect "Destructs the attributes of an instance (breaks circular references)"
# //parameters
# //returns
{
my ($this) = @ARGUMENTS;
$this->[ATR_TARGET_IN]->deactivate;
$this->[ATR_TARGET_OUT]->deactivate;
# my $fd = fileno($this->[ATR_SOCKET]);
# POSIX::close($fd) || warn("FD$fd: close: $OS_ERROR");
$this->[ATR_PROTOCOL]->evt_fdx2_io_drop;
return;
}
sub set_bst_in_closed
# /type method
# /effect ""
# //parameters
# //returns
{
$_[THIS][ATR_IBUF_STATE] = BST_CLOSED;
$_[THIS][ATR_TARGET_IN]->fd_ignore_read;
return;
}
sub set_bst_out_closed
# /type method
# /effect ""
# //parameters
# //returns
{
$_[THIS][ATR_OBUF_STATE] = BST_CLOSED;
$_[THIS][ATR_TARGET_OUT]->fd_ignore_write;
return;
}
sub DESTROY
# /type method
# /effect ""
# //parameters
# //returns
{
foreach my $attribute (ATR_TARGET_IN, ATR_TARGET_OUT)
{
if (defined($_[THIS][$attribute]))
( run in 1.250 second using v1.01-cache-2.11-cpan-e93a5daba3e )