Ich bin ein Neuling in C.
Ich habe gerade festgestellt, dass die connect()
-Funktion auf der Client-Seite so lange wie die TCP-Drei-Wege-Hand-Shake zurückgeben kann ist fertig. Ich meine connect()
kann sogar zurückkehren, bevor die accept()
auf der Server-Seite aufgerufen wird (korrigieren Sie mich, wenn ich falsch liege).
Basierend auf diesem Wissen, meine Frage ist, dass, wenn ich select()
danach auf der Clientseite aufrufen, und beobachten Sie den Dateideskriptor warten auf es beschreibbar sein, wenn select()
erfolgreich zurückgibt, bedeutet dies, dass die Serverseite bereits accept()
aufgerufen hat und jetzt Ich kann sicher auf die Serverseite schreiben, oder? Vielen Dank für Ihre Zeit.connect(), accept() und select() happening sequence order
int flags = fcntl(fd, F_GETFL);
flags |= O_NONBLOCK;
fcntl(fd, F_SETFL, flags);
if (connect(fd, (struct sockaddr *)saptr, salen) < 0)
{
if (errno != EINPROGRESS)
/* error_return */
}
fd_set set;
FD_ZERO (&set);
FD_SET (fd, &set);
select (FD_SETSIZE, NULL, &set, NULL, &timeout)
/* Here, if select returns 1, that means accept() is already called
on the server side, and now I can safely write to the server, right? */
'Ich meine connect() kann sogar zurückkehren, bevor die accept() auf der Serverseite heißt' - sicher, ja. –