Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Socket.Select Timeout

2 réponses
Avatar
Pascal Simler
Bonjour,

J'utilise la methode Select de la classe Socket pour voir s'il y des
evenements en attente sur plusieurs sockets

public static void Select(
IList checkRead,
IList checkWrite,
IList checkError,
int microSeconds
);

Je voudrais attendre indefiniment sur un evenement. Dans la fonction Win32,
en donnant une valeur -1, cela marchait !
Quelqu'un a t-il une solution ? ( autre que de faire une boucle )

Merci
Pascal

2 réponses

Avatar
Paul Bacelar
Si vous ne connaissez pas le superbe outil qu'est reflector, c'est le moment
d'y jeter un coup d'oeil.

C'est un décompilateur .NET et avec lui, on peut voir le code source des
classes .NET, celles du frameWork y compris.

En utilisant reflector sur l'assembly system.dll et en sélectionnant
l'espace de nom puis la classe Socket puis la méthode Select, vous
obtiendrez le code le la méthode et vous verrez que l'appel est quasiment
directement vers la fonction de WinSock2.0.

Vous pouvez donc vérifiez que -1 devrait toujours fonctionner et si vous ne
voulez pas dépendre de l'implémentation M$, vous pouvez toujours utiliser le
code comme model pour vous faire un appel en InterOp à WinSock2.0.

Remarquez, je ne sais pas si c'est très légal ?:-|. A vous les Microsofties
;-)



Ce qu'il y a de bien avec .NET, c'est la reflexion ;-)
--
Paul Bacelar


"Pascal Simler" wrote in message
news:
Bonjour,

J'utilise la methode Select de la classe Socket pour voir s'il y des
evenements en attente sur plusieurs sockets

public static void Select(
IList checkRead,
IList checkWrite,
IList checkError,
int microSeconds
);

Je voudrais attendre indefiniment sur un evenement. Dans la fonction


Win32,
en donnant une valeur -1, cela marchait !
Quelqu'un a t-il une solution ? ( autre que de faire une boucle )

Merci
Pascal




Avatar
Simon Mourier [MS]
La doc de select est la suivante:
int select(
int nfds,
fd_set* readfds,
fd_set* writefds,
fd_set* exceptfds,
const struct timeval* timeout
);
Il faut passer NULL dans timeout pour attendre indéfiniment, et non pas -1 à
moins que vous parliez d'une autre fonction?Evidemment si on passe un
timeout avec tv_sec et tv_usec à -1, c'est "presque" infini :-)Je ne pense
pas que l'implémentation du Socket.Select du .NET Framework prenne le NULL
en charge.Dans ce cas, il faut soit utiliser Poll qui peut-être bloquant à
la différence de Select, soit passer int.MaxValue ou
int.MinValue.Malheureusement le paramètre microSeconds n'est qu'un
int.Simon."Paul Bacelar" a écrit dans le
message de news: Si vous ne
connaissez pas le superbe outil qu'est reflector, c'est le moment
d'y jeter un coup d'oeil.

C'est un décompilateur .NET et avec lui, on peut voir le code source des
classes .NET, celles du frameWork y compris.

En utilisant reflector sur l'assembly system.dll et en sélectionnant
l'espace de nom puis la classe Socket puis la méthode Select, vous
obtiendrez le code le la méthode et vous verrez que l'appel est quasiment
directement vers la fonction de WinSock2.0.

Vous pouvez donc vérifiez que -1 devrait toujours fonctionner et si vous
ne
voulez pas dépendre de l'implémentation M$, vous pouvez toujours utiliser
le
code comme model pour vous faire un appel en InterOp à WinSock2.0.

Remarquez, je ne sais pas si c'est très légal ?:-|. A vous les
Microsofties
;-)



Ce qu'il y a de bien avec .NET, c'est la reflexion ;-)
--
Paul Bacelar


"Pascal Simler" wrote in message
news:
Bonjour,

J'utilise la methode Select de la classe Socket pour voir s'il y des
evenements en attente sur plusieurs sockets

public static void Select(
IList checkRead,
IList checkWrite,
IList checkError,
int microSeconds
);

Je voudrais attendre indefiniment sur un evenement. Dans la fonction


Win32,
en donnant une valeur -1, cela marchait !
Quelqu'un a t-il une solution ? ( autre que de faire une boucle )

Merci
Pascal