Erro ao abrir conexão PostgreSQL - Foi fornecido um argumento inválido

Problema

Foi observada a ocorrência do erro “Foi fornecido um argumento inválido” no momento de abrir conexões em algumas instâncias da plataforma. O erro ocorre esporadicamente, e fica registrado nos arquivos de log da seguinte maneira:

LATROMI.Common.Exceptions.DbConnectionException: Exception while connecting ---> Npgsql.NpgsqlException: Exception while connecting ---> System.Net.Sockets.SocketException: Foi fornecido um argumento inválido
       em System.Net.Sockets.Socket.SetSocketOption(SocketOptionLevel optionLevel, SocketOptionName optionName, Int32 optionValue, Boolean silent)
       em System.Net.Sockets.Socket.SetSocketOption(SocketOptionLevel optionLevel, SocketOptionName optionName, Int32 optionValue)
       em Npgsql.NpgsqlConnector.SetSocketOptions(Socket socket)
       em Npgsql.NpgsqlConnector.Connect(NpgsqlTimeout timeout)
       --- Fim do rastreamento de pilha de exceções internas ---
       em Npgsql.NpgsqlConnector.Connect(NpgsqlTimeout timeout)
       em Npgsql.NpgsqlConnector.<RawOpen>d__152.MoveNext()
    --- Fim do rastreamento de pilha do local anterior onde a exceção foi gerada ---
       em System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
       em System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
       em Npgsql.NpgsqlConnector.<Open>d__148.MoveNext()
    --- Fim do rastreamento de pilha do local anterior onde a exceção foi gerada ---
       em System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
       em System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
       em Npgsql.NpgsqlConnection.<>c__DisplayClass32_0.<<Open>g__OpenLong|0>d.MoveNext()
    --- Fim do rastreamento de pilha do local anterior onde a exceção foi gerada ---
       em System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
       em System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
       em Npgsql.NpgsqlConnection.Open()
       em LATROMI.Common.DAL.DataProvider.OpenConnection(ConnectionContext connectionContext)
       --- Fim do rastreamento de pilha de exceções internas ---
       em LATROMI.Common.DAL.DataProvider.OpenConnection(ConnectionContext connectionContext)
       em LATROMI.Common.DAL.DataProvider.CreateCommand(ConnectionContext connectionContext, String sqlCommand, Nullable`1 commandTimeout)
       em LATROMI.Common.DAL.BaseDALFactory`2.SelectOneByQuery(String sqlCommand, TEnumColumns[] columns)
       em LATROMI.BLL.Menu.SelectByFriendlyName(String friendlyName)
       em LATROMI.Web.UI.HttpModules.FriendlyUrlTransformer.Transform(Uri sourceUrl, Uri& outputUrl)
       em LATROMI.Web.UI.HttpModules.UrlRewriterModule.TryRewriteUrl(Uri sourceUrl, Uri& newUrl)
       em LATROMI.Web.UI.HttpModules.UrlRewriterModule.OnBeginRequest(Object sender, EventArgs e)
       em System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
       em System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step)
       em System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

A mensagem de erro também pode ser registrada em inglês:

System.Net.Sockets.SocketException: Invalid argument was supplied

Causa

Este problema é monitorado à anos pelos desenvolvedores do Npgsql (conector de dados .NET oficial do PostgreSQL), e até agora não foi encontrada a causa exata do problema. Conforme a avaliação deles, pode ser a interferência de um agente externo fechando a conexão, como firewall por exemplo.

Solução

Pendente