Ich möchte eine nicht blockierende Verbindung erstellen. So:
%Vor%Dafür benutze ich einen anderen Thread, eine Endlosschleife und Linux epoll. So (Pseudocode):
%Vor%Wenn ich einen Server und dann einen Client starte, funktioniert alles. Wenn ich zuerst einen Client ausführe, warte eine kurze Zeit, führe einen Server aus, dann verbindet sich der Client nicht.
Was mache ich falsch? Vielleicht kann es anders gemacht werden?
Sie sollten die folgenden Schritte für eine asynchrone Verbindung verwenden:
socket(..., SOCK_NONBLOCK, ...)
connect(fd, ...)
starten
0
noch EINPROGRESS
ist, dann Abbruch mit Fehler fd
als Ausgabebereit gemeldet ist getsockopt(fd, SOL_SOCKET, SO_ERROR, ...)
Keine Schleifen - außer Sie möchten EINTR
behandeln.
Wenn der Client zuerst gestartet wird, sollte im letzten Schritt der Fehler ECONNREFUSED
angezeigt werden. Schließen Sie in diesem Fall den Socket und beginnen Sie von vorne.
Es ist schwierig zu sagen, was mit Ihrem Code nicht stimmt, ohne weitere Details zu sehen. Ich nehme an, dass Sie bei Fehlern in Ihrer Operation check_socket
nicht abbrechen.
Tags und Links c sockets linux asynchronous epoll