begin process at 2012 05 29 05:05:12
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

fonction select() sous windows et unix


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

fonction select() sous windows et unix

mardi 9 septembre 2003 à 12:43:10 | fonction select() sous windows et unix

peyou

je dois porter un logiciel de windows et unix, je dois utiliser la fonction select() (déclarée dans winsock2.h sous windows et sys/select.h sous unix) mais je ne suis pas sur de pouvoir la remplacer telle quelle car les bits fd_set me semble pas compatibles .... mais ma maigre connaissance du domaine ne m'aide pas, alors j'aimerais si possible une petite explication claire sur le sujet.

Merci
mardi 9 septembre 2003 à 13:04:29 | Re : fonction select() sous windows et unix

aardman

Membre Club
Salut,
La macro FD_SET n'est pas definie dans le select.h d'unix ?



-------------------------------
Réponse au message :
-------------------------------

> je dois porter un logiciel de windows et unix, je dois utiliser la fonction select() (déclarée dans winsock2.h sous windows et sys/select.h sous unix) mais je ne suis pas sur de pouvoir la remplacer telle quelle car les bits fd_set me semble pas compatibles .... mais ma maigre connaissance du domaine ne m'aide pas, alors j'aimerais si possible une petite explication claire sur le sujet.
>
> Merci
mardi 9 septembre 2003 à 13:45:01 | Re : fonction select() sous windows et unix

Nebula

Membre Club
Les macros sont parfaitement utilisables sous Windows et Unix, et pour peu qu'on respecte les normes, on peut avoir du code fonctionnel sur les deux systèmes...

Je code un démon de dialogue en direct, et avec des #ifdef pour isoler les parties spécifiques Unix (fork, setsid, etc) et Windows (WSAStartup, etc) tout fonctionne !

Un extrait (gestion des pings du démon) :

int i;
fd_set sockets;
struct timeval waiting = {30,0};
FD_ZERO(&sockets);
FD_SET(client->socket, &sockets);
i = select(FD_SETSIZE, &sockets, NULL, NULL, &waiting);
/*
i<0 signifie que le socket est fermé
i=0 signifie que le temps est écoule
i>0 signifie que des données sont prêtes à être lues
*/


Ici, le démon est multithreadé (un thread par client) et donc n'écoute qu'un seul socket, mais on peut très bien écouter plusieurs sockets à la fois (pas plus de 64 par select, pour Windows)...

En espérant que çà t'aidera...

A+
mardi 9 septembre 2003 à 15:57:40 | Re : fonction select() sous windows et unix

Manson

Salut,

si si tu peux depasser la limite des 64 en mettant un define juste avant d'inclure winsock2 :

#define FD_SETSIZE 500
#include <WinSock2.h>

Voila maintenant ta nouvelle limite est 500.

Et ca marche, j'ai actuelement sur mon serveur 350 personnes
de connectees, et en 2 threads, un pour le select, l'autre pour l'interface.

Rno



-------------------------------
Réponse au message :
-------------------------------

> Les macros sont parfaitement utilisables sous Windows et Unix, et pour peu qu'on respecte les normes, on peut avoir du code fonctionnel sur les deux systèmes...
>
> Je code un démon de dialogue en direct, et avec des #ifdef pour isoler les parties spécifiques Unix (fork, setsid, etc) et Windows (WSAStartup, etc) tout fonctionne !
>
> Un extrait (gestion des pings du démon) :
>

> int i;
> fd_set sockets;
> struct timeval waiting = {30,0};
> FD_ZERO(&sockets);
> FD_SET(client->socket, &sockets);
> i = select(FD_SETSIZE, &sockets, NULL, NULL, &waiting);
> /*
> i<0 signifie que le socket est fermé
> i=0 signifie que le temps est écoule
> i>0 signifie que des données sont prêtes à être lues
> */
>

>
> Ici, le démon est multithreadé (un thread par client) et donc n'écoute qu'un seul socket, mais on peut très bien écouter plusieurs sockets à la fois (pas plus de 64 par select, pour Windows)...
>
> En espérant que çà t'aidera...
>
> A+
mardi 9 septembre 2003 à 16:28:10 | Re : fonction select() sous windows et unix

