Dear Bill,

Thanks very much for helping.

> On Aug 19, 2016, at 4:17 AM, Bill Cole 
> <postfixlists-070...@billmail.scconsult.com> wrote:
> 
>> What do you mean "run" the policy service? It's a python program.
> 
> Which must be running in order for it to be listening for connections.
> Likely mechanisms would be via a SysV init script in /etc/init.d/ or via a 
> systemd service definition.

On some old Linux distributions, it's run with a SysV init script, but on 
CentOS 7 and Ubuntu 16.04, it's run via systemd.

> If your policy server is listening on 127.0.0.1:1234, you could try this:
> 
> for x in {1..100} ; do nc 127.0.0.1 1234 & done
> 
> That attempts to make 100 TCP connections to 127.0.0.1:1234 with 100 
> different 'nc' processes, all running in the background.
> 
> If your policy server is accepting the connections, running the "jobs" 
> command after all of those background processes have launched should show 
> them all in "Stopped(SIGTTIN)" state, meaning that they are connected and 
> waiting for input.

I did this test with shell:

for i in $(seq 200); do
    nc 127.0.0.1 1234 &
done

'jobs' commands show 200 "Stopped" jobs.

> If all 100 processes connect in a reasonable time, the next step would be to 
> do the same test, but with input piped into all of the nc commands simulating 
> what Postfix sends to a policy server.

I tested with shell commands below:

for i in $(seq 1000); do
    (cat <<EOF
request=smtpd_access_policy
protocol_state=RCPT
... [omit other attr=value here] ...
ccert_pubkey_fingerprint=

EOF
) | nc 127.0.0.1 7777 &
done

I get some "Ncat: Connection reset by peer." and "Ncat: Connection timed out." 
errors.

Does it mean that my policy server design (programming) is improper? Or, just 
slow performance?

Reply via email to