Datagram tabanlı soket (raw soket veya UDP) toplama stili gönderim ile kullanıldığında, tüm veriler tek bir IP paketi oluşturmak için birleştirilir. Tek bir arama kullanarak birkaç datagram göndermek için bir yolu var mı?Tek bir gönderim() çağrısı kullanarak birden fazla datagram gönderilsin mi?
cevap
Bunu düşünmüyorum ... IP yığınının, paket datagramını nerede bulmayı amaçladığını nasıl tahmin ederdiniz?
Adından da anlaşıldığı üzere, toplama tarzı gönderme(), bellekteki birden çok yerden veri topladığından ve sonra da gönderdiği bir arabelleğe koyduktan sonra, biraz komik.
Birden çok veri parçası göndermek istediğiniz birden çok veri bölümünüz var. Neden onları göndermek için ayrı çağrılarla göndermiyorsunuz?
Aslında bir varsayılan hedef belirlemek için connect() öğesini bir datagram soketinde çağırabilirsiniz; böylece her seferinde hedef adresi belirtmeden() veya write() gönderebilirsiniz.
Aradığınız çağrı sendmmsg()
olup, henüz uygulanmamıştır, hatta çok fazla tartışma gerektirmez. En son 2.6.3 Linux çekirdeğinde yan ikiz recvmmsg()
aldığını görebilirsiniz.
Linux 3.0'da [sendmmsg()] (http://man7.org/linux/man-pages/man2/sendmmsg.2.html) sistem çağrısı eklendi. Glibc desteği 2.14 sürümünde eklendi. – ecerulm
Her iovec ayrı bir datagram? –