---
name: "HTTP::Daemon::SSL"
section: "3pm"
platform: "linux"
package: "perl-http-daemon-ssl"
version: "1.04-3"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/HTTP::Daemon::SSL"
---

# HTTP::Daemon::SSL(3pm)

a simple http server class with SSL support

## NAME

HTTP::Daemon::SSL - a simple http server class with SSL support

## SYNOPSIS

```
  use HTTP::Daemon::SSL;
  use HTTP::Status;
  # Make sure you have a certs/ directory with "server-cert.pem"
  # and "server-key.pem" in it before running this!
  my $d = HTTP::Daemon::SSL->new || die;
  print "Please contact me at: <URL:", $d->url, ">\n";
  while (my $c = $d->accept) {
      while (my $r = $c->get_request) {
          if ($r->method eq 'GET' and $r->url->path eq "/xyzzy") {
              # remember, this is *not* recommened practice :-)
              $c->send_file_response("/etc/passwd");
          } else {
              $c->send_error(RC_FORBIDDEN)
          }
      }
      $c->close;
      undef($c);
  }
```

## DESCRIPTION

Instances of the *HTTP::Daemon::SSL* class are HTTP/1.1 servers that listen on a socket for incoming requests. The *HTTP::Daemon::SSL* is a sub-class of *IO::Socket::SSL*, so you can perform socket operations directly on it too.

The **accept()** method will return when a connection from a client is available.  In a scalar context the returned value will be a reference to a object of the *HTTP::Daemon::ClientConn::SSL* class which is another *IO::Socket::SSL* subclass.  In a list context a two-element array is returned containing the new *HTTP::Daemon::ClientConn::SSL* reference and the peer address; the list will be empty upon failure. (Note that version\
  1\.02 erroneously did not honour list context). Calling the **get\_request()** method on the *HTTP::Daemon::ClientConn::SSL* object will read data from the client and return an *HTTP::Request* object reference.

This HTTPS daemon does not [**fork**(2)](/fork/2.md) for you.  Your application, i.e. the user of the *HTTP::Daemon::SSL* is reponsible for forking if that is desirable.  Also note that the user is responsible for generating responses that conform to the HTTP/1.1 protocol.  The *HTTP::Daemon::ClientConn* class provides some methods that make this easier.

## METHODS

The following methods are the only differences from the *HTTP::Daemon* base class:

- $d = new HTTP::Daemon::SSL

  The constructor takes the same parameters as the *IO::Socket::SSL* constructor.  It can also be called without specifying any parameters, but you will have to make sure that you have an SSL certificate and key for the server in *certs/server-cert.pem* and *certs/server-key.pem*. See the IO::Socket::SSL documentation for how to change these default locations and specify many other aspects of SSL behavior. The daemon will then set up a listen queue of 5 connections and allocate some random port number.  A server that wants to bind to some specific address on the standard HTTPS port will be constructed like this:

  ```
    $d = new HTTP::Daemon::SSL
          LocalAddr => 'www.someplace.com',
          LocalPort => 443;
  ```

## SEE ALSO

RFC 2068

IO::Socket::SSL, HTTP::Daemon, Apache

## COPYRIGHT

Code and documentation from HTTP::Daemon Copyright 1996-2001, Gisle Aas Changes Copyright 2003-2004, Peter Behroozi

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

## POD ERRORS

Hey! **The above document had some coding errors, which are explained below:**

- Around line 164:

  You forgot a '=back' before '=head1'