Nebula

Membre Club
Merci pour cette précision intéressante :)

Je sais plus où j'avais vu cette histoire de 64 sockets, mais c'était peut-être pour Windows 9x... Tu es sous NT (ou un de ses descendants) ?
mardi 9 septembre 2003 à 18:23:48 | Re : fonction select() sous windows et unix

aardman

Membre Club
Salut,
La vrai limite de 64sockets c'est WSAWaitForMultipleEvent qui la fixe. Apres avec select() (et sous windows car je connais pas le reste), on peut depasser la limite de 64 avec la technique de Manson.

-------------------------------
Réponse au message :
-------------------------------

> Merci pour cette précision intéressante :)
>
> Je sais plus où j'avais vu cette histoire de 64 sockets, mais c'était peut-être pour Windows 9x... Tu es sous NT (ou un de ses descendants) ?
mercredi 10 septembre 2003 à 12:39:42 | Re : fonction select() sous windows et unix

Manson

Salut,

mon serveur tourne sous 2000, j'ai fait le test chez moi et il tourne aussi sous XP.

Rno

-------------------------------
Réponse au message :
-------------------------------

> Salut,
> La vrai limite de 64sockets c'est WSAWaitForMultipleEvent qui la fixe. Apres avec select() (et sous windows car je connais pas le reste), on peut depasser la limite de 64 avec la technique de Manson.
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > Merci pour cette précision intéressante :)
> >
> > Je sais plus où j'avais vu cette histoire de 64 sockets, mais c'était peut-être pour Windows 9x... Tu es sous NT (ou un de ses descendants) ?
>


Cette discussion est classée dans : fonction, windows, select, unix


Répondre à ce message

Sujets en rapport avec ce message

strftime en C sous windows [ par Rolapin ] Bonjour, Je souhaiterai utiliser la fonction strftime de C pour formater une date mais autant la fonction effectue ce que je veux sous unix, autant ç Ressources réseau [ par mohdaef ] Bonjour J'essaye de coder une application portable (Windows/Unix) Je programme en C++ et je dois réaliser une fonction qui permet de lister toute les Probléme avec la fonction SetPixel de l'api windows [ par Mareck666 ] Salut Salut tous le monde si je vien poster sur ce forum c'est parce que je n'arrive pas a trouver des explication a un mystérieux bug de la fonction GetLayeredWindowAttributes et Windows 2000 [ par Xaviou ] Bonjour à tous.J'ai un petit soft qui tourne actuellement sur différentes machines, dont certaines encore équipées de Windows 2000.A un moment donné, usage de la fonction CreateSolidBrush( ) [ par floufy69100 ] Bonjours, j'ai un petit problème que je n'arrive pas à résoudre, je réussi à créer et à afficher une fenêtre windows, mais mon compilateur me dit qu'i Lecture de ligne dans un fichier texte sous windows et unix [ par moumouteb ] Bonjour, Je développe un code qui doit tourner sous Windows et UNIX. J'utilise la fonction getline() pour lire un fichier texte. Et bien sûr suivant la fonction select() [ par dletozeun ] bonjour,je commence la programmation reseau en utilisant les sockets et je me heurte a qques problemes:je me suis rendu compte que la fonction recv(.. Fonction select() [ par Daykel ] Bonjour!Je suis en train de développer un serveur et un client en C avec Visual Studio, mais après avoir vu un source traitant de cette fonction, je v strcmp() sous Windows ? [ par tintin72 ] Bonjour,J'aimerai connaître l'équivalent de la fonction C strcmp() sous Windows.C'est à dire une fonction qui prend en charge le type TCHAR et s'adapt un serveur unix configure des client windows avec les rpc [ par oussssa ] bonjour :mon probleme c'est de faire un serveur unix qui va executer des prg ecrite en c# qui controle  et configures les @ ip, journal d'evenement ,


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,920 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales