код на шарпе, клиентская часть
EndPoint packetSender = (EndPoint) new IPEndPoint(IPAddress.Any, 0);
byte[] buf = new byte[2048];
while ( state != State.Disconnected )
{
try
{
if ( !sock.Poll(150000, SelectMode.SelectRead) && DateTime.Now > timeOut )
{
DebugLog.WriteLine("UdpConnection", "Connection timed out");
state = State.Disconnected;
break;
}
while ( sock.Poll(10000, SelectMode.SelectRead) )
{
int length = sock.ReceiveFrom(buf, ref packetSender);
if ( !packetSender.Equals(remoteEndPoint) )
continue;
timeOut = DateTime.Now.AddSeconds(TIMEOUT_DELAY);
MemoryStream ms = new MemoryStream(buf, 0, length);
UdpPacket packet = new UdpPacket(ms);
ReceivePacket(packet);
}
}
catch ( SocketException e )
{
DebugLog.WriteLine("UdpConnection", "Critical socket failure: " + e.ErrorCode);
state = State.Disconnected;
break;
}
if ( state != State.Disconnected )
SendPendingMessages();
if ( inSeq != inSeqAcked )
SendAck();
if ( state == EState.Disconnecting && outPackets.Count == 0 )
{
DebugLog.WriteLine("UdpConnection", "Graceful disconnect completed");
state = State.Disconnected;
}
}
DebugLog.WriteLine("UdpConnection", "Calling OnDisconnected");
OnDisconnected(EventArgs.Empty);
я в шарпе не очень, но как я понял функция sock.Poll(150000, SelectMode.SelectRead) определяет есть ли данные для recvfrom или нет, плюс таймаут в микросекундах на данное действие, есть ли что то подобное на питоне?
рылся рылся в гуле…
select.select([sock], [], [], x)[0]
sock.Poll(x, SelectMode.SelectRead)