Je suis actuellement au milieu d'un projet impliquant des sockets et j'utilise simplement le fichier SYS / Socket.H de Linux. Cue le port pour Microsoft et réalisant que Winsock est différent. Je suppose que j'ai deux questions. P>
Premièrement, quelles sont les principales différences entre les deux implémentations? Y a-t-il un moyen facile de "traduire" eux? Un lien vers un guide serait grandement apprécié, car vous pouvez probablement me procurer des liens de qualité supérieure à ceux de Google. P>
Deuxièmement, pourquoi Microsoft a-t-il fait cela? Quelle était leur motivation? Pourquoi n'ont-ils pas simplement conserver la même mise en œuvre que tout le monde? P>
4 Réponses :
Pardonne-moi si j'ai manqué le point, mais regardez-vous WSARECV et sa famille, et pensant que l'API de la touche entière sur Windows est différente de l'API de Berkeley Sockets? P>
L'API Berkeley existe sur Windows (voir Recv < / a> et la famille) et est largement compatible avec toute autre mise en œuvre des sockets Berkeley. P>
Voir l'article de MSDN "Applications de support de portage sur WINSOCK" pour plus d'informations sur le code de portage des sockets à Windows. p>
Oh non, je ne pensais pas que toute l'API était différente. Sinon, comment les ordinateurs Windows communiquent-ils avec * NIX Ordinateurs? Mais je me demandais simplement pourquoi la syntaxe était différente.
@Andrew: "Vous demandez pourquoi la syntaxe était différente": Mon point est que la syntaxe n'est pas i> différente - la même API de Berkeley Sockets que vous utilisez sur Linux est également disponible sous Windows. Ou parlons-nous à des fins croisées? Avez-vous un exemple de la façon dont la syntaxe diffère?
Essayez d'utiliser ACE - C'est une grande bibliothèque de communications multiples plate-forme. . p>
MILEN l'a dit dans un commentaire, mais le Apache Portable Runtime Bibliothèque couvre bon nombre des problèmes de portabilité pour Application en réseau. P>
Le FAQ de programmeur Winsock a une section sur cette section, Sockets BSD Compatibilité . (Divulgation: Je suis le responsable de la FAQ.) P>
Je n'ai pas vraiment couvrant les Whays et les montants dans cet article, donc: p>
winsock.h vs sys / socket.h, arpa / inet.h, neinet / in.h, etc. strong>: cela je trouve réellement une amélioration. C'est tout un jeu de fonctionnalités serré, alors pourquoi ne pas avoir toutes les définitions de celui-ci dans une seule tête? P> Li>
errno vs wsagetlasterror () strong>: errno fait partie de la norme C, mais les valeurs d'erreur sont jusqu'à la mise en œuvre C. Gardez à l'esprit que Winsock au début n'était pas une chose spécifique à Microsoft. DOS et Windows n'ont pas démarré avec des API réseau standard. Cela a été fourni par des tiers, qui se sont tous réunis et ont inventé Winsock, avec Microsoft impliquée. Les piles de Winsock initiales étaient toutes tierces. Ils ne pouvaient pas écrire la spécification pour écraser la valeur errno de C RTL, pour plusieurs raisons. Ces valeurs d'erreur appartenaient au fournisseur fourni winsock.dll, tout un monde différent du C RTL. P> LI>
Une façon de "traduire" UN * x à Windows - Apr.apache.org/ Docs / Apr / 1.3 / Group__apr__network__io.html