# Method Stdio.sendfile()

Method sendfile

  `object sendfile(array(string) headers, File from, int offset, int len, array(string) trailers, File to)`
  `object sendfile(array(string) headers, File from, int offset, int len, array(string) trailers, File to, function(int, mixed ... :void) callback, mixed ... args)`

Description

  Sends headers followed by len bytes starting at offset from the file from followed by trailers to the file to. When completed callback will be called with the total number of bytes sent as the first argument, followed by args.

  Any of headers, from and trailers may be left out by setting them to `0`.

  Setting offset to `-1` means send from the current position in from.

  Setting len to `-1` means send until from's end of file is reached.

Note

  The sending is performed asynchronously, and may complete both before and after the function returns.

  For callback to be called, the backend must be active (ie main() must have returned `-1`, or Pike.DefaultBackend get called in some other way).

  In some cases, the backend must also be active for any sending to be performed at all.

  In Pike 7.4.496, Pike 7.6.120 and Pike 7.7 and later the backend associated with to will be used rather than the default backend. Note that you usually will want from to have the same backend as to.

Note

  The low-level sending may be performed with blocking I/O calls, and thus trigger the process being killed with `SIGPIPE` when the peer closes the other end. Add a call to signal() to avoid this.

Bugs

  FIXME: Support for timeouts?

See also

  Stdio.File->set_nonblocking()