Bloke olmayan bir bağlantı oluşturmak istiyorum. Bunun gibi : Bunun içinLinux, soketler, engellemesiz bağlantı
socket.connect(); // returns immediately
, ben başka bir iş parçacığı, sonsuz döngüye ve Linux epoll kullanın. Bu (pseudocode) gibi:
// 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
}
}
Ben bir sunucu ve sonra bir istemci çalıştırırsanız, çalışır hepsi. İlk önce bir istemci çalıştırırsam, biraz bekle, sunucu çalıştır, sonra istemci bağlanmaz.
Neyi yanlış yapıyorum? Belki farklı yapılabilir?
Bağlantıyı gerçekleştirmek için başka bir konu açıyorsanız, neden asenkronize yapıyorsunuz? Ayrıca, buradaki haberlerin geri kalanı da koyabilir. –
Peki, epoll ve nonblocking olmadan nasıl yapılır? Eğer sadece connect() öğesini çağırırsam, o zaman bloke eder ve bağlantı için bekler (doğru muyum?). Ama eğer bu bağlantı parçasını ana iş parçacığına bağlamak istersem, bunu yapamam çünkü bağlantı parçacığı engelleme durumunda olacak. Üzgünüm eğer yanılıyorsam. – herolover
Bu 'async' değil. Bu engelleme değil. – EJP