2009-05-12 11 views
1

J'ai une application Java qui utilise un composant COM tiers via un pont Java-COM. Ce composant COM ouvre une connexion socket à un hôte distant.Configuration du délai d'expiration du socket TCP

Cet hôte peut prendre un certain temps à répondre, et je me méfie que je reçois un délai d'attente. Je ne suis pas sûr parce que, comme je l'ai dit, il s'agit d'une composante tierce fermée.

L'API de ce composant n'expose pas la connexion socket à moi, donc je n'ai aucun moyen de configurer le délai d'expiration. Je me demande donc s'il y a moyen de modifier le délai par défaut du système. J'utilise Windows Server 2008 Édition Entreprise x64.

Répondre

1

Voulez-vous créer votre application pour qu'elle sache au moment de l'exécution si un dépassement de délai s'est produit ou voulez-vous inspecter le comportement du composant COM à code source fermé? Si c'est le dernier, installez Wireshark sur votre boîte de dev et regardez la connexion. Si c'est le premier, voulez-vous vous assurer que votre appel Java vers la terre natale ne soit pas suspendu pour toujours? Si c'est le cas, jetez un coup d'œil au service de l'exécuteur java.util.concurrent: il existe un moyen d'appeler une méthode dans un autre thread et d'attendre au maximum N secondes avant de renvoyer le contrôle à votre thread.

0

Vous pouvez introduire votre propre SocketImplFactory (Voir la méthode statique setSocketImpl() de la classe java.net.Socket). Vous pouvez ensuite créer des objets SocketImpl avec votre propre valeur du paramètre SO_TIMEOUT.

+0

Le socket n'est pas créée par le code java, mais par un objet COM, en C++ I deviner. – tuler

+0

Ah, oui. Tu as raison. Eh bien, je me demande si quelque chose de similaire n'est pas possible aussi avec les bibliothèques Windows natives. – Matej

0

Les paramètres de registre décrits dans "Paramètres de configuration TCP/IP de Windows Vista" de Microsoft pour TcpMaxDataRetransmissions peuvent vous permettre de définir les délais d'attente globaux dont vous avez besoin.

Vous devrez, bien sûr, faire attention de ne pas paralyser le reste du serveur dans le processus avec des réponses différées aux erreurs réelles.

Questions connexes