---
name: "tftpd"
section: "8"
platform: "openbsd"
package: "man"
version: "8.0-current-20261101"
release: "OpenBSD 8.0-current (2026-11-01)"
platforms: ["linux", "freebsd", "openbsd", "macos"]
url: "https://new.carta.tech/tftpd"
---

# tftpd(8)

Trivial File Transfer Protocol daemon

## NAME

**tftpd** – Trivial File Transfer Protocol daemon

## SYNOPSIS

**tftpd** \[**-46cdivw**\] \[**-l** *address*\] \[**-p** *port*\] \[**-r** *socket*\] *directory*

## DESCRIPTION

**tftpd** serves *directory* contents via the Trivial File Transfer Protocol.

The use of [tftp(1)](/tftp/1.md) does not require an account or password on the remote system. Due to the lack of authentication information, **tftpd** will allow only publicly readable files to be accessed. By default files may only be read, unless the **-w** option is specified. Files may be written only if they already exist and are publicly writable, unless the **-c** flag is specified. Note that this extends the concept of “public” to include all users on all hosts that can be reached through the network; this may not be appropriate on all systems, and its implications should be considered before enabling TFTP service. **tftpd** always provides random data at the path */etc/random.seed*, and therefore this path will be ignored inside the *directory*. OpenBSD network bootloaders access this path to harvest entropy during kernel load.

**tftpd** needs to start as root, then calls [chroot(2)](/chroot/2.md) into *directory*, and drops privileges to the “\_tftpd” user.

The options are as follows:

- **-4**

  Forces **tftpd** to use IPv4 addresses only.

- **-6**

  Forces **tftpd** to use IPv6 addresses only.

- **-c**

  Allow new files to be created; otherwise uploaded files must already exist. Files are created with default permissions allowing anyone to read or write to them.

  This option implies **-w**.

- **-d**

  Do not daemonize. If this option is specified, **tftpd** will run in the foreground and log to stderr instead of [syslog(3)](/syslog/3.md). This implies **-v**.

- **-i**

  Look up the requested path in the subdirectory named after the client's IP address. For read requests, if the file is not found, **tftpd** falls back on the requested path. Note that no attempt is made to limit the client to its subdirectory. This option cannot be combined with **-r**.

- **-l** *address*

  Listen on the specified address. By default **tftpd** listens on wildcard addresses.

- **-p** *port*

  Listen on the specified port. By default **tftpd** listens on the port indicated in the ‘tftp’ service description; see [services(5)](/services/5.md).

- **-r** *socket*

  Issue filename rewrite requests to the specified UNIX domain socket. **tftpd** will write lines in the format "IP OP filename", terminated by a newline, where IP is the client's IP address, and OP is one of "read" or "write". **tftpd** expects replies in the format "filename" terminated by a newline. All rewrite requests from the daemon must be answered (even if it is with the original filename) before the TFTP request will continue. By default **tftpd** does not use filename rewriting. This option cannot be combined with **-i**.

- **-v**

  Log the client IP, type of request, and filename.

- **-w**

  Allow files to be written to.

## SEE ALSO

[tftp(1)](/tftp/1.md), [chroot(2)](/chroot/2.md), [pxeboot(8)](/pxeboot/8.md), [syslogd(8)](/syslogd/8.md), [tftp-proxy(8)](/tftp-proxy/8.md)

## STANDARDS

K. Sollins, *The TFTP Protocol (Revision 2)*, RFC 1350, July 1992.

G. Malkin and A. Harkin, *TFTP Option Extension*, RFC 2347, May 1998.

G. Malkin and A. Harkin, *TFTP Blocksize Option*, RFC 2348, May 1998.

G. Malkin and A. Harkin, *TFTP Timeout Interval and Transfer Size Options*, RFC 2349, March 1998.

## HISTORY

The **tftpd** command was originally a process run via [inetd(8)](/inetd/8.md) and appeared in 4.2BSD. It was rewritten for OpenBSD 5.2 as a persistent non-blocking daemon.

## BUGS

Many TFTP clients will not transfer files over 16744448 octets (32767 blocks).
