Makale numarası: 192599 - Son Gözden Geçirme: 11 Temmuz 2005 Pazartesi - Gözden geçirme: 1.1

BILGI: Veri Winsock gözatma kaçının.

Sistem İpucuBu makale, kullandığınızdan farklı bir işletim sistemine yöneliktir. Sizinle ilgili olmayabilecek makale içeriği devre dışı bırakıldı.
Hepsini aç | Hepsini kapa

Özet

Winsock veriler için gözatma gelen verileri gerçekten almadan alınmak üzere bekleyen miktarı için bir uygulama istekleri anlamına gelir. Winsock 1.1 uyumluluğu UNIX BSD Sockets ile gelen bir holdover budur. Winsock'de, bu recv/WSARecv(..., MSG_PEEK) veya ioctlsocket(FIONREAD,...) ile gerçekleştirilir. Bu son derece verimsiz olur ve bu uygulamayı bir hatalı veri sayacı konuları nedeniyle bunu kaçınmanız gerekir.

Daha fazla bilgi

Yuva uygulama üzerinde sabit boyutlu iç gönderme dayanır ve gerektiğinde bitişik, disk belleği olmayan havuz belleğinden ayrılan arabelleklerindeki. 8 K bu arabelleklerinin varsayılan boyuttur. Gelen ağ verileri, iç alma arabelleği için bir yuva içine yerleştirilir.

Arama yöntemlerden recv/WSARecv(..., MSG_PEEK) veya ioctlsocket(FIONREAD,...), veri alma arabelleği elde Winsock uygulamaları son derece verimsiz sistem verileri kilitlemek ve onu saymak için. Sistem bu gibi gerçek zamanlı ağ arabelleği daha fazla veriyle doldurmaya devam deneyeceğini olasıdır. Gözatma, arabellek, depolama sınırına ulaşması izin veriler de kaldırmaz. Sonuç olarak, bu ağ veri akış hızını kapatır ve veri iletimi işlemlerinin verimli hale getirir.

Belirli sayıda bayt) veya "ileti" gelinceye kadar bir akış yuvada yoklama hatalı kodudur. Bir veri akışı sağladığından, TCP gibi BIR akış yuva ileti sınırlarını korumaz. En büyük ileti boyutunu temel bir uygulama her zamankinden bağlı olabilir ', bir baytlık olan uzunluğu. Tam bir "ileti" gelinceye kadar beklemek için gözatma kullanan kod, hiçbir zaman burada bu verileri birden çok sistem arabellek sınırları, tasarım kararları yüzünden straddles Winsock akışa dayalı iletişim kuralları başarısız. Arama işlemi, ilk arabellek sınırı kadar bayt bildirir. Diğer sınırları içinde kalan bayt hiçbir zaman, veriler doğru için arama değerleri bağlı olan kod algoritmalar için yanlış bir sayımını sonuçta raporlanacak. Sonraki arama denemeleri hala arabellekleri alınan "gizli" verileri açığa.

Hemen alma arabelleği uygulama ayrılan alana bağlı veri noktasındaki boşaltmak için en iyi akış tabanlı iletişim kuralı yuva uygulama var. Bu yuva arabellekleri, uygulama verileri çok daha iyi ağ performansı elde ayrıştırdığında gibi sürekli bir ağ veri akışı hızına açık kalmasını sağlar.

Referanslar

Windows 2 API Specification Revision 2.2.0, 10 Mayıs 1996 ek C, "Eksik liste", <a1>Madde</a1> # 20 # 26 Sockets.

Ek bilgi için lütfen Microsoft Knowledge Base'de aşağıdaki makaleye bakın:
140263  (http://support.microsoft.com/kb/140263/EN-US/ ) SORUN: MSG_PEEK kullanarak recv() her zaman yanlış arabellek boyutu verir.

Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Platform Software Development Kit - Ocak 2000 Sürümü
Anahtar Kelimeler: 
kbmt kbapi kbinfo kbnetwork kbwinsock KB192599 KbMttr
Otomatik TercümeOtomatik Tercüme
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:192599  (http://support.microsoft.com/kb/192599/en-us/ )