2009-06-24 3 views
2

Supposons que j'ai un socket. Quelle est la différence entre ces deux lignes de code?Lors de la lecture d'un socket en python, y a-t-il une différence entre os.read et socket.recv?

ligne 1:

os.read(some_socket.fileno(), 1024) 

ligne 2:

some_socket.recv(1024) 

... autre que le fait que le premier ne fonctionne pas sous Windows. En d'autres termes, puis-je substituer la deuxième ligne pour la première? J'ai une base de code qui n'a pas vraiment été testée avec Windows, et cela cause des problèmes.

Répondre

6

La ligne 1 utilise le descripteur de fichier soulignant pour lire le socket, elle dépend donc de la plate-forme. Utilisez la ligne 2, car c'est un moyen portable, multi-plateforme d'accomplir la même chose.

Obligatoire: Si vous faites quelque chose de sérieux, il est préférable d'éviter de devoir manipuler des prises de faible niveau. Ils sont difficiles à obtenir, il peut sembler que les choses fonctionnent, mais il y a beaucoup de détails. Ces détails sont déjà résolus dans de nombreux cadres de réseau et il n'y a aucune raison de réinventer la roue. Je suggère twisted, c'est plutôt bien.

+0

Je serais d'accord sur la partie cadre. Mais ce code fait partie d'un test pour déterminer avec quelle facilité nous pouvons gérer les connexions TCP pauvres, donc je dirais que le plus sale est le mieux. :-) –

Questions connexes