Search code examples
rubysocketstcpdeadlockpostfix-mta

Ruby 2.3 TCP Server Daemon for Postfix SMTP Access Policy Delegation


I'm get stuck to write a tcp server daemon in Ruby 2.3. The issue is, that my connection is not going further, when postfix is communicating with the ruby tcp server. If i do connect to the ruby tcp server by telnet, everything works fine. My code is as follows:

require 'socket'
require_relative 'postfix_delegation_object'

class Server

  attr_reader :binding, :port

  def initialize(binding: '127.0.0.1', port: '1988')
    puts "Starting server now!"
    puts "Listening on tcp://#{binding}:#{port}"
    socket = TCPServer.new(binding, port)

    while client = socket.accept
      Thread.new { handle_connection(client) }
    end
  end

  def handle_connection(client)
    hash_values = {}
    puts "New client! #{client}"

    while line = client.gets
    if line.include? "="
      key, val = line.split('=')
      hash_values[key] = val.to_s.strip
    else
      pdo = PostfixDelegationObject.new(hash_values)
      client.write("action=dunno")
    end
  end

 end

end

Solution

  • I could solve it by my own. I just had to enter twice '\n'

    like this:

     client.write("action=dunno\n\n")
    

    This one would not work:

    client.write("action=dunno")
    client.write("\n\n")