Pourquoi je reçois toujours l'erreur de WSAETIMEDOUT dans ce code:message WSAETIMEDOUT dans la bibliothèque Synapse
var fUDPBuf: array [1..UdpPacketSize] of byte;
{...}
UDPSocket := TUDPBlockSocket.Create;
UDPSocket.Bind(UDPIP, UDPPort);
if UDPSocket.LastError = 0 then
Raise EDevFail.Create(Format(SPortFailed, [UDPPort]));
while not Terminated do begin
BytesRead := UDPSocket.RecvBufferEx(@fUDPBuf[1], UdpPacketSize, 1000);
if BytesRead <= 0 then
case UDPSocket.LastError of
0, WSAETIMEDOUT: Continue;
WSAECONNRESET, WSAENETRESET,
WSAENOTCONN, WSAECONNABORTED,
WSAENETDOWN: begin
Raise EDevFail.Create(UDPSocket.GetErrorDesc(UDPSocket.LastError));
UDPSocket.CloseSocket;
end;
else begin
Raise EDevFail.Create(UDPSocket.GetErrorDesc(UDPSocket.LastError));
UDPSocket.CloseSocket;
end;
end;
//Sleep(1);
ProcessData(@fUDPBuf[1]);
inc(PacketCount);
end;
Je suis sûr que je reçois des données UDP à partir du périphérique de réseau e autant que UdpPacketSize.
de toute façon mes codes dans la boucle "while Noninated". Et je suis sûr que j'ai reçu 1305 octets toutes les 5 millisecondes. – SimaWB
"de toute façon mes codes dans" tout ne pas Terminé "boucle". - Oui, c'est le test pour voir s'il a été terminé. Le Non est naturellement là. En ce qui concerne la synchronisation, il est possible que la notification de données de socket ne soit pas arrivée à cause du système occupé, et que cette attente expire. – mj2008