2009-12-11 5 views
1

Supposons que vous avez 2 sockets (chacun sera écouté par d'autres pairs TCP) résident chacun sur le même processus, comment ces sockets pourraient être liés, ce qui signifie que le flux d'entrée de l'autre sera lié au flux de sortie d'autres . Les prises porteront continuellement des données, aucune attente ne se produira. Normalement, le thread peut résoudre ce problème mais, plutôt que de créer des threads, y a-t-il un moyen plus efficace de raccorder les sockets?TCP Socket Piping

Répondre

1

Si vous devez connecter les deux extrémités du socket au même processus, utilisez plutôt la fonction pipe(). Cette fonction renvoie deux descripteurs de fichiers, l'un utilisé pour l'écriture et l'autre pour la lecture. Il n'y a pas vraiment besoin d'impliquer TCP à cette fin.

Mise à jour: En fonction de votre clarification de votre cas d'utilisation, non, il n'y a aucun moyen de dire au système d'exploitation de connecter les extrémités de deux prises différentes ensemble. Vous devrez écrire du code pour lire à partir d'une socket et écrire les mêmes données à l'autre. En fonction de l'architecture de votre processus, vous pouvez ou non avoir besoin d'un thread supplémentaire pour effectuer ce travail. Par exemple, si votre application est basée sur une boucle select(), la création d'un autre thread n'est pas nécessaire.

+0

En fait, ces prises seront écoutées par les clients, donc il doit y avoir des sockets – whoi

+0

Il semble que j'ai mal compris votre cas d'utilisation. Je vais mettre à jour ma réponse. –

+0

Etes-vous en train de dire socket select() fonction, pouvez-vous faire une clarification? – whoi

0

Vous pouvez éviter les threads avec une file d'attente d'événements dans le processus. L'article WP Message queue suppose que vous voulez que les messages interprocess passent, mais si vous utilisez des sockets, vous effectuez un certain nombre de messages interprocessus passant par le même processus.

Questions connexes