Bonjour,
Je suis à la recherche d'une explication sur la différence entres les fonctions WSA et leur équivalents sans le WSA
Par exemple la différence entre select et WSASelect etc...
Merci pour votre réponse
Bonjour,
Je suis à la recherche d'une explication sur la différence entres les fonctions WSA et leur équivalents sans le WSA
Par exemple la différence entre select et WSASelect etc...
Merci pour votre réponse
Je n'en suis pas sûr, mais il est possible que les premières fonctions WSA soient apparues avant que Microsoft publie des fonctions compatibles avec les sockets Berkeley.
Pour la suite, j'utilise généralement uniquement les fonctions non-WSA, sauf pour l'asynchrone: WSAEventSelect() et ses sœurs, ainsi que WSAAsyncSelect().
Donc si l'on veut faire une application portable sur unix il vaut mieux utiliser les fonctions telles que socket, select, sendto, recvfrom etc.... ou la seule modification sera un typedef int SOCKET; non?
typedef int SOCKET; et #define closesocket close, sans oublier les WSAStartup()/WSACleanup() sous Windows.
Et je dois encore en oublier, le mieux est de consulter les exemples de code d'Emmanuel Delahaye, qui a plusieurs fois posté des exemples portables.
Non, Winsock était compatible BSD depuis la version 1.0. Le véritable apport par rapport aux fonctions BSD, c'est une meilleure compatibilité avec Windows. Par exemple, send attend l'adresse d'un buffer contenant les données à envoyer et un paramètre int indiquant la taille de ce buffer. WSASend attend un pointeur vers des structures de type WSABUF. On code réellement plus vite, ou du moins plus simplement, en utilisant WSASend au lieu de send.Je n'en suis pas sûr, mais il est possible que les premières fonctions WSA soient apparues avant que Microsoft publie des fonctions compatibles avec les sockets Berkeley.
Je vois pas pourquoiIl faut initialiser une structure WSABUF, lui filer un buffer, ensuite une taille de buffer, ca fait déjà minimum 3 lignes de code, meme si aprés on a plus qu'a passer un seul paramètre au lieu de deux je trouve ça plus long à coder.On code réellement plus vite, ou du moins plus simplement, en utilisant WSASend au lieu de send
Je ne sais pas, je trouve juste que je suis plus à l'aise en utilisant WSASend/WSARecv au lieu de send/recv. Déjà j'aime pas le fait que int soit utilisé pour spécifier la taille du buffer passé en paramètre qui oblige a faire 2 send dès que la taille des données à envoyer ne peut pas être représenté par un int. De même, lorsqu'on veut envoyer plusieurs données en même temps et qu'on veut ensuite travailler sur ces données plus ou moins en parallèle, il faut faire plusieurs recv et déclarer plusieurs variables alors qu'un seul appel à WSARecv suffit la plupart du temps. Mais bon, c'est aussi peut-être une affaire de goût ...
Euh une autre question, quel serait l'équivalent de select sur windows ? sur msdn y propose select mais il y a aussi WSAPoll ou WSAAsyncSelect, lequel est-on censé utiliser?
À la base, select(), que je recommande absolument pour la plupart des application consoles.
Mais dans une application graphique, WSAAsyncSelect() est beaucoup plus pratique.
Quant à WSAEventSelect(), il peut être utile pour contourner certaines limites de select() dans une application console, mais je n'ai pas encore eu l'occasion de vraiment l'utiliser.
il y a-t-il un équivalent à la fonction bind en WSAxxx ?
Non, parce que MS n'a pas trouvé d'améliorations possibles à apporter à cette fonction.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager