Prise ReceiveTimeout
J'ai spécifié le ReceiveTimout
40 ms. Mais il faut plus de 500ms pour le recevoir au délai d'expiration. Je suis à l'aide d'un Chronomètre pour calculer le timetaken.
Le code est indiqué ci-dessous.
Socket TCPSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream,
ProtocolType.Tcp);
TCPSocket.ReceiveTimeout = 40;
try
{
TCPSocket.Receive(Buffer);
} catch(SocketException e) { }
- Merci de préciser un peu plus de code.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez de manière synchrone sondage sur la prise avec n'importe quel délai vous le souhaitez. Si
Poll()
retournetrue
, vous pouvez être certain que vous pouvez faire un appel àReceive()
pour ne pas les bloquer.Je vous recommande de lire Stevens' UNIX Réseau de Programmation chapitres 6 et 16 pour de plus amples informations sur socket non bloquant l'utilisation. Même si le livre a d'UNIX en son nom, l'ensemble des sockets architecture est essentiellement la même dans les environnements UNIX et Windows (et .net)
Vous ne pouvez pas utiliser les valeurs de délai d'attente qui sont moins de 500ms.
Voir ici pour
SendTimeout
: http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.sendtimeoutMême si MSDN n'est pas la même exigence pour la
ReceiveTimeout
, mon expérience montre que cette restriction est toujours là.Vous pouvez également lire plus à ce sujet sur plusieurs postes:
J'ai trouvé celui-ci: