Desidero creare una connessione non bloccante. Ti piace questa:Linux, socket, connessione non bloccante
socket.connect(); // returns immediately
Per questo, io uso un altro thread, un ciclo infinito e epoll Linux. Ti piace questa (pseudocodice):
// in another thread
{
create_non_block_socket();
connect();
epoll_create();
epoll_ctl(); // subscribe socket to all events
while (true)
{
epoll_wait(); // wait a small time(~100 ms)
check_socket(); // check on EPOLLOUT event
}
}
Se corro un server e un client poi, tutto funziona. Se prima eseguo un client, attendo un po 'di tempo, esegui un server, quindi il client non si connette.
Cosa sto sbagliando? Forse può essere fatto in modo diverso?
Se si sta sollevando un altro thread per eseguire la connessione, perché lo si sta facendo in modo asincrono? Inoltre, potrebbe anche mettere il resto delle comunicazioni in là. –
Bene, come si fa senza epoll e nonblocking? Se chiamo connect(), allora bloccherà e aspetterò la connessione (ho ragione?). Ma poi se voglio unire questo thread di collegamento al thread principale, non posso farlo, perché il thread di collegamento sarà in stato di blocco. Scusa se sbaglio. – herolover
Questo non è 'asincrono'. Questo è non-bloccante. – EJP