J'ai affaire à un serveur buggé qui échoue parfois à accepter les connexions (mais laisse son socket d'écoute ouvert). C'est sur Linux avec des sockets de domaine Unix. Actuellement, la seule façon de détecter cela est qu'après l'envoi d'un tas de données, le tampon se remplit et bloque, et le serveur n'envoie aucune réponse. Ce mode de défaillance long-après-coup est difficile à distinguer des autres bogues - le serveur pourrait ne pas répondre pour d'autres raisons.Un client peut-il déterminer si le serveur a accepté() 'd un socket unix?
Spécialement pour les sockets de domaine unix, il semble que le noyau devrait savoir si accept() est survenu; est-il possible de trouver cela? Est-ce que le client peut bloquer jusqu'à ce que accept() arrive d'une façon ou d'une autre, ou au moins vérifier si c'est le cas?
Ceci est juste à des fins de débogage, il peut donc être un peu moche.
Par défaut connecter bloquera jusqu'à ce que la connexion est acceptée. Je ne sais pas si je comprends votre question – nc3b
@ nc3b: Non, 'connect()' bloque jusqu'à ce que la connexion soit établie et en attente dans le backlog d'écoute. C'est ce que fait le paramètre 'backlog' de l'appel' listen() '- il définit le nombre de connexions pouvant être en attente. – caf