Distinguer « refusé » de « jamais atteint »
bound: 0 seul ne peut pas distinguer « personne n’est connecté en ce moment » de « aucun socket n’a
jamais été ouvert ». last_error est ce qui les sépare, et il s’efface au moment où un bind
réussit.
Un fournisseur ne se bind pas
host,port,usernameetpasswordsont corrects.connections.transceivers,connections.transmittersouconnections.receiversest supérieur à zéro — un fournisseur avec les trois à zéro ne bind rien et ne signale aucune erreur.- Les réglages TLS correspondent à ce que le fournisseur exige.
- Le pare-feu autorise le trafic sortant vers le fournisseur.
- Le fournisseur a mis votre IP source en liste blanche, s’il l’exige.
Le bind d’un client est rejeté
- Le credential est
type: SMPP. Un credential HTTP ne peut pas se bind, et le refus ne le dit pas. - Le client utilise les
systemIdetpasswordconfigurés. - Aucune limite de connexion n’est dépassée :
srv.maxConnections,srv.maxConnectionsPerIP,conf.maxConnectionsPerUser.default, ou la limite par utilisateur. - Si
allowedIpsest configuré, l’IP source du bind y figure.
Le listener ne s’est jamais ouvert
Différent de chaque cas ci-dessus : pas un bind rejeté, mais un socket qui n’a jamais été créé. La passerelle tourne normalement — routage, tarification, facturation et connexions fournisseurs tous en service, systemd rapporteactive — pendant qu’aucun client ne peut se connecter.
La passerelle ne quitte pas quand un listener ne peut pas prendre son port. C’est délibéré : un
port occupé ne doit pas mettre toute la passerelle hors ligne, et les listeners TLS ou proxy sont
souvent tout simplement pas configurés. Donc la preuve se trouve à trois endroits plutôt que dans le
statut de sortie.
Sur /ops/health :
La cause habituelle, ce sont deux passerelles
Soit une seconde instance configurée sur le même port, soit la même instance tournant deux fois sous deux noms d’unité — ce que produisait autrefois unupdate avec un mauvais --service-name.
1
Listez toutes les unités
systemctl list-units 'fireflo*' --all2
Comparez le PID géré à celui qui détient le port
systemctl show <unit> -p MainPID — une JVM orpheline détenant le port en est une que systemd ne
gère plus.3
Arrêtez le service, tuez l'orpheline par PID, puis relancez
Par PID, jamais par motif. D’autres JVM peuvent être sur l’hôte, et un kill par motif a déjà
supprimé des services non liés.
Voir aussi
Serveurs
Réglages des listeners et ce que chacun fait.
Fournisseurs
Connexions sortantes, TPS et mise en attente.