2009-07-09 8 views
1

Nous avons un processus suspendu, et le truss montre qu'il tente également de se connecter mais a échoué avec l'erreur ECONNREFUSED. La page de manuel dit ce qui suit, mais pourquoi a-t-elle été rejetée encore et encore?Comment gérer ECONNREFUSED pour se connecter?

ECONNREFUSED   The attempt to connect was force- 
         fully rejected. The calling program 
         should close(2) the socket descrip- 
         tor,  and  issue  another 
         socket(3SOCKET) call to obtain a new 
         descriptor before attempting another 
         connect() call. 

truss -p 2145

/3: lwp_park (0x00000000, 0) (couchage ...)

/2: nanosleep (0xFFFFFFFF7B5FBE60, 0xFFFFFFFF7B5FBE50) (couchage ...)

/2: nanosleep (0xFFFFFFFF7B5FBE60, 0xFFFFFFFF7B5FBE50) = 0

/2: so_socket (PF_INET, SOCK_STREAM, IPPROTO_TCP, "", SOV_DEFAULT) = 17

/2: fcntl (17, F_SETFD, 0x00000001) = 0

/2: connecter (17, 0xFFFFFFFF7B5FBF40, 16, SOV_DEFAULT) Err # 146 ECONNREFUSED

/2: close (17) = 0

/2: nanosleep (0xFFFFFFFF7B5FBE60, 0xFFFFFFFF7B5FBE50) (couchage ...)

/2: nanosleep (0xFFFFFFFF7B5FBE60, 0xFFFFFFFF7B5FBE50) = 0

/2: so_socket (PF_INET, SOCK_STREAM, IPPROTO_TCP, "", SOV_DEFAULT) = 17

/2: fcntl (17, F_SETFD, 0x00000001) = 0

/2: connecter (17, 0xFFFFFFFF7B5FBF40, 16, SOV_DEFAULT) Err # 146 ECONNREFUSED

/2: close (17) = 0

/2: nanosleep (0xFFFFFFFF7B5FBE60, 0xFFFFFFFF7B5FBE50) (couchage ...)

Répondre

0

pare-feu peut-être? Il y a beaucoup de raisons potentielles.

2

Est-ce que cela fonctionne parfois à partir de cette machine, puis commencez à échouer ou l'erreur est-elle renvoyée à chaque fois? Est-ce que cela fonctionne à partir de certaines machines et pas d'autres?

Le programme serveur a peut-être bloqué ou fermé le socket d'écoute. Essayez "netstat -af inet" sur le serveur pour vous assurer qu'il y a un socket en état LISTEN sur ce port, et pour vérifier le nombre actuel de connexions sur ce port. La commande Solaris "pfilespid" peut également être utilisée pour vérifier que le socket d'écoute est encore ouvert sur le serveur et pour vérifier le nombre actuel de connexions client. Si de nombreuses connexions sont en cours, assurez-vous que le backlog listen() est suffisant. Ajoutez l'option -vall à votre commande truss sur le client pour afficher l'adresse et le port où vous vous connectez, pour vous assurer qu'ils sont corrects. Essayez également de faire la même connexion à partir du serveur pour exclure tout problème de réseau, de pare-feu ou de NAT.

+0

En fait, ce processus est un écouteur Oracle qui est un serveur au lieu d'un client. Donc c'est bizarre car cette erreur n'arrive que sur le processus client, n'est-ce pas? – Daniel

+1

ECONNREFUSED est une erreur renvoyée par connect(), donc elle ne peut se produire que dans un client (si un client est défini comme la partie qui initie la connexion). – mark4o

+0

Merci Mark. Je comprends plus maintenant. Un écouteur d'oracle de processus sever était suspendu, donc nous avons utilisé lsnrctl stop pour arrêter l'écouteur, mais "lnsrctl stop" se bloque également, le résultat de l'opération "lsnrctl stop" a signalé l'erreur ECONNREFUSED. Dans ce cas, "lsnrctl stop" doit être un client et l'écouteur oracle est un serveur. Bien que je ne sais pas le résultat pourquoi l'erreur se produit, mais j'en sais plus. Merci encore – Daniel

Questions connexes