Ich lese von zwei Sockets mit Select, und ich sende nur eine Nachricht von jedem Socket. Die Auswahl scheint niemals zu Timeout zu gehen, sondern gibt immer entweder 1 oder 2 mit derselben Nachricht immer wieder zurück. Ich setze die Auswahlparameter jedes Mal neu, wenn ich die while-Schleife durchlaufe.Auswahl liefert immer Daten
Hier ist mein Code:
while(1)
{
FD_ZERO(&master);
for (i = 0; i < fdmax; i++)
{
FD_SET(sock_list[i], &master);
}
tv.tv_sec = 1;
tv.tv_usec = 300;
int sel = select(fdmax, &master, NULL, NULL, &tv);
if (sel > 0)
{
for (i = 0; i < fdmax; i++)
{
if (FD_ISSET(i, &master))
{
recv_msg(i, buf);
print("msg from %d: %s %d %d\n", i, buf, sel, tv.tv_sec);
}
}
}
}
Hat ein Problem mit meinem wählen jemand sehen?
Das Problem ist, wahrscheinlicher in 'recv_msg', weil es scheint, dass Sie die Daten nie (vollständig) lesen: daher sagt' select' Ihnen, dass Daten verfügbar sind – Kninnug
tat Sie überprüfen, dass recv_msg funktioniert? – pm100
Sie überprüfen nicht den Rückgabewert von 'recv_msg'. Überprüfen Sie, ob der Socket geschlossen ist oder ob ein Lesefehler vorliegt. Schließen Sie diese Sockets und entfernen Sie sie aus Ihrer Liste. – jxh