Yarin-oburgun oturup yazayim, oyle iki mesaj arasina yazilacak kadar kolay degil
Belki bi mikrokutuphane haline getiririz, pickle’la falan birlestirip.
Genel fikir soyle ama:
while okunan_byte < okunacak_byte:
n, yeni_bytelar = read(okunacak_byte - okunan_byte)
if (baglanti_koptu()) break;
if (n == 0) // bu ozel bi durum muydu hatirlamiyorum
okunan_byte += n; buffer += yeni_bytelar
TCP’de tek seferde n byte gönderdiğimiz halde recv(n) çağrısından hangi durumlar altında n’den daha kısa bir değer alıyoruz bilmiyorum (sadece bir taraf socketi kapatınca karşı tarafın hep b'' aldığını hatırlıyorum). Bir kaynak verirseniz veya açıklarsanız sevinirim.
Once receive dusundum fakat sonra send’in send ile karisacagini fark ettim. send/receive_object olabilir mesela. (Edit: soruyu cevaplamamisim. Evet, read/write da biraz dosya konotasyonlu olsa da gayet iyi bence.)
man 2 recv veya herhangi bir BSD soket implementasyonu dokumentasyonu.
Cunku bir suru dusuk seviye arayuzde oldugu gibi, belirtilmemis. Bunun sebebi asagidaki mekanizmalara ozgurluk saglamak. Datayi birlestirme/ayirma isini programciya birakarak isletim sisteminin yukunu hafifletiyor. Bu cagrinin internete bagli butun aletler icin tasarlandigini ve kullanildigini hatirlatirim. Python neden oldugu gibi almis en ufak bir fikrim yok.
Pratikte, tamamen tahmin yurutuyorum, data iki paket halinde gelirse olabilir mesela.
receive_object de iyi. read dersek send’i de write yapmak mantıklı olur tabii.
Aslında burayı okudum ama dediğiniz gibi hangi durumlarda eksik döndüreceğinden pek bahsetmemiş. Peki pratikte böyle bir duruma modern işletim sistemlerinde rastlanır mı sizce, ben hiç karşılaşmadım:
Ben sabah tekrar bi bakmistim ve bahsediyor diye gormustum ama karistirmisim. Resmi spesifikasyonlar disinda her yerde acik acik yaziyor. Resmi spesifikasyonlar sadece “up to n bytes” diyerek ima ediyor.
Pratikte dedigim gibi en kolay paket ayrimlarinda karsimiza cikiyor. Google sonrasi cagda network konusunda feci optimizasyonlar ve hizlar gorduk, muhtelif TCP implementasyonlarina yapilan tweak’ler de bu durumu degistirebilir.