IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

Winsock API et fonctions non préfixées WSA


Sujet :

Windows

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 19
    Points : 14
    Points
    14
    Par défaut Winsock API et fonctions non préfixées WSA
    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

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    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().

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    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?

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    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.

  5. #5
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    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.
    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.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    Je vois pas pourquoi
    On code réellement plus vite, ou du moins plus simplement, en utilisant WSASend au lieu de send
    Il 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.

  7. #7
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    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 ...

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    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?

  9. #9
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    À 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.

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    il y a-t-il un équivalent à la fonction bind en WSAxxx ?

  11. #11
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Non, parce que MS n'a pas trouvé d'améliorations possibles à apporter à cette fonction.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Youtube API : fonctions non définies
    Par crazymonkey dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 05/07/2011, 00h17
  2. [WD10] API Windows LogonUserA : fonction non trouvée
    Par mistertbo dans le forum WinDev
    Réponses: 7
    Dernier message: 01/04/2011, 08h50
  3. Le linker ignore les fonctions non implémentées
    Par Rodrigue dans le forum C++Builder
    Réponses: 5
    Dernier message: 02/03/2005, 13h31
  4. [API Windows] Fonction Rectangle
    Par Zazeglu dans le forum Windows
    Réponses: 4
    Dernier message: 29/01/2004, 21h44
  5. [API] Communication série NON-bloquante : OVERLAPPED/Thread
    Par Rodrigue dans le forum C++Builder
    Réponses: 2
    Dernier message: 07/11/2003, 13h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo