---
name: "PerlIO::via::Timeout"
section: "3pm"
platform: "linux"
package: "libperlio-via-timeout-perl"
version: "0.32-3"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/PerlIO::via::Timeout"
---

# PerlIO::via::Timeout(3pm)

a PerlIO layer that adds read & write timeout to a handle

## NAME

PerlIO::via::Timeout - a PerlIO layer that adds read & write timeout to a handle

## VERSION

version 0.32

## SYNOPSIS

```
  use Errno qw(ETIMEDOUT);
  use PerlIO::via::Timeout qw(:all);
  open my $fh, '<:via(Timeout)', 'foo.html';
  # set the timeout layer to be 0.5 second read timeout
  read_timeout($fh, 0.5);
  my $line = <$fh>;
  if ($line == undef && 0+$! == ETIMEDOUT) {
    # timed out
    ...
  }
```

## DESCRIPTION

This package implements a PerlIO layer, that adds read / write timeout. This can be useful to avoid blocking while accessing a handle (file, socket, ...), and fail after some time.

The timeout is implemented by using `"<select"`\> on the handle before reading/writing.

**WARNING** the handle won't timeout if you use `"sysread"` or `"syswrite"` on it, because these functions works at a lower level. However if you're trying to implement a timeout for a socket, see IO::Socket::Timeout that implements exactly that.

## FUNCTIONS

### read\_timeout

```
  # set a read timeout of 2.5 seconds
  read_timeout($fh, 2.5);
  # get the current read timeout
  my $secs = read_timeout($fh);
```

Getter / setter of the read timeout value.

### write\_timeout

```
  # set a write timeout of 2.5 seconds
  write_timeout($fh, 2.5);
  # get the current write timeout
  my $secs = write_timeout($fh);
```

Getter / setter of the write timeout value.

### enable\_timeout

```
  enable_timeout($fh);
```

Equivalent to setting timeout\_enabled to 1

### disable\_timeout

```
  disable_timeout($fh);
```

Equivalent to setting timeout\_enabled to 0

### timeout\_enabled

```
  # disable timeout
  timeout_enabled($fh, 0);
  # enable timeout
  timeout_enabled($fh, 1);
  # get the current status
  my $is_enabled = timeout_enabled($fh);
```

Getter / setter of the timeout enabled flag.

### has\_timeout\_layer

```
  if (has_timeout_layer($fh)) {
    # set a write timeout of 2.5 seconds
    write_timeout($fh, 2.5);
  }
```

Returns whether the given filehandle is managed by PerlIO::via::Timeout.

## SEE ALSO

- PerlIO::via

  ## THANKS TO

- Vincent Pit

  - Christian Hansen

  - Leon Timmmermans

  ## AUTHOR

Damien "dams" Krotkine

## COPYRIGHT AND LICENSE

This software is copyright (c) 2013 by Damien "dams" Krotkine.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
