Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
SO_CONDITIONAL_ACCEPT yuva seçeneği, bir uygulamanın dinleme yuvasında gelen bağlantıyı kabul edip etmeyeceğine karar vermesine izin verecek şekilde tasarlanmıştır.
Yuva seçeneği değeri
Bu yuva seçeneğini temsil eden sabit 0x3002.
Sözdizimi
int setsockopt(
(SOCKET) s, // descriptor identifying a socket
(int) SOL_SOCKET, // level
(int) SO_CONDITIONAL_ACCEPT, // optname
(char *) optval, // input buffer,
(int) optlen, // size of input buffer
);
Parametreler
-
s [in]
-
Yuvayı tanımlayan bir tanımlayıcı.
-
düzey [in]
-
Seçeneğin tanımlandığı düzey. Bu işlem için SOL_SOCKET kullanın.
-
optname [in]
-
Değerin ayarlanacağı yuva seçeneği. Bu işlem için SO_CONDITIONAL_ACCEPT kullanın.
-
optval [out]
-
Ayarlanacağı seçeneğin değerini içeren arabelleğe yönelik bir işaretçi. Bu parametre , DWORD değerinin boyutuna eşit veya bundan büyük arabelleğe işaret etmelidir.
Bu değer, YANLIŞ (devre dışı) değerini belirtmek için kullanılan 0 ile bir boole değeri ve TRUE (etkin) belirtmek için sıfır olmayan bir değer olarak değerlendirilir.
-
optlen [in, out]
-
Optval arabelleğinin bayt cinsinden boyutuna işaret eden bir işaretçi. Bu boyut , DWORD değerinin boyutuna eşit veya ondan büyük olmalıdır.
Dönüş değeri
İşlem başarıyla tamamlanırsa setsockopt sıfır döndürür.
İşlem başarısız olursa SOCKET_ERROR değeri döndürülür ve WSAGetLastError çağrılarak belirli bir hata kodu alınabilir.
| Hata kodu | Meaning |
|---|---|
| Bu işlevi kullanmadan önce başarılı bir WSAStartup çağrısı gerçekleşmelidir. |
|
| Ağ alt sistemi başarısız oldu. |
|
|
Optval veya optlen parametrelerinden biri, kullanıcı adres alanının geçerli bir bölümünde olmayan belleğe işaret eder. Bu hata, optlen parametresi tarafından işaret edilen değer DWORD değerinin boyutundan küçükse de döndürülür. |
|
| Windows Yuvaları 1.1'i engelleyen bir çağrı devam ediyor veya hizmet sağlayıcısı hala bir geri çağırma işlevini işliyor. |
|
|
Düzey parametresi bilinmiyor veya geçersiz. Yuva zaten dinleme durumundaysa bu hata da döndürülür. |
|
| Seçenek, belirtilen protokol ailesi tarafından bilinmiyor veya desteklenmiyor. |
|
| Tanımlayıcı bir yuva değil. |
Açıklamalar
SO_CONDITIONAL_ACCEPT yuva seçeneğiyle çağrılan setsockopt işlevi, bir uygulamanın dinleme yuvasında gelen bağlantıyı kabul edip etmeyeceğine karar vermesine olanak tanır. Yuva için koşullu kabul seçeneği varsayılan olarak devre dışıdır ( YANLIŞ olarak ayarlanır).
Bu yuva seçeneği etkinleştirildiğinde, TCP yığını bağlantıları otomatik olarak kabul etmez. Uygulamanın WSAAccept işleviyle kaydedilen koşullu kabul geri çağırma yoluyla bağlantıyı kabul ettiğini belirtmesini bekler. Bir bağlantı isteği alındıktan sonra Winsock, uygulama tarafından kaydedilen koşullu kabul geri çağırmasını çağırır. Yalnızca koşullu kabul geri çağırma döndürdüğünde CF_ACCEPT Winsock bağlantıyı tamamen kabul etmek için aktarıma bildirim gönderir.
SO_CONDITIONAL_ACCEPT yuva seçeneği etkin olarak ayarlandığında (TRUE olarak ayarlandığında), bunun yuva üzerinde birkaç yan etkisi vardır:
- Bu, uygulama artık bağlantıları kabul etme sahipliğini aldığı için TCP yığınının yerleşik SYN saldırı koruması savunmalarını devre dışı bırakır.
- Bu, dinleme yuvası adına bağlantılar kabul edilmediğinden dinleme kapsamı etkin bir şekilde devre dışı bırakılır. Uygulama CF_ACCEPT mekanizmasını kullanarak tam olarak kabul edene kadar bağlantı hiçbir zaman tam olarak kabul edilir.
- Bu, uygulamanın bağlantıyı kabul etmek için geri çağırmaları kabul etme durumunu her zaman hazır hale getirmek için dikkatli olduğu anlamına da gelir. Uygulama başka işlemler yapmakla meşgulse, uygulama bağlantıyı gerçekten kabul etmeden önce istemci tarafı zaman aşımına uğradı olabilir. Bu, kötü bir istemci deneyimine yol açar.
- Bazı TCP yığını iyileştirmeleri, koşullu kabul tamamlandıktan sonra bile tam olarak kabul edilen bağlantılar için geçerli değildir. Bu, bağlantının tüm ömrü boyunca performansını düşürebilir.
Genellikle, uygulamaların koşullu kabul kullanmasının ana nedeni, bağlantı istemcisi tarafından kullanılan kaynak IP adresini veya bağlantı noktasını incelemek ve ardından bağlantıyı kabul etmeye veya reddetmeye karar vermektir. Ancak, SO_CONDITIONAL_ACCEPT seçeneği etkinleştirilmemişse ve uygulama TCP yığınının ve dinleme kapsamlarının beklendiği gibi çalışmasına izin verirse, uygulamaların daha iyi performans gösterme olasılığı yüksektir. Daha sonra uygulama kabul edilen bağlantıyı işlediğinde, uygun olmayan bir IP kaynağı adresinden veya bağlantı noktasından geliyorsa, uygulama yuvayı kapatabilir. Bu davranışın güvenlik dezavantajı, istemcinin daha önce kabul edilen bağlantıyı zorla kapatmış olması nedeniyle uygulamanın bir IP adresi ve bağlantı noktası üzerinde dinlediğini onaylamasıdır. Ancak, SO_CONDITIONAL_ACCEPT etkinleştirmenin dezavantajları genellikle bu sınırlamadan daha ağır basıyor.
SO_CONDITIONAL_ACCEPT yuva seçeneğiyle çağrılan getockopt işlevi, uygulamanın koşullu kabul seçeneğinin geçerli durumunu almasına izin verir, ancak bu özellik normalde kullanılmaz. Bir uygulamanın bir yuvada koşullu kabulü etkinleştirmesi gerekiyorsa, seçeneği etkinleştirmek için setsockopt işlevini çağırır.
Ws2def.h üst bilgi dosyasının Winsock2.h dosyasına otomatik olarak eklendiğini ve hiçbir zaman doğrudan kullanılmaması gerektiğini unutmayın.
Gereksinimler
| Gereksinim | Değer |
|---|---|
| Desteklenen en düşük düzeydeki istemci |
Windows Vista [yalnızca masaüstü uygulamaları] |
| Desteklenen en düşük sunucu |
Windows Server 2008 [yalnızca masaüstü uygulamaları] |
| Header |
|
Ayrıca bakınız