2010-01-11 17 views
6

'dan ayırma Yerel soketi Boost.ASIO'nun soket sınıfından ayırmak mümkün mü? Eğer öyleyse, nasıl yapılabilir? Belgelerdeki belli bir şeyi bulamıyorum.Yerel bir soketi Boost.ASIO yuva sınıfı

Neyi başarmaya çalıştığımı hızlı bir şekilde gözden geçirme: Bağlantısını yapan ve Boost.ASIO kullanarak bazı anlaşmalar yapan bir sınıfım var, daha sonra yerel bir Windows SOKET'ü başarıda veya başarısızlık durumunda 0'ı geri geçiriyor.

Hatalı olmadıkça, desteklemediğinde yerel yuva kapatılacak ve ayrılacağım :: asio :: basic_socket imha edildi.

cevap

0

yapın (Linux için o sadece çok fikir fark değiştirmek zor değil):

    bir shared_ptr içinde
  1. Wrap soketi, o kazandı, böylece Farklı rutinlere geçerken ve onu canlı tuttuğunuzda (en az bir referans her zaman olmalıdır);

    struct kevent event; 
    EV_SET(&event, descriptor, EVFILT_READ, EV_DELETE, 0, 0, 0); //or EVFILT_WRITE 
    
  2. Ve gerekirse engelleme yapmak:

  3. kqueue onu çıkarın socket.native();
  4. ile bir yerli tanımlayıcı alın

    fcntl(descriptor, F_SETFL, fcntl(descriptor, F_GETFL, 0) & ~O_NONBLOCK); 
    
Ben onun tam olarak açık değildir biliyorum
+0

ama kod Aşağıdaki liste öğeleri 8 boşluk girintisine ihtiyaç duyar - bkz. [burada] (http://meta.stackexchange.com/questions/24424/list-preceeding-code-prevents-code-f rom-varlık gösterimli-olarak-code). –