Even though my logs show that 1 send-call usually suffices (I have a site with 1 visitor/3 min), I've updated my script.
Not sure if returning DECLINED is a good idea. And if you know a way to log into access_log instead of error_log, please tell me. Thank you Alex package SocketPolicy; use strict; use warnings FATAL => 'all'; use Apache2::Connection(); use APR::Socket(); use Apache2::ServerRec(); use Apache2::Const(-compile => 'OK'); use APR::Const(-compile => 'SO_NONBLOCK'); use constant POLICY => qq{<?xml version="1.0"?> <!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd"> <cross-domain-policy> <allow-access-from domain="*" to-ports="8080"/> </cross-domain-policy> \0}; sub handler { my $c = shift; my $sock = $c->client_socket; my $offset = 0; # set the socket to the blocking mode $sock->opt_set(APR::Const::SO_NONBLOCK => 0); do { my $nbytes = $sock->send(substr(POLICY, $offset), length(POLICY) - $offset); # client connection closed or interrupted return Apache2::Const::DECLINED unless $nbytes; $offset += $nbytes; } while ($offset < length(POLICY)); my $slog = $c->base_server()->log(); $slog->warn('served socket policy to: ', $c->remote_ip()); return Apache2::Const::OK; } 1;