serveur:
VxWorks 6.3
appelle la prise habituelle, se lient, écouter, puis:tcp/ip accepter ne pas retourner, mais le client ne
for (;;)
{
client = accept(sfd,NULL,NULL);
// pass client to worker thread
}
client:
.NET 2.0
constructeur TcpClient pour se connecter au serveur qui prend la chaîne hostname et int port, comme:
Ceci fonctionne bien lorsque le s erver est compilé et exécuté dans Windows (natif C++).
Par intermittence, le constructeur de TcpClient renvoie l'instance, sans émettre d'exception, mais l'appel accepté dans vxWorks ne retourne pas avec le client fd. tcpstatShow indique qu'aucune acceptation n'a eu lieu.
Qu'est-ce qui pourrait faire que le constructeur TcpClient (qui appelle 'Connect') retourne l'instance, alors que l'appel accepté sur le serveur ne revient pas? Il semble être lié à ce que fait le système en arrière-plan - il semble plus probable que ce problème survienne lorsque le serveur est occupé à conserver des données à clignoter ou un partage NFS lorsque le client tente de se connecter, mais cela peut arriver n'est pas aussi.
J'ai essayé d'ajuster la priorité du thread en cours d'exécution accepter
J'ai regardé la taille de la file d'attente dans «écouter». Il y a assez.
Le nombre total de descripteurs de fichiers disponibles devrait être suffisant (ne l'avez pas encore validé, cependant, la première chose le matin)
Avez-vous réussi à comprendre ce qui se passait ici? – Default
Non. - J'ai une demande de support ouverte avec WindRiver (vxworks) à ce sujet. J'ai fait la trace de wireshark, et quand cela s'est produit, j'ai vu le bon SYN et SYN, ACK, donc Windows a fait la bonne chose. Cela ne s'est jamais produit sur notre cible déployée, ce qui aurait pu être un coup de chance, c'est pourquoi nous avons vécu avec ça pendant si longtemps ... la trame IP précédente était une RST, ACK sur le flux de données précédent - c'est peut-être le problème, côté vxworks ... les ports étaient> 1000 – paquetp
Lorsque vous utilisez un constructeur sans paramètre, puis appelez Connect (addr, port). Est-ce que ça marche? – Kugel