Evet, çocuklar, şimdi tartışalım.
Aslında bir dinleyici iş parçacığı oluşturan bir işlev.
Doğru.
Böylece network utils dot C dosyasında olduğumu görebilirsiniz.
Yani bu, tüm ağ mantığını uygulayan dosyadır.
Örneğin, paket varışları için bir ağ soketini dinleyen bir dinleyici iş parçacığı oluşturmak gibi,
değil mi?
Bu, ana programımızda bir dinleyici iş parçacığı oluşturmak için kullandığımız işlevdir.
Bu ders videosunda yapacağım şey, nasıl oluşturulacağı hakkında bir fikir edinmeniz
için bu işlevin uygulanmasını hızlıca gözden geçirmek olacak.
Paket dinleyici iş parçacıkları, doğru.
Şimdi, bu kod parçasını anlamak aynı zamanda soket programlama ile ilgili temel bir anlayışa sahip olmanızı gerektirir.
Bir soket programı bu şekilde yazılır.
UDP soketleri veya başka bir şey kullanarak çok basit bir soket programı yazmış olsanız bile, bu kod
parçasını anlayabilmeniz gerekir.
Bu, ana programımızda paket dinleyici iş parçacıkları oluşturmak için kullandığımız API'dir.
Ve bu API üç argüman ister.
İlk bağımsız değişken bir IP adresi ve ikinci bağımsız değişken de bağlantı noktası numarasıdır, değil mi?
Bu nedenle, bir paket dinleyici iş parçacığı oluşturduğunuzda, paket dinleyici iş parçacığı bir IP adresini ve birinci ve ikinci bağımsız
değişken olarak aktarılan bağlantı noktası numarasını dinlemelidir.
Ve bu paket dinleyici iş parçacığı harici ağdan gelen herhangi bir paket tespit ettiğinde,
bu paket dinleyici iş parçacığı uygulamayı paketle ilgili olarak bilgilendirmek için bu işlevi çağırır.
Ve bu API, paket dinleyici iş parçacığına bir işaretçi döndürür.
Doğru.
Yani temel olarak bu API ilk etapta bir iş parçacığı oluşturur.
Artık bir iş parçacığının nasıl oluşturulacağını zaten biliyoruz.
Burada müstakil modda bir iş parçacığı oluşturmaya çalışıyorum.
Doğru.
Ve bundan sonra bazı veri yapıları için bir bellek ayırıyorum.
Dikkat ederseniz, bu veri yapısı iş parçacığı argüman paketi olarak adlandırılır, yani iş parçacığı fonksiyonuna
argüman olarak aktarılması gereken tüm bilgileri saklayabileceğimiz veri yapımız budur.
Değil mi?
Dolayısıyla, bu veri yapısının uygulamasını görmek istiyorsanız, yalnızca bu dosya içinde tanımlanmıştır.
İşte bu veri yapısının tanımı ve burada bu veri yapısının yalnızca üç üyesi olduğunu görebilirsiniz.
Bu IP adresi, port numarası ve alma fonksiyonunun işaretçisidir.
Doğru.
Yani temel olarak, bu üç bilgi UDP sunucusuna argüman olarak aktardığınız şeydir.
API oluşturun ve başlatın.
Doğru.
Yani burada yaptığımız şey, tüm argümanları aynı yapı veya aynı nesne içinde bir araya getirebilmemiz
için bir bellek tahsis etmektir.
Bunun nedeni, iş parçacığı oluşturma sırasında.
Tüm bilgileri p thread create API'sine tek bir argüman olarak aktarabiliriz.
Doğru.
Ve bu API, aslında bir iş parçacığı tanıtıcısı olan iş parçacığına bir işaretçi döndürür.
İşte bu, bir iş parçacığı işlevi olan işlevdir ve bu işlevde, aslında bir soket oluşturmak
ve bunu sonsuz bir süre boyunca dinlemek için tüm ağ mantığını uyguluyoruz.
Şimdi bu fonksiyonun uygulamasını gözden geçirelim.
Ve burada bunun bir iş parçacığı işlevi olan işlev olduğunu görebilirsiniz.
Ve yine, veri yapısını orijinal veri türüne geri yazarak açacağım ve ardından bir dinleyici iş
parçacığı oluşturmak için gereken tüm bilgileri çıkaracağım.
Ve elbette malloc yapılan belleği, gerekli olmadığında boşaltmanız gerekir.
Yani burada bir UDP soketi oluşturuyorum, değil mi?
Ve burada bu UDP soketini IP adresi ve port numarası ile bağlıyorum.
Doğru.
Yani yine, bu yalnızca soket programlamaya biraz aşina iseniz sizin için anlamlı olacak
bir kod parçasıdır.
Değil mi?
Paket dinleyici iş parçacığımız paketi dinlemeye geçeceği için, paket dinleyici iş parçacığımızın
alınan paketi kaydedebileceği bir miktar belleğe ihtiyacı vardır.
Bu yüzden bu belleğe alıcı tamponu diyoruz, değil mi?
Ve UDP dinleyici iş parçacığımızın daha sonra sonsuz bir döngüye girdiğini görebilirsiniz.
Ve bu sonsuz döngü içinde paket dinleyici iş parçacığımızın bir API receive from çağırdığını görebilirsiniz.
Doğru.
Şimdi bu API'den alınan verinin bloklama yapan bir API olduğuna dikkat edin, yani veri bu UDP soketine ulaşana kadar
dinleyici iş parçacığımız bloklamaya devam edecektir.
Doğru.
Dolayısıyla 78 numaralı satır yalnızca paket dinleyici iş parçacığımız bir paket aldığında ve bu paket bu alma tamponunda
mevcut olduğunda yürütülecektir.
Doğru.
Dolayısıyla, dinleyici iş parçacığımız paketi aldığında, uygulamaya hangi paketin alındığını bildirmek
için uygulamaya özel receive işlevini çağıracağız, böylece uygulama artık bu paket üzerinde özel bir işlem
gerçekleştirebilir.
Doğru.
Paket dinleyici iş parçacığının genel mimarisi veya tasarımı budur.
Tek gereken thread kullanarak yeni bir thread oluşturmanız, API oluşturmanız ve socket sistemini kullanarak bir socket oluşturmanızdır.
Soketi bağlamayı çağırın.
Alınan paketi kaydetmek için bellek tamponunu alın ve son olarak paketin alınmasını
beklemek için API'den alma işlemini çağırın.
Doğru.
Ve paket ulaştığında, bir geri arama işlevi kullanarak uygulamayı bilgilendirmek bu kadar basittir.
Burada dikkat edilmesi gereken bir husus, bu kodda iş parçacığı iptali ile ilgili herhangi bir
şey kullanmadığımdır.
Doğru.
Bu nedenle, bu ders videosundan sonraki ödevin bir parçası olarak, paket dinleyici iş parçacığınızı iptal edilebilir
iş parçacığı olarak oluşturmak için bu dosyada değişiklik yapmanız gerekir.
İplik iptali ile ilgili bölümleri zaten yapmıştık, bu yüzden bunu tekrar gözden geçirelim.