Chcę utworzyć połączenie nieblokujące. jak poniżej:Linux, gniazda, nieblokujące połączenie
socket.connect(); // returns immediately
W tym celu użyć innej nici, nieskończoną pętlę, i Linux epoll. Jak to (Pseudokod):
// 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
}
}
Gdybym uruchomieniu serwera, a następnie klienta, wszystko działa. Jeśli najpierw uruchomię klienta, poczekaj chwilę, uruchom serwer, a klient się nie połączy.
Co robię źle? Może można to zrobić inaczej?
Jeśli przenosisz inny wątek, aby wykonać połączenie, dlaczego robisz to asynchronicznie? Równie dobrze może umieścić tam resztę komunikatorów. –
Cóż, jak to zrobić bez epolacji i bez blokowania? Jeśli po prostu zadzwonię connect(), to zablokuje i zaczeka na połączenie (mam rację?). Ale jeśli chcę dołączyć do tego wątku łączącego z głównym wątkiem, nie mogę tego zrobić, ponieważ wątek połączenia będzie w stanie blokowania. Przepraszam, jeśli się mylę. – herolover
To nie jest "asynchroniczne". To nie jest blokowanie. – EJP