Prendiamo ad esempio un semplice web server nel ciclo di C:
while(1)
{
/*accept connection that comes into server_socket and assign
its handle to client_socket*/
client_socket = accept(server_socket, NULL, NULL);
/*send data to the client thru the client_socket*/
send(client_socket, http_header, sizeof(http_header), 0);
close(client_socket);
}
A un livello più profondo, ciò che impedisce, ad esempio, una connessione in entrata di colpire la porta nel momento in cui questo ciclo supera la porzione client_socket = accept()
ma prima della parte close () e la connessione non viene vista / accettato?
Il codice socket della connessione client sottostante genera generalmente un sacco di richieste sul server fino a quando non viene "catturato" e allora la connessione è stata stabilita?
Un'analogia simile a quello che sto chiedendo è che stavo correndo su una pista di 400 metri più e più volte, facendo un giro ogni 2 minuti. Mentre sono dalla parte opposta della pista, il mio amico arriva per provare a darmi il cinque, ma io sono dall'altra parte. 10 secondi dopo, se ne va, quindi così mi è "mancato". Quindi cosa impedisce che questo tipo di cose si verifichi nel contesto di una connessione loop / socket while come questa, specialmente dove potrebbe esserci più codice di questo semplice programma?