Net::Server sockets are not opened, why ?

Wladimir Mutel mwg at mwg.dp.ua
Tue Nov 13 21:40:17 CET 2018


	Dear all,

	I am using amavisd-new 2.11.0 as shipped with Ubuntu 18.04, with added 
configuration changes from https://www.iredmail.org/
	After recent reboot of my system, I noticed that postfix 
3.3.0-1ubuntu0.1 is unable to contact queue filter at localhost:10024 , 
and lsof -n does not show any process listening on this port. I set 
$log_level = 4; in /etc/amavis/conf.d/50-user and I see this in the log 
(after amavis service restart):

лис 13 22:13:41 smart amavis[10833]: Net::Server: Accept failed with 28 
tries left: Invalid argument
...
лис 13 22:14:08 smart amavis[10833]: Net::Server: Accept failed with 1 
tries left: Invalid argument
лис 13 22:14:09 smart amavis[10833]: Net::Server: Accept failed with 0 
tries left: Invalid argument
лис 13 22:14:10 smart amavis[10833]: Net::Server: Ran out of accept retries!

	Overall it looks like sockets are created but not put into 'listen'ing 
state, so 'accept' calls on them fail.
	I tried to follow the logic of socket initialization in amavisd-new and 
Net/Server.pm sources but I could not reach any definite conclusion so 
far. I suspect there could be some accidental changes in combination of 
bind address and listen socket numbers but I am not sure I got to the 
proper places in Net/Server* sources.

	So I would ask someone competent who encountered this behavior, how 
should I fix that ?

	iRedMail sets $inet_socket_port = [10024, 10026, 9998]; in 
/etc/amavis/conf.d/50-user
	I have ipv4 & ipv6 (6to4) enabled on my server which could impact bind 
address selection.
	@listen_sockets array is clearly non-empty
	And then, Amavis->new is constructed, as a derived class from 
Net::Server, and passes it 'port'=>\@listen_sockets and 
'host'=>$bind_to[0] parameters, and after that I could not trace it any 
deeper. I see this in the logs :

лис 13 17:03:08 smart amavis[5825]: will bind to 
/var/lib/amavis/amavisd.sock|unix, 127.0.0.1:10024/tcp, 
127.0.0.1:10026/tcp, 127.0.0.1:9998/tcp
лис 13 17:03:08 smart amavis[5834]: sd_notify (no socket): 
MAINPID=5834\nSTATUS=Daemonized, preparing to bind sockets.
лис 13 17:03:08 smart amavis[5834]: Net::Server: Binding to UNIX socket 
file "/var/lib/amavis/amavisd.sock"
лис 13 17:03:08 smart amavis[5834]: Net::Server: Binding to TCP port 
10024 on host 127.0.0.1 with IPv4
лис 13 17:03:08 smart amavis[5834]: Net::Server: Binding to TCP port 
10026 on host 127.0.0.1 with IPv4
лис 13 17:03:08 smart amavis[5834]: Net::Server: Binding to TCP port 
9998 on host 127.0.0.1 with IPv4

	But how can I be sure that 'listen' return code is properly checked in 
Perl sources ? and that 'listen' call is not bypassed due to some 
accidental condition ?

	Thank you in advance for your responses. I can provide you 'sudo' 
access on my host and the right to change any related configs and to 
restart any needed services or the whole system.



More information about the amavis-users mailing list