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.
Ağ iletişiminin bir uç noktası olan Bir Windows Yuvayı temsil eder.
Sözdizimi
class CAsyncSocket : public CObject
Üyeler
Ortak Oluşturucular
| Veri Akışı Adı | Açıklama |
|---|---|
CAsyncSocket::CAsyncSocket |
Bir CAsyncSocket nesne oluşturur. |
Genel Yöntemler
| Veri Akışı Adı | Açıklama |
|---|---|
CAsyncSocket::Accept |
Yuvadaki bir bağlantıyı kabul eder. |
CAsyncSocket::AsyncSelect |
Yuva için olay bildirimi isteğinde bulunur. |
CAsyncSocket::Attach |
Bir nesneye yuva tutamacını CAsyncSocket ekler. |
CAsyncSocket::Bind |
Yerel adresi yuvayla ilişkilendirir. |
CAsyncSocket::Close |
Yuvayı kapatır. |
CAsyncSocket::Connect |
Eş yuvayla bağlantı kurar. |
CAsyncSocket::Create |
Bir yuva oluşturur. |
CAsyncSocket::CreateEx |
Gelişmiş seçeneklere sahip bir yuva oluşturur. |
CAsyncSocket::Detach |
Bir nesneden CAsyncSocket yuva tutamacını ayırır. |
CAsyncSocket::FromHandle |
Yuva tutamacı verilen bir CAsyncSocket nesneye işaretçi döndürür. |
CAsyncSocket::GetLastError |
Başarısız olan son işlemin hata durumunu alır. |
CAsyncSocket::GetPeerName |
Yuvanın bağlı olduğu eş yuvanın adresini alır. |
CAsyncSocket::GetPeerNameEx |
Yuvanın bağlı olduğu eş yuvanın adresini alır (IPv6 adreslerini işler). |
CAsyncSocket::GetSockName |
Yuvanın yerel adını alır. |
CAsyncSocket::GetSockNameEx |
Yuvanın yerel adını alır (IPv6 adreslerini işler). |
CAsyncSocket::GetSockOpt |
Yuva seçeneğini alır. |
CAsyncSocket::IOCtl |
Yuva modunu denetler. |
CAsyncSocket::Listen |
Gelen bağlantı isteklerini dinlemek için bir yuva oluşturur. |
CAsyncSocket::Receive |
Yuvadan veri alır. |
CAsyncSocket::ReceiveFrom |
Bir veri birimi alır ve kaynak adresi depolar. |
CAsyncSocket::ReceiveFromEx |
Bir veri birimi alır ve kaynak adresi depolar (IPv6 adreslerini işler). |
CAsyncSocket::Send |
Verileri bağlı bir yuvaya gönderir. |
CAsyncSocket::SendTo |
Verileri belirli bir hedefe gönderir. |
CAsyncSocket::SendToEx |
Verileri belirli bir hedefe gönderir (IPv6 adreslerini işler). |
CAsyncSocket::SetSockOpt |
Yuva seçeneğini ayarlar. |
CAsyncSocket::ShutDown |
Yuvada ve/veya Send çağrıları Receive devre dışı bırakır. |
CASyncSocket::Socket |
Bir yuva tutamacı ayırır. |
Korumalı Yöntemler
| Veri Akışı Adı | Açıklama |
|---|---|
CAsyncSocket::OnAccept |
çağrısı Acceptyaparak bekleyen bağlantı isteklerini kabul edebildiğini bir dinleme yuvasına bildirir. |
CAsyncSocket::OnClose |
Bağlı yuvanın kapandığını bir yuvaya bildirir. |
CAsyncSocket::OnConnect |
Bağlantı girişiminin başarıyla veya hatayla tamamlandığını bir bağlantı yuvasına bildirir. |
CAsyncSocket::OnOutOfBandData |
Alıcı yuvaya, genellikle acil bir ileti olmak üzere, bant dışı verilerin okunması gerektiğini bildirir. |
CAsyncSocket::OnReceive |
bir dinleme yuvasına çağrılarak Receivealınacak veriler olduğunu bildirir. |
CAsyncSocket::OnSend |
çağrısı Sendyaparak veri gönderebileceğini bir yuvaya bildirir. |
Ortak İşleçler
| Veri Akışı Adı | Açıklama |
|---|---|
| CAsyncSocket::operator = | Nesneye yeni bir CAsyncSocket değer atar. |
| CAsyncSocket::operator SOCKET | Nesnenin tutamacını SOCKETCAsyncSocket almak için bu işleci kullanın. |
Ortak Veri Üyeleri
| Veri Akışı Adı | Açıklama |
|---|---|
CAsyncSocket::m_hSocket |
Bu SOCKET nesneye CAsyncSocket bağlı tanıtıcıyı gösterir. |
Açıklamalar
Sınıfı CAsyncSocket , Windows Yuva İşlevleri API'sini kapsüller ve MFC ile birlikte Windows Yuvalarını kullanmak isteyen programcılar için nesne odaklı bir soyutlama sağlar.
Bu sınıf, ağ iletişimlerini anladığınız varsayımını temel alır. Unicode ve çok baytlı karakter kümesi (MBCS) dizeleri arasındaki engelleme, bayt sırası farklarını ve dönüştürmeleri işlemek sizin sorumluluğundadır. Bu sorunları sizin için yöneten daha kullanışlı bir arabirim istiyorsanız bkz. sınıfı CSocket.
Bir CAsyncSocket nesneyi kullanmak için oluşturucusunu çağırın, ardından kabul edilen yuvalar dışında temel yuva tutamacını (türCreate) oluşturmak için işlevini çağırınSOCKET. Sunucu yuvası için üye işlevini çağırın Listen ve bir istemci yuvası için üye işlevini çağırın Connect . Sunucu yuvası, bir bağlantı isteği aldıktan sonra işlevi çağırmalıdır Accept . Yuvalar arasındaki iletişimi gerçekleştirmek için kalan CAsyncSocket işlevleri kullanın. Tamamlandıktan sonra, yığında oluşturulduysa nesneyi yok CAsyncSocket edin; yıkıcı işlevi otomatik olarak çağırır Close .
SOCKET Veri türü Windows Yuvaları: Arka Plan makalesinde açıklanmıştır.
Not
Statik olarak bağlı bir MFC uygulamasında ikincil iş parçacıklarında MFC yuvalarını kullanırken, yuva kitaplıklarını başlatmak için yuvaları kullanan her iş parçacığını çağırmanız AfxSocketInit gerekir. Varsayılan olarak, AfxSocketInit yalnızca birincil iş parçacığında çağrılır.
Daha fazla bilgi için bkzCAsyncSocketve ilgili makaleleri kullanma. ayrıca Windows Yuvaları 2 API'sini kullanma.
Devralma Hiyerarşisi
CAsyncSocket
Gereksinimler
Üstbilgi:afxsock.h
CAsyncSocket::Accept
Yuvadaki bir bağlantıyı kabul etmek için bu üye işlevini çağır.
virtual BOOL Accept(
CAsyncSocket& rConnectedSocket,
SOCKADDR* lpSockAddr = NULL,
int* lpSockAddrLen = NULL);
Parametreler
rConnectedSocket
Bağlantı için kullanılabilen yeni bir yuvayı tanımlayan başvuru.
lpSockAddr
Ağ üzerinde bilinen bağlantı yuvasının adresini alan bir SOCKADDR yapı işaretçisi. Bağımsız değişkenin lpSockAddr tam biçimi, yuva oluşturulduğunda oluşturulan adres ailesi tarafından belirlenir. ve/veya lpSockAddr değerine lpSockAddrLeneşitseNULL, kabul edilen yuvanın uzak adresi hakkında hiçbir bilgi döndürülür.
lpSockAddrLen
Adresin bayt cinsinden lpSockAddr uzunluğuna yönelik bir işaretçi.
lpSockAddrLen bir value-result parametresidir: başlangıçta tarafından lpSockAddrişaret edilen boşluk miktarını içermelidir; dönüşte döndürülen adresin gerçek uzunluğunu (bayt cinsinden) içerir.
Dönüş Değeri
İşlev başarılı olursa sıfır olmayan; aksi takdirde 0 ve belirli bir hata kodu çağrılarak GetLastErroralınabilir. Bu üye işlevi için aşağıdaki hatalar geçerlidir:
WSANOTINITIALISEDBu API'nin kullanılması için başarılıAfxSocketInitbir işlem gerçekleştirilmelidir.WSAENETDOWNWindows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.WSAEFAULTBağımsızlpSockAddrLendeğişken çok küçük (birSOCKADDRyapının boyutundan daha küçük).WSAEINPROGRESSEngelleyen bir Windows Yuvaları çağrısı devam ediyor.WSAEINVALListenkabul edilmeden önce çağrılmıyor.WSAEMFILEKabul etmek için girişte kuyruk boş olur ve kullanılabilir tanımlayıcı yoktur.WSAENOBUFSKullanılabilir arabellek alanı yok.WSAENOTSOCKTanımlayıcı bir yuva değil.WSAEOPNOTSUPPBaşvuruda bulunan yuva, bağlantı odaklı hizmeti destekleyen bir tür değildir.WSAEWOULDBLOCKYuva engellenmedi olarak işaretlenir ve kabul edilecek bağlantı yoktur.
Açıklamalar
Bu yordam, bekleyen bağlantılar kuyruğundaki ilk bağlantıyı ayıklar, bu yuvayla aynı özelliklere sahip yeni bir yuva oluşturur ve öğesine rConnectedSocketekler. Kuyrukta bekleyen bağlantı yoksa sıfır Accept döndürür ve GetLastError bir hata döndürür. Kabul edilen yuva (rConnectedSocket), daha fazla bağlantı kabul etmek için kullanılamaz. Özgün yuva açık ve dinlemede kalır.
bağımsız değişkeni lpSockAddr , iletişim katmanında bilinen bağlantı yuvasının adresiyle doldurulmuş bir sonuç parametresidir.
Accept gibi SOCK_STREAMbağlantı tabanlı yuva türleriyle kullanılır.
CAsyncSocket::AsyncSelect
Bir yuva için olay bildirimi istemek için bu üye işlevini çağır.
BOOL AsyncSelect(long lEvent = FD_READ | FD_WRITE | FD_OOB | FD_ACCEPT | FD_CONNECT | FD_CLOSE);
Parametreler
lEvent
Uygulamanın ilgilendiği ağ olaylarının bir bileşimini belirten bit maskesi.
FD_READOkumaya hazır olduğunu bildiren bir bildirim almak istiyorsunuz.FD_WRITEVeriler okunmaya uygun olduğunda bildirim almak istiyorsunuz.FD_OOBBant dışı verilerin geldiği bildirimini almak istiyorsunuz.FD_ACCEPTGelen bağlantıların bildirimini almak istiyorsunuz.FD_CONNECTBağlantı sonuçlarının bildirimini almak istiyorsunuz.FD_CLOSEBir yuva eş tarafından kapatıldığında bildirim almak istiyorsunuz.
Dönüş Değeri
İşlev başarılı olursa sıfır olmayan; aksi takdirde 0 ve belirli bir hata kodu çağrılarak GetLastErroralınabilir. Bu üye işlevi için aşağıdaki hatalar geçerlidir:
WSANOTINITIALISEDBu API'nin kullanılması için başarılıAfxSocketInitbir işlem gerçekleştirilmelidir.WSAENETDOWNWindows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.WSAEINVALBelirtilen parametrelerden birinin geçersiz olduğunu gösterir.WSAEINPROGRESSEngelleyen bir Windows Yuvaları işlemi devam ediyor.
Açıklamalar
Bu işlev, yuva için hangi MFC geri çağırma bildirimi işlevlerinin çağrılacağını belirtmek için kullanılır.
AsyncSelect otomatik olarak bu yuvayı engelsiz moda ayarlar. Daha fazla bilgi için Windows Yuvaları: Yuva Bildirimleri makalesine bakın.
CAsyncSocket::Attach
Tanıtıcıyı bir hSocket nesneye eklemek CAsyncSocket için bu üye işlevini çağırın.
BOOL Attach(
SOCKET hSocket, long lEvent = FD_READ | FD_WRITE | FD_OOB | FD_ACCEPT | FD_CONNECT | FD_CLOSE);
Parametreler
hSocket
Bir yuvanın tutamacını içerir.
lEvent
Uygulamanın ilgilendiği ağ olaylarının bir bileşimini belirten bit maskesi.
FD_READOkumaya hazır olduğunu bildiren bir bildirim almak istiyorsunuz.FD_WRITEVeriler okunmaya uygun olduğunda bildirim almak istiyorsunuz.FD_OOBBant dışı verilerin geldiği bildirimini almak istiyorsunuz.FD_ACCEPTGelen bağlantıların bildirimini almak istiyorsunuz.FD_CONNECTBağlantı sonuçlarının bildirimini almak istiyorsunuz.FD_CLOSEBir yuva eş tarafından kapatıldığında bildirim almak istiyorsunuz.
Dönüş Değeri
İşlev başarılı olursa sıfır olmayan.
Açıklamalar
Tanıtıcı SOCKET nesnenin m_hSocket veri üyesinde depolanır.
CAsyncSocket::Bind
Yerel adresi yuvayla ilişkilendirmek için bu üye işlevini çağırın.
BOOL Bind(
UINT nSocketPort,
LPCTSTR lpszSocketAddress = NULL);
BOOL Bind (
const SOCKADDR* lpSockAddr,
int nSockAddrLen);
Parametreler
nSocketPort
Yuva uygulamasını tanımlayan bağlantı noktası.
lpszSocketAddress
Ağ adresi, "128.56.22.8" gibi noktalı bir sayıdır. Bu parametre için dizenin NULL geçirilmesi, örneğin tüm ağ arabirimlerinde istemci etkinliğini dinlemesi gerektiğini gösterir CAsyncSocket .
lpSockAddr
Bu yuvaya atanacak adresi içeren bir SOCKADDR yapı işaretçisi.
nSockAddrLen
Adresin bayt cinsinden lpSockAddr uzunluğu.
Dönüş Değeri
İşlev başarılı olursa sıfır olmayan; aksi takdirde 0 ve belirli bir hata kodu çağrılarak GetLastErroralınabilir. Aşağıdaki liste, döndürülebilecek hatalardan birkaçını kapsar. Tam liste için bkz . Windows Yuvaları Hata Kodları.
WSANOTINITIALISEDBu API'nin kullanılması için başarılıAfxSocketInitbir işlem gerçekleştirilmelidir.WSAENETDOWNWindows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.WSAEADDRINUSEBelirtilen adres zaten kullanılıyor. (altındakiSO_REUSEADDRyuva seçeneğineSetSockOptbakın.)WSAEFAULTBağımsıznSockAddrLendeğişken çok küçük (birSOCKADDRyapının boyutundan daha küçük).WSAEINPROGRESSEngelleyen bir Windows Yuvaları çağrısı devam ediyor.WSAEAFNOSUPPORTBelirtilen adres ailesi bu bağlantı noktası tarafından desteklenmiyor.WSAEINVALYuva zaten bir adrese bağlı.WSAENOBUFSYeterli arabellek yok, çok fazla bağlantı var.WSAENOTSOCKTanımlayıcı bir yuva değil.
Açıklamalar
Bu yordam, sonraki Connect veya çağrıların öncesinde bağlı olmayan bir veri birimi veya Listen akış yuvasında kullanılır. Bağlantı isteklerini kabul etmeden önce, bir dinleme sunucusu yuvasının bir bağlantı noktası numarası seçmesi ve çağırarak BindBunu Windows Yuvaları'na duyurması gerekir.
Bind , adlandırılmamış bir yuvaya yerel bir ad atayarak yuvanın yerel ilişkilendirmesini (ana bilgisayar adresi/bağlantı noktası numarası) oluşturur.
CAsyncSocket::CAsyncSocket
Boş bir yuva nesnesi oluşturur.
CAsyncSocket();
Açıklamalar
Nesnesini oluşturduktan sonra, veri yapısını oluşturmak Create ve adresini bağlamak için üye işlevini çağırmanız SOCKET gerekir. (Windows Yuvaları iletişiminin sunucu tarafında, dinleme yuvası çağrıda kullanmak üzere bir yuva oluşturduğunda Accept , bu yuva için çağrı Create yapmazsınız.)
CAsyncSocket::Close
Yuvayı kapatır.
virtual void Close();
Açıklamalar
Bu işlev yuva tanımlayıcısını serbest bırakır, böylece buna yapılan diğer başvurular hatasıyla WSAENOTSOCKbaşarısız olur. Temel alınan yuvaya son başvuru buysa, ilişkili adlandırma bilgileri ve kuyruğa alınan veriler atılır. Yuva nesnesinin yıkıcısı sizi çağırır Close .
için CAsyncSocket, ancak için CSocketdeğil, semantiği Close yuva seçeneklerinden SO_LINGER ve SO_DONTLINGERetkilenir. Daha fazla bilgi için bkz. üye işlevi GetSockOpt.
CAsyncSocket::Connect
Bağlantısız bir akışa veya veri birimi yuvasına bağlantı kurmak için bu üye işlevini çağır.
BOOL Connect(
LPCTSTR lpszHostAddress,
UINT nHostPort);
BOOL Connect(
const SOCKADDR* lpSockAddr,
int nSockAddrLen);
Parametreler
lpszHostAddress
Bu nesnenin bağlı olduğu yuvanın ağ adresi: "ftp.microsoft.com" gibi bir makine adı veya "128.56.22.8" gibi noktalı bir sayı.
nHostPort
Yuva uygulamasını tanımlayan bağlantı noktası.
lpSockAddr
Bağlı yuvanın adresini içeren bir SOCKADDR yapı işaretçisi.
nSockAddrLen
Adresin bayt cinsinden lpSockAddr uzunluğu.
Dönüş Değeri
İşlev başarılı olursa sıfır olmayan; aksi takdirde 0 ve belirli bir hata kodu çağrılarak GetLastErroralınabilir. Bu, hata kodunu WSAEWOULDBLOCKgösteriyorsa ve uygulamanız geçersiz kılınabilir geri çağırmaları kullanıyorsa, bağlantı işlemi tamamlandığında uygulamanız bir OnConnect ileti alır. Bu üye işlevi için aşağıdaki hatalar geçerlidir:
WSANOTINITIALISEDBu API'nin kullanılması için başarılıAfxSocketInitbir işlem gerçekleştirilmelidir.WSAENETDOWNWindows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.WSAEADDRINUSEBelirtilen adres zaten kullanılıyor.WSAEINPROGRESSEngelleyen bir Windows Yuvaları çağrısı devam ediyor.WSAEADDRNOTAVAILBelirtilen adres yerel makineden kullanılamıyor.WSAEAFNOSUPPORTBelirtilen ailedeki adresler bu yuvayla kullanılamaz.WSAECONNREFUSEDBağlanma girişimi reddedildi.WSAEDESTADDRREQHedef adres gereklidir.WSAEFAULTBağımsıznSockAddrLendeğişken yanlış.WSAEINVALGeçersiz ana bilgisayar adresi.WSAEISCONNYuva zaten bağlı.WSAEMFILEBaşka dosya tanımlayıcısı yok.WSAENETUNREACHAğa şu anda bu konaktan ulaşılamıyor.WSAENOBUFSKullanılabilir arabellek alanı yok. Yuva bağlanamıyor.WSAENOTSOCKTanımlayıcı bir yuva değil.WSAETIMEDOUTBağlantı kurmadan bağlanma girişimi zaman aşımına uğradı.WSAEWOULDBLOCKYuva engellenmedi olarak işaretlenir ve bağlantı hemen tamamlanamaz.
Açıklamalar
Yuva ilişkisizse, sistem tarafından yerel ilişkilendirmeye benzersiz değerler atanır ve yuva bağlı olarak işaretlenir. Ad yapısının adres alanının tümü sıfırsa sıfır Connect döndüreceğini unutmayın. Genişletilmiş hata bilgilerini almak için üye işlevini çağırın GetLastError .
Akış yuvaları için (tür SOCK_STREAM), yabancı konağa etkin bir bağlantı başlatılır. Yuva çağrısı başarıyla tamamlandığında, yuva veri göndermeye/almaya hazırdır.
Bir veri birimi yuvası (tür SOCK_DGRAM) için, sonraki Send ve Receive çağrılarda kullanılacak bir varsayılan hedef ayarlanır.
CAsyncSocket::Create
Windows yuvasını Create oluşturmak ve eklemek için bir yuva nesnesi oluşturduktan sonra üye işlevini çağırın.
BOOL Create(
UINT nSocketPort = 0,
int nSocketType = SOCK_STREAM,
long lEvent = FD_READ | FD_WRITE | FD_OOB | FD_ACCEPT | FD_CONNECT | FD_CLOSE,
LPCTSTR lpszSocketAddress = NULL);
Parametreler
nSocketPort
Yuva ile kullanılacak iyi bilinen bir bağlantı noktası veya Windows Yuvaları'nın bir bağlantı noktası seçmesini istiyorsanız 0.
nSocketType
SOCK_STREAM veya SOCK_DGRAM.
lEvent
Uygulamanın ilgilendiği ağ olaylarının bir bileşimini belirten bit maskesi.
FD_READOkumaya hazır olduğunu bildiren bir bildirim almak istiyorsunuz.FD_WRITEYazmaya hazır olduğunu bildiren bir bildirim almak istiyorsunuz.FD_OOBBant dışı verilerin geldiği bildirimini almak istiyorsunuz.FD_ACCEPTGelen bağlantıların bildirimini almak istiyorsunuz.FD_CONNECTTamamlanan bağlantının bildirimini almak istiyorsunuz.FD_CLOSEYuva kapatma bildirimi almak istiyorsunuz.
lpszSockAddress
Bağlı yuvanın ağ adresini içeren bir dize işaretçisi, "128.56.22.8" gibi noktalı bir sayı. Bu parametre için dizenin NULL geçirilmesi, örneğin tüm ağ arabirimlerinde istemci etkinliğini dinlemesi gerektiğini gösterir CAsyncSocket .
Dönüş Değeri
İşlev başarılı olursa sıfır olmayan; aksi takdirde 0 ve belirli bir hata kodu çağrılarak GetLastErroralınabilir. Bu üye işlevi için aşağıdaki hatalar geçerlidir:
WSANOTINITIALISEDBu API'nin kullanılması için başarılıAfxSocketInitbir işlem gerçekleştirilmelidir.WSAENETDOWNWindows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.WSAEAFNOSUPPORTBelirtilen adres ailesi desteklenmiyor.WSAEINPROGRESSEngelleyen bir Windows Yuvaları işlemi devam ediyor.WSAEMFILEBaşka dosya tanımlayıcısı yok.WSAENOBUFSKullanılabilir arabellek alanı yok. Yuva oluşturulamıyor.WSAEPROTONOSUPPORTBelirtilen bağlantı noktası desteklenmiyor.WSAEPROTOTYPEBelirtilen bağlantı noktası bu yuva için yanlış türde.WSAESOCKTNOSUPPORTBelirtilen yuva türü bu adres ailesinde desteklenmiyor.
Açıklamalar
Create çağrıları Socket ve başarılı olursa, yuvayı belirtilen adrese bağlamak için çağırır Bind . Aşağıdaki yuva türleri desteklenir:
SOCK_STREAMSıralı, güvenilir, tam çift yönlü, bağlantı tabanlı bayt akışları sağlar. İnternet adresi ailesi için İletim Denetimi Protokolü'ni (TCP) kullanır.SOCK_DGRAMSabit (genellikle küçük) maksimum uzunlukta bağlantısız, güvenilir olmayan paketler olan veri birimlerini destekler. İnternet adresi ailesi için Kullanıcı Veri Birimi Protokolü'ni (UDP) kullanır.Not
AcceptÜye işlevi, parametresi olarak yeni, boşCSocketbir nesneye başvuru alır. çağırmadanAcceptönce bu nesneyi oluşturmanız gerekir. Bu yuva nesnesi kapsam dışına çıkarsa bağlantının kapandığını unutmayın. Bu yeni yuva nesnesi için çağırmayınCreate.
Önemli
Create iş parçacığı güvenli değildir . Farklı iş parçacıkları tarafından aynı anda çağrılabileceği çok iş parçacıklı bir ortamda çağırıyorsanız, her çağrıyı bir mutex veya başka bir eşitleme kilidiyle koruduğudan emin olun.
Akış ve veri birimi yuvaları hakkında daha fazla bilgi için Windows Yuvaları: Arka Plan ve Windows Yuvaları: Bağlantı Noktaları ve Yuva Adresleri ve Windows Yuvaları 2 API makalelerine bakın.
CAsyncSocket::CreateEx
Windows yuvasını CreateEx oluşturmak ve eklemek için bir yuva nesnesi oluşturduktan sonra üye işlevini çağırın.
Yuva türü gibi gelişmiş seçenekler sağlamanız gerektiğinde bu işlevi kullanın.
BOOL CreateEx(
ADDRINFOT* pAI,
long lEvent = FD_READ | FD_WRITE | FD_OOB | FD_ACCEPT | FD_CONNECT | FD_CLOSE);
Parametreler
pAI
Aile ve yuva türü gibi yuva bilgilerini tutmak için bir ADDRINFOT işaretçi.
lEvent
Uygulamanın ilgilendiği ağ olaylarının bir bileşimini belirten bit maskesi.
FD_READOkumaya hazır olduğunu bildiren bir bildirim almak istiyorsunuz.FD_WRITEYazmaya hazır olduğunu bildiren bir bildirim almak istiyorsunuz.FD_OOBBant dışı verilerin geldiği bildirimini almak istiyorsunuz.FD_ACCEPTGelen bağlantıların bildirimini almak istiyorsunuz.FD_CONNECTTamamlanan bağlantının bildirimini almak istiyorsunuz.FD_CLOSEYuva kapatma bildirimi almak istiyorsunuz.
Dönüş Değeri
için Create()dönüş değerine bakın.
Açıklamalar
için Create()açıklamalara bakın.
CAsyncSocket::Detach
Veri üyesindeki tanıtıcıyı SOCKET nesnesinden ayırmak ve olarak ayarlamak m_hSocket için CAsyncSocketbu üye işlevini çağırınm_hSocket.NULL
SOCKET Detach();
CAsyncSocket::FromHandle
Bir nesnenin işaretçisini CAsyncSocket döndürür.
static CAsyncSocket* PASCAL FromHandle(SOCKET hSocket);
Parametreler
hSocket
Bir yuvanın tutamacını içerir.
Dönüş Değeri
Bir CAsyncSocket nesnenin işaretçisi veya NULL öğesine eklenmiş CAsyncSocketnesne yoksahSocket.
Açıklamalar
Tanıtıcı SOCKET verildiğinde, bir CAsyncSocket nesne tanıtıcıya bağlı değilse, üye işlevi döndürür NULL.
CAsyncSocket::GetLastError
Başarısız olan son işlemin hata durumunu almak için bu üye işlevini çağırın.
static int PASCAL GetLastError();
Dönüş Değeri
Dönüş değeri, bu iş parçacığı tarafından gerçekleştirilen son Windows Yuvaları API yordamının hata kodunu gösterir.
Açıklamalar
Belirli bir üye işlevi bir hata oluştuğuna işaret ettiğinde, GetLastError uygun hata kodunu almak için çağrılmalıdır. İlgili hata kodlarının listesi için tek tek üye işlev açıklamalarına bakın.
Hata kodları hakkında daha fazla bilgi için bkz . Windows Sockets 2 API.
CAsyncSocket::GetPeerName
Bu yuvanın bağlı olduğu eş yuvanın adresini almak için bu üye işlevini çağırın.
BOOL GetPeerName(
CString& rPeerAddress,
UINT& rPeerPort);
BOOL GetPeerName(
SOCKADDR* lpSockAddr,
int* lpSockAddrLen);
Parametreler
rPeerAddress
CString Noktalı sayı IP adresi alan bir nesneye başvuru.
rPeerPort
UINT Bağlantı noktasını depolayan bir başvuru.
lpSockAddr
Eş yuvanın SOCKADDR adını alan yapıya yönelik bir işaretçi.
lpSockAddrLen
Adresin bayt cinsinden lpSockAddr uzunluğuna yönelik bir işaretçi. Döndürülen bağımsız değişken, lpSockAddrLen döndürülen gerçek boyutunu lpSockAddr bayt cinsinden içerir.
Dönüş Değeri
İşlev başarılı olursa sıfır olmayan; aksi takdirde 0 ve belirli bir hata kodu çağrılarak GetLastErroralınabilir. Bu üye işlevi için aşağıdaki hatalar geçerlidir:
WSANOTINITIALISEDBu API'nin kullanılması için başarılıAfxSocketInitbir işlem gerçekleştirilmelidir.WSAENETDOWNWindows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.WSAEFAULTBağımsızlpSockAddrLendeğişken yeterince büyük değil.WSAEINPROGRESSEngelleyen bir Windows Yuvaları çağrısı devam ediyor.WSAENOTCONNYuva bağlı değil.WSAENOTSOCKTanımlayıcı bir yuva değil.
Açıklamalar
IPv6 adreslerini işlemek için kullanın CAsyncSocket::GetPeerNameEx.
CAsyncSocket::GetPeerNameEx
Bu yuvanın bağlı olduğu eş yuvanın adresini almak için bu üye işlevini çağırın (IPv6 adreslerini işler).
BOOL GetPeerNameEx(
CString& rPeerAddress,
UINT& rPeerPort);
Parametreler
rPeerAddress
CString Noktalı sayı IP adresi alan bir nesneye başvuru.
rPeerPort
UINT Bağlantı noktasını depolayan bir başvuru.
Dönüş Değeri
İşlev başarılı olursa sıfır olmayan; aksi takdirde 0 ve belirli bir hata kodu çağrılarak GetLastErroralınabilir. Bu üye işlevi için aşağıdaki hatalar geçerlidir:
WSANOTINITIALISEDBu API'nin kullanılması için başarılıAfxSocketInitbir işlem gerçekleştirilmelidir.WSAENETDOWNWindows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.WSAEFAULTBağımsızlpSockAddrLendeğişken yeterince büyük değil.WSAEINPROGRESSEngelleyen bir Windows Yuvaları çağrısı devam ediyor.WSAENOTCONNYuva bağlı değil.WSAENOTSOCKTanımlayıcı bir yuva değil.
Açıklamalar
Bu işlev, CAsyncSocket::GetPeerName IPv6 adreslerinin yanı sıra eski protokolleri de işlemesi dışında aynıdır.
CAsyncSocket::GetSockName
Yuvanın yerel adını almak için bu üye işlevini çağırın.
BOOL GetSockName(
CString& rSocketAddress,
UINT& rSocketPort);
BOOL GetSockName(
SOCKADDR* lpSockAddr,
int* lpSockAddrLen);
Parametreler
rSocketAddress
CString Noktalı sayı IP adresi alan bir nesneye başvuru.
rSocketPort
UINT Bağlantı noktasını depolayan bir başvuru.
lpSockAddr
Yuvanın adresini alan bir SOCKADDR yapı işaretçisi.
lpSockAddrLen
Adresin bayt cinsinden lpSockAddr uzunluğuna yönelik bir işaretçi.
Dönüş Değeri
İşlev başarılı olursa sıfır olmayan; aksi takdirde 0 ve belirli bir hata kodu çağrılarak GetLastErroralınabilir. Bu üye işlevi için aşağıdaki hatalar geçerlidir:
WSANOTINITIALISEDBu API'nin kullanılması için başarılıAfxSocketInitbir işlem gerçekleştirilmelidir.WSAENETDOWNWindows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.WSAEFAULTBağımsızlpSockAddrLendeğişken yeterince büyük değil.WSAEINPROGRESSEngelleyen bir Windows Yuvaları işlemi devam ediyor.WSAENOTSOCKTanımlayıcı bir yuva değil.WSAEINVALYuva ileBindbir adrese bağlı değil.
Açıklamalar
Bu çağrı özellikle ilk kez yapılmadan Connect bir Bind çağrı yapıldığında kullanışlıdır; bu çağrı, sistem tarafından ayarlanan yerel ilişkilendirmeyi belirleyebileceğiniz tek aracı sağlar.
IPv6 adreslerini işlemek için CAsyncSocket::GetSockNameEx
CAsyncSocket::GetSockNameEx
Bir yuvanın yerel adını almak için bu üye işlevini çağırın (IPv6 adreslerini işler).
BOOL GetSockNameEx(
CString& rSocketAddress,
UINT& rSocketPort);
Parametreler
rSocketAddress
CString Noktalı sayı IP adresi alan bir nesneye başvuru.
rSocketPort
UINT Bağlantı noktasını depolayan bir başvuru.
Dönüş Değeri
İşlev başarılı olursa sıfır olmayan; aksi takdirde 0 ve belirli bir hata kodu çağrılarak GetLastErroralınabilir. Bu üye işlevi için aşağıdaki hatalar geçerlidir:
WSANOTINITIALISEDBu API'nin kullanılması için başarılıAfxSocketInitbir işlem gerçekleştirilmelidir.WSAENETDOWNWindows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.WSAEFAULTBağımsızlpSockAddrLendeğişken yeterince büyük değil.WSAEINPROGRESSEngelleyen bir Windows Yuvaları işlemi devam ediyor.WSAENOTSOCKTanımlayıcı bir yuva değil.WSAEINVALYuva ileBindbir adrese bağlı değil.
Açıklamalar
Bu çağrı, IPv6 adreslerinin yanı sıra eski protokolleri de işlemesi dışında aynıdır CAsyncSocket::GetSockName .
Bu çağrı özellikle ilk kez yapılmadan Connect bir Bind çağrı yapıldığında kullanışlıdır; bu çağrı, sistem tarafından ayarlanan yerel ilişkilendirmeyi belirleyebileceğiniz tek aracı sağlar.
CAsyncSocket::GetSockOpt
Yuva seçeneğini almak için bu üye işlevini çağır.
BOOL GetSockOpt(
int nOptionName,
void* lpOptionValue,
int* lpOptionLen,
int nLevel = SOL_SOCKET);
Parametreler
nOptionName
Değerin alınacağı yuva seçeneği.
lpOptionValue
İstenen seçeneğin değerinin döndürülacağı arabelleğe yönelik bir işaretçi. Seçili seçenekle ilişkili değer arabellekte lpOptionValuedöndürülür. ile lpOptionLen işaret edilen tamsayı başlangıçta bu arabelleğinde bayt cinsinden boyutu içermelidir; dönüşte ise döndürülen değerin boyutuna ayarlanır. için SO_LINGER, bu bir LINGER yapının boyutu olacaktır; diğer tüm seçenekler için, seçeneğe bağlı olarak bool veya intboyutu olacaktır. Açıklamalar bölümünde seçeneklerin ve bunların boyutlarının listesine bakın.
lpOptionLen
Arabellek boyutunun lpOptionValue bayt cinsinden işaretçisi.
nLevel
Seçeneğin tanımlandığı düzey; desteklenen tek düzeyler ve'dir SOL_SOCKETIPPROTO_TCP.
Dönüş Değeri
İşlev başarılı olursa sıfır olmayan; aksi takdirde 0 ve belirli bir hata kodu çağrılarak GetLastErroralınabilir. Bir seçenek hiçbir zaman ile SetSockOptGetSockOpt ayarlanmadıysa, seçeneğin varsayılan değerini döndürür. Bu üye işlevi için aşağıdaki hatalar geçerlidir:
WSANOTINITIALISEDBu API'nin kullanılması için başarılıAfxSocketInitbir işlem gerçekleştirilmelidir.WSAENETDOWNWindows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.WSAEFAULTBağımsızlpOptionLendeğişken geçersizdi.WSAEINPROGRESSEngelleyen bir Windows Yuvaları işlemi devam ediyor.WSAENOPROTOOPTSeçenek bilinmiyor veya desteklenmiyor. Özellikle,SO_BROADCASTtüründeki yuvalardaSOCK_STREAMdesteklenmezkenSO_ACCEPTCONN, ,SO_DONTLINGER,SO_KEEPALIVE,SO_LINGERveSO_OOBINLINEtüründekiSOCK_DGRAMyuvalarda desteklenmez.WSAENOTSOCKTanımlayıcı bir yuva değil.
Açıklamalar
GetSockOpt herhangi bir durumdaki herhangi bir yuva ile ilişkili yuva seçeneği için geçerli değeri alır ve sonucu içinde lpOptionValuedepolar. Seçenekler paketlerin yönlendirilmesi, bant dışı veri aktarımı gibi yuva işlemlerini etkiler.
için GetSockOptaşağıdaki seçenekler desteklenir. Tür, tarafından lpOptionValueele alınan veri türünü tanımlar. seçeneği TCP_NODELAY düzeyi IPPROTO_TCPkullanır; diğer tüm seçenekler düzeyi SOL_SOCKETkullanır.
| Değer | Tür | Anlamı |
|---|---|---|
SO_ACCEPTCONN |
BOOL |
Yuva dinliyor. |
SO_BROADCAST |
BOOL |
Yuva, yayın iletilerinin iletimi için yapılandırılır. |
SO_DEBUG |
BOOL |
Hata ayıklama etkinleştirildi. |
SO_DONTLINGER |
BOOL |
True ise seçeneği SO_LINGER devre dışı bırakılır. |
SO_DONTROUTE |
BOOL |
Yönlendirme devre dışı bırakıldı. |
SO_ERROR |
int |
Hata durumunu alın ve temizleyin. |
SO_KEEPALIVE |
BOOL |
Canlı tutmalar gönderiliyor. |
SO_LINGER |
struct LINGER |
Geçerli kalan seçeneklerini döndürür. |
SO_OOBINLINE |
BOOL |
Bant dışı veriler normal veri akışında alınıyor. |
SO_RCVBUF |
int |
Almalar için arabellek boyutu. |
SO_REUSEADDR |
BOOL |
Yuva, zaten kullanımda olan bir adrese bağlanabilir. |
SO_SNDBUF |
int |
Gönderme için arabellek boyutu. |
SO_TYPE |
int |
Yuvanın türü (örneğin, SOCK_STREAM). |
TCP_NODELAY |
BOOL |
Birleştirme göndermek için Nagle algoritmasını devre dışı bırakır. |
Berkeley Yazılım Dağıtımı (BSD) için desteklenmeyen GetSockOpt seçenekler şunlardır:
| Değer | Tür | Anlamı |
|---|---|---|
SO_RCVLOWAT |
int |
Düşük su işareti alın. |
SO_RCVTIMEO |
int |
Alma zaman aşımı. |
SO_SNDLOWAT |
int |
Düşük su işareti gönder. |
SO_SNDTIMEO |
int |
Zaman aşımı gönderme. |
IP_OPTIONS |
IP üst bilgisindeki seçenekleri alın. | |
TCP_MAXSEG |
int |
TCP en büyük kesim boyutunu alma. |
Desteklenmeyen bir seçenekle çağrılmasıGetSockOpt, dosyasından WSAENOPROTOOPTdöndürülen bir hata koduyla GetLastError sonuçlanır.
CAsyncSocket::IOCtl
Yuvanın modunu denetlemek için bu üye işlevini çağırın.
BOOL IOCtl(
long lCommand,
DWORD* lpArgument);
Parametreler
lCommand
Yuvada gerçekleştirilecek komut.
lpArgument
için lCommandbir parametre işaretçisi.
Dönüş Değeri
İşlev başarılı olursa sıfır olmayan; aksi takdirde 0 ve belirli bir hata kodu çağrılarak GetLastErroralınabilir. Bu üye işlevi için aşağıdaki hatalar geçerlidir:
WSANOTINITIALISEDBu API'nin kullanılması için başarılıAfxSocketInitbir işlem gerçekleştirilmelidir.WSAENETDOWNWindows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.WSAEINVALlCommandgeçerli bir komut değildir veyalpArgumentiçinlCommandkabul edilebilir bir parametre değildir veya komut, sağlanan yuva türüne uygulanamaz.WSAEINPROGRESSEngelleyen bir Windows Yuvaları işlemi devam ediyor.WSAENOTSOCKTanımlayıcı bir yuva değil.
Açıklamalar
Bu yordam herhangi bir durumdaki herhangi bir yuvada kullanılabilir. Protokol ve iletişim alt sisteminden bağımsız olarak yuvayla ilişkili işletim parametrelerini almak veya almak için kullanılır. Aşağıdaki komutlar desteklenir:
FIONBIOYuvada engelleme modunu etkinleştirin veya devre dışı bırakın.lpArgumentParametre, engelleyici olmayan modun etkinleştirilmesi durumunda sıfır olmayan ve devre dışı bırakılacaksa sıfır olan öğesiniDWORDgösterir. Bir yuvada verildiyseAsyncSelect, yuvayı engelleme moduna geri ayarlamak için herhangiIOCtlbir girişim ileWSAEINVALbaşarısız olur. Yuvayı engelleme moduna geri döndürmek ve hatayı önlemekWSAEINVALiçin, bir uygulamanın önce parametresi 0'a eşit olarak çağırarakAsyncSelectAsyncSelectdevre dışı bırakmasılEventve ardından çağrısıIOCtlyapması gerekir.FIONREADBu yuvadan tek birReceiveçağrıyla okunabilecek en fazla bayt sayısını belirleyin. parametresi sonuculpArgumentdepolayanDWORDöğesiniIOCtlişaret eder. Bu yuva türündeyseSOCK_STREAM,FIONREADtekReceivebir veride okunabilen toplam veri miktarını döndürür; bu normalde yuvada kuyruğa alınan toplam veri miktarıyla aynıdır. Bu yuva türündeyseSOCK_DGRAM,FIONREADyuvada kuyruğa alınan ilk veri biriminin boyutunu döndürür.SIOCATMARKBant dışı verilerin tümünün okunup okunmadığını belirleyin. Bu yalnızca bant dışı verilerinSOCK_STREAM( ) satır içi alımı için yapılandırılmış bir türSO_OOBINLINEyuvası için geçerlidir. Okunmayı bekleyen bant dışı veri yoksa, işlem sıfır olmayan bir değer döndürür. Aksi takdirde 0 döndürür veReceiveyuvada gerçekleştirilen sonraki veyaReceiveFromgerçekleştirilen , "işaret" işaretinden önceki verilerin bir kısmını veya tümünü alır; uygulama herhangi bir verininSIOCATMARKkalıp kalmadığını belirlemek için işlemi kullanmalıdır. "Acil" (bant dışı) verilerden önce normal veriler varsa, sırayla alınır. (BirReceiveveya'nınReceiveFromaynı çağrıda bant dışı ve normal verileri hiçbir zaman karıştırmayacağını unutmayın.) parametresi sonuculpArgumentdepolayanDWORDöğesiniIOCtlişaret eder.
Bu işlev, Berkeley yuvalarında kullanılan bir alt kümesidir ioctl() . Özellikle, ile eşdeğer FIOASYNColan bir komut yoktur, ancak SIOCATMARK desteklenen tek yuva düzeyi komutudur.
CAsyncSocket::Listen
Gelen bağlantı isteklerini dinlemek için bu üye işlevini çağır.
BOOL Listen(int nConnectionBacklog = 5);
Parametreler
nConnectionBacklog
Bekleyen bağlantı kuyruğunun büyüyebileceği uzunluk üst sınırı. Geçerli aralık 1 ile 5 arasındadır.
Dönüş Değeri
İşlev başarılı olursa sıfır olmayan; aksi takdirde 0 ve belirli bir hata kodu çağrılarak GetLastErroralınabilir. Bu üye işlevi için aşağıdaki hatalar geçerlidir:
WSANOTINITIALISEDBu API'nin kullanılması için başarılıAfxSocketInitbir işlem gerçekleştirilmelidir.WSAENETDOWNWindows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.WSAEADDRINUSEKullanımdaki bir adresi dinleme girişiminde bulunuldu.WSAEINPROGRESSEngelleyen bir Windows Yuvaları işlemi devam ediyor.WSAEINVALYuva ileBindbağlı değil veya zaten bağlı.WSAEISCONNYuva zaten bağlı.WSAEMFILEBaşka dosya tanımlayıcısı yok.WSAENOBUFSKullanılabilir arabellek alanı yok.WSAENOTSOCKTanımlayıcı bir yuva değil.WSAEOPNOTSUPPBaşvuruda bulunan yuva, işlemi destekleyenListenbir türde değil.
Açıklamalar
Bağlantıları kabul etmek için yuva önce ile Createoluşturulur, ile gelen bağlantılar için bir kapsam belirtilir Listenve ardından ile bağlantılar kabul edilir Accept.
Listen yalnızca bağlantıları destekleyen yuvalara, yani türüne SOCK_STREAMsahip yuvalara uygulanır. Bu yuva, gelen bağlantıların kabul edildiği ve işlem tarafından kabul bekleyen kuyruğa alındığı "pasif" moda alınır.
Bu işlev genellikle bir kerede birden fazla bağlantı isteğine sahip olabilecek sunucular (veya bağlantıları kabul etmek isteyen herhangi bir uygulama) tarafından kullanılır: Bir bağlantı isteği kuyruk dolu olarak gelirse, istemci göstergesiyle WSAECONNREFUSEDbir hata alır.
Listen kullanılabilir bağlantı noktası olmadığında (tanımlayıcılar) rasyonel olarak çalışmaya devam etmeye çalışır. Kuyruk boşaltılana kadar bağlantıları kabul eder. Bağlantı noktaları kullanılabilir duruma gelirse, daha sonra veya çağrısı ListenAccept , mümkünse kuyruğu geçerli veya en son "kapsam"a yeniden doldurur ve gelen bağlantıları dinlemeye devam eder.
CAsyncSocket::m_hSocket
SOCKET Bu CAsyncSocket nesne tarafından kapsüllenen yuvanın tutamacını içerir.
SOCKET m_hSocket;
CAsyncSocket::OnAccept
Üye işlevini çağırarak bekleyen bağlantı isteklerini kabul edebildiğini bir dinleme yuvasına bildirmek için çerçeve tarafından çağrılır Accept .
virtual void OnAccept(int nErrorCode);
Parametreler
nErrorCode
Yuvadaki en son hata. Aşağıdaki hata kodları üye işlevi için OnAccept geçerlidir:
0 İşlev başarıyla yürütüldü.
WSAENETDOWNWindows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.
Açıklamalar
Daha fazla bilgi için bkz . Windows Yuvaları: Yuva Bildirimleri.
CAsyncSocket::OnClose
Bu yuvaya bağlı yuvanın işlemi tarafından kapatıldığını bildirmek için çerçeve tarafından çağrılır.
virtual void OnClose(int nErrorCode);
Parametreler
nErrorCode
Yuvadaki en son hata. Üye işlevi için OnClose aşağıdaki hata kodları geçerlidir:
0 İşlev başarıyla yürütüldü.
WSAENETDOWNWindows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.WSAECONNRESETBağlantı uzak taraf tarafından sıfırlandı.WSAECONNABORTEDZaman aşımı veya başka bir hata nedeniyle bağlantı durduruldu.
Açıklamalar
Daha fazla bilgi için bkz . Windows Yuvaları: Yuva Bildirimleri.
CAsyncSocket::OnConnect
Bu bağlantı yuvasına bağlantı girişiminin başarıyla veya hatayla tamamlandığını bildirmek için çerçeve tarafından çağrılır.
virtual void OnConnect(int nErrorCode);
Parametreler
nErrorCode
Yuvadaki en son hata. Üye işlevi için OnConnect aşağıdaki hata kodları geçerlidir:
0 İşlev başarıyla yürütüldü.
WSAEADDRINUSEBelirtilen adres zaten kullanılıyor.WSAEADDRNOTAVAILBelirtilen adres yerel makineden kullanılamıyor.WSAEAFNOSUPPORTBelirtilen ailedeki adresler bu yuvayla kullanılamaz.WSAECONNREFUSEDBağlanma girişimi zorla reddedildi.WSAEDESTADDRREQHedef adres gereklidir.WSAEFAULTBağımsızlpSockAddrLendeğişken yanlış.WSAEINVALYuva zaten bir adrese bağlı.WSAEISCONNYuva zaten bağlı.WSAEMFILEBaşka dosya tanımlayıcısı yok.WSAENETUNREACHAğa şu anda bu konaktan ulaşılamıyor.WSAENOBUFSKullanılabilir arabellek alanı yok. Yuva bağlanamıyor.WSAENOTCONNYuva bağlı değil.WSAENOTSOCKTanımlayıcı bir yuva değil bir dosyadır.WSAETIMEDOUTBağlanma girişimi, bağlantı kurulmadan zaman aşımına uğradı.
Açıklamalar
Not
CSocket içinde OnConnectbildirim işlevi hiçbir zaman çağrılmaz. Bağlantılar için, bağlantı tamamlandığında (başarılı veya hatalı) döndürülecek olan öğesini çağırmanız Connectyeterlidir. Bağlantı bildirimlerinin nasıl işlenme şekli bir MFC uygulama ayrıntısıdır.
Daha fazla bilgi için bkz . Windows Yuvaları: Yuva Bildirimleri.
Örnek
void CMyAsyncSocket::OnConnect(int nErrorCode) // CMyAsyncSocket is
// derived from CAsyncSocket
{
if (0 != nErrorCode)
{
switch (nErrorCode)
{
case WSAEADDRINUSE:
AfxMessageBox(_T("The specified address is already in use.\n"));
break;
case WSAEADDRNOTAVAIL:
AfxMessageBox(_T("The specified address is not available from ")
_T("the local machine.\n"));
break;
case WSAEAFNOSUPPORT:
AfxMessageBox(_T("Addresses in the specified family cannot be ")
_T("used with this socket.\n"));
break;
case WSAECONNREFUSED:
AfxMessageBox(_T("The attempt to connect was forcefully rejected.\n"));
break;
case WSAEDESTADDRREQ:
AfxMessageBox(_T("A destination address is required.\n"));
break;
case WSAEFAULT:
AfxMessageBox(_T("The lpSockAddrLen argument is incorrect.\n"));
break;
case WSAEINVAL:
AfxMessageBox(_T("The socket is already bound to an address.\n"));
break;
case WSAEISCONN:
AfxMessageBox(_T("The socket is already connected.\n"));
break;
case WSAEMFILE:
AfxMessageBox(_T("No more file descriptors are available.\n"));
break;
case WSAENETUNREACH:
AfxMessageBox(_T("The network cannot be reached from this host ")
_T("at this time.\n"));
break;
case WSAENOBUFS:
AfxMessageBox(_T("No buffer space is available. The socket ")
_T("cannot be connected.\n"));
break;
case WSAENOTCONN:
AfxMessageBox(_T("The socket is not connected.\n"));
break;
case WSAENOTSOCK:
AfxMessageBox(_T("The descriptor is a file, not a socket.\n"));
break;
case WSAETIMEDOUT:
AfxMessageBox(_T("The attempt to connect timed out without ")
_T("establishing a connection. \n"));
break;
default:
TCHAR szError[256];
_stprintf_s(szError, _T("OnConnect error: %d"), nErrorCode);
AfxMessageBox(szError);
break;
}
AfxMessageBox(_T("Please close the application"));
}
CAsyncSocket::OnConnect(nErrorCode);
}
CAsyncSocket::OnOutOfBandData
Alıcı yuvaya gönderilecek bant dışı veriler olduğunu bildirmek için çerçeve tarafından çağrılır.
virtual void OnOutOfBandData(int nErrorCode);
Parametreler
nErrorCode
Yuvadaki en son hata. Üye işlevi için OnOutOfBandData aşağıdaki hata kodları geçerlidir:
0 İşlev başarıyla yürütüldü.
WSAENETDOWNWindows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.
Açıklamalar
Bant dışı veriler, türündeki SOCK_STREAMher bağlı yuva çiftiyle ilişkili mantıksal olarak bağımsız bir kanaldır. Kanal genellikle acil verileri göndermek için kullanılır.
MFC bant dışı verileri destekler, ancak sınıf CAsyncSocket kullanıcılarının bunları kullanmaları önerilmez. Bunun daha kolay yolu, bu tür verileri geçirmek için ikinci bir yuva oluşturmaktır. Bant dışı veriler hakkında daha fazla bilgi için bkz . Windows Yuvaları: Yuva Bildirimleri.
CAsyncSocket::OnReceive
Bu yuvaya, arabellekte üye işlevi çağrılarak alınabilecek veriler olduğunu bildirmek için çerçeve tarafından çağrılır Receive .
virtual void OnReceive(int nErrorCode);
Parametreler
nErrorCode
Yuvadaki en son hata. Üye işlevi için OnReceive aşağıdaki hata kodları geçerlidir:
0 İşlev başarıyla yürütüldü.
WSAENETDOWNWindows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.
Açıklamalar
Daha fazla bilgi için bkz . Windows Yuvaları: Yuva Bildirimleri.
Örnek
void CMyAsyncSocket::OnReceive(int nErrorCode) // CMyAsyncSocket is
// derived from CAsyncSocket
{
static int i = 0;
i++;
TCHAR buff[4096];
int nRead;
nRead = Receive(buff, 4096);
switch (nRead)
{
case 0:
Close();
break;
case SOCKET_ERROR:
if (GetLastError() != WSAEWOULDBLOCK)
{
AfxMessageBox(_T("Error occurred"));
Close();
}
break;
default:
buff[nRead] = _T('\0'); //terminate the string
CString szTemp(buff);
m_strRecv += szTemp; // m_strRecv is a CString declared
// in CMyAsyncSocket
if (szTemp.CompareNoCase(_T("bye")) == 0)
{
ShutDown();
s_eventDone.SetEvent();
}
}
CAsyncSocket::OnReceive(nErrorCode);
}
CAsyncSocket::OnSend
Artık üye işlevini çağırarak veri gönderebileceğini yuvaya bildirmek için çerçeve tarafından çağrılır Send .
virtual void OnSend(int nErrorCode);
Parametreler
nErrorCode
Yuvadaki en son hata. Üye işlevi için OnSend aşağıdaki hata kodları geçerlidir:
0 İşlev başarıyla yürütüldü.
WSAENETDOWNWindows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.
Açıklamalar
Daha fazla bilgi için bkz . Windows Yuvaları: Yuva Bildirimleri.
Örnek
// CMyAsyncSocket is derived from CAsyncSocket and defines the
// following variables:
// CString m_sendBuffer; //for async send
// int m_nBytesSent;
// int m_nBytesBufferSize;
void CMyAsyncSocket::OnSend(int nErrorCode)
{
while (m_nBytesSent < m_nBytesBufferSize)
{
int dwBytes;
if ((dwBytes = Send((LPCTSTR)m_sendBuffer + m_nBytesSent,
m_nBytesBufferSize - m_nBytesSent)) == SOCKET_ERROR)
{
if (GetLastError() == WSAEWOULDBLOCK)
{
break;
}
else
{
TCHAR szError[256];
_stprintf_s(szError, _T("Server Socket failed to send: %d"),
GetLastError());
Close();
AfxMessageBox(szError);
}
}
else
{
m_nBytesSent += dwBytes;
}
}
if (m_nBytesSent == m_nBytesBufferSize)
{
m_nBytesSent = m_nBytesBufferSize = 0;
m_sendBuffer = _T("");
}
CAsyncSocket::OnSend(nErrorCode);
}
CAsyncSocket::operator =
Nesneye yeni bir CAsyncSocket değer atar.
void operator=(const CAsyncSocket& rSrc);
Parametreler
rSrc
Var olan CAsyncSocket bir nesneye başvuru.
Açıklamalar
Var olan CAsyncSocket bir nesneyi başka CAsyncSocket bir nesneye kopyalamak için bu işlevi çağır.
CAsyncSocket::operator SOCKET
Nesnenin tutamacını SOCKETCAsyncSocket almak için bu işleci kullanın.
operator SOCKET() const;
Dönüş Değeri
Başarılı olursa, nesnesinin SOCKET tanıtıcısı; aksi takdirde , NULL.
Açıklamalar
Windows API'lerini doğrudan çağırmak için tutamacı kullanabilirsiniz.
CAsyncSocket::Receive
Bir yuvadan veri almak için bu üye işlevini çağır.
virtual int Receive(
void* lpBuf,
int nBufLen,
int nFlags = 0);
Parametreler
lpBuf
Gelen veriler için bir arabellek.
nBufLen
Bayt cinsinden uzunluğu lpBuf .
nFlags
Çağrının nasıl yapıldığını belirtir. Bu işlevin semantiği yuva seçenekleri ve nFlags parametresi tarafından belirlenir. İkincisi, aşağıdaki değerlerden herhangi biri C++ bit düzeyinde OR işleci| () ile birleştirilerek oluşturulur:
MSG_PEEKGelen verilere göz atın. Veriler arabelleğe kopyalanır ancak giriş kuyruğundan kaldırılmaz.MSG_OOBBant dışı verileri işleme.
Dönüş Değeri
Hata oluşmazsa, Receive alınan bayt sayısını döndürür. Bağlantı kapatılmışsa 0 döndürür. Aksi takdirde değeri SOCKET_ERROR döndürülür ve çağrılarak GetLastErrorbelirli bir hata kodu alınabilir. Bu üye işlevi için aşağıdaki hatalar geçerlidir:
WSANOTINITIALISEDBu API'nin kullanılması için başarılıAfxSocketInitbir işlem gerçekleştirilmelidir.WSAENETDOWNWindows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.WSAENOTCONNYuva bağlı değil.WSAEINPROGRESSEngelleyen bir Windows Yuvaları işlemi devam ediyor.WSAENOTSOCKTanımlayıcı bir yuva değil.WSAEOPNOTSUPPMSG_OOBbelirtildi, ancak yuva türündeSOCK_STREAMdeğil.WSAESHUTDOWNYuva kapatıldı; 0 veya 2 olarak ayarlanmış olarak çağrıldıktanReceivesonraShutDownbir yuvada çağrınHowyapmak mümkün değildir.WSAEWOULDBLOCKYuva engelleyici olarak işaretlenir veReceiveişlem engellenir.WSAEMSGSIZEVeri birimi belirtilen arabelleğe sığamayacak kadar büyük ve kesilmiş.WSAEINVALYuva ileBindbağlı değil.WSAECONNABORTEDSanal bağlantı hattı zaman aşımı veya başka bir hata nedeniyle durduruldu.WSAECONNRESETSanal bağlantı hattı uzak taraf tarafından sıfırlandı.
Açıklamalar
Bu işlev bağlı akış veya veri birimi yuvaları için kullanılır ve gelen verileri okumak için kullanılır.
türündeki SOCK_STREAMyuvalar için, sağlanan arabellek boyutuna kadar kullanılabilir durumda olduğu kadar çok bilgi döndürülür. Yuva bant dışı verilerin satır içi alımı için yapılandırılmışsa (yuva seçeneği SO_OOBINLINE) ve bant dışı veriler okunmuyorsa, yalnızca bant dışı veriler döndürülür. Uygulama, bant dışı verilerin okunmaya devam edip etmediğini belirlemek için veya IOCtlSIOCATMARK seçeneğini kullanabilirOnOutOfBandData.
Veri birimi yuvaları için veriler, sağlanan arabelleğin boyutuna kadar ilk sıralanmış veri biriminden ayıklanır. Veri birimi sağlanan arabellekten büyükse, arabellek veri biriminin ilk bölümüyle doldurulur, fazla veriler kaybolur ve Receive hata kodu olarak ayarlanmış SOCKET_ERRORolan değerini WSAEMSGSIZE döndürür. Yuvada kullanılabilir gelen veri yoksa hata kodu olarak ayarlanmış SOCKET_ERRORbir değeri WSAEWOULDBLOCK döndürülür. Geri OnReceive çağırma işlevi, daha fazla verinin ne zaman geldiğini belirlemek için kullanılabilir.
Yuva türündeyse SOCK_STREAM ve uzak taraf bağlantıyı düzgün bir şekilde kapattıysa, alınan 0 bayt ile hemen tamamlanır Receive . Bağlantı sıfırlandıysa, hatasıyla ReceiveWSAECONNRESETbaşarısız olur.
Receive her çağrıldığında CAsyncSocket::OnReceive yalnızca bir kez çağrılmalıdır.
Örnek
örneğine CAsyncSocket::OnReceivebakın.
CAsyncSocket::ReceiveFrom
Bir veri birimi almak ve kaynak adresi yapısında veya içinde SOCKADDRdepolamak için bu üye işlevini çağırınrSocketAddress.
int ReceiveFrom(
void* lpBuf,
int nBufLen,
CString& rSocketAddress,
UINT& rSocketPort,
int nFlags = 0);
int ReceiveFrom(
void* lpBuf,
int nBufLen,
SOCKADDR* lpSockAddr,
int* lpSockAddrLen,
int nFlags = 0);
Parametreler
lpBuf
Gelen veriler için bir arabellek.
nBufLen
Bayt cinsinden uzunluğu lpBuf .
rSocketAddress
CString Noktalı sayı IP adresi alan bir nesneye başvuru.
rSocketPort
UINT Bağlantı noktasını depolayan bir başvuru.
lpSockAddr
Dönüşte kaynak adresi tutan bir SOCKADDR yapıya yönelik işaretçi.
lpSockAddrLen
Bayt cinsinden lpSockAddr kaynak adresin uzunluğuna yönelik bir işaretçi.
nFlags
Çağrının nasıl yapıldığını belirtir. Bu işlevin semantiği yuva seçenekleri ve nFlags parametresi tarafından belirlenir. İkincisi, aşağıdaki değerlerden herhangi biri C++ bit düzeyinde OR işleci| () ile birleştirilerek oluşturulur:
MSG_PEEKGelen verilere göz atın. Veriler arabelleğe kopyalanır ancak giriş kuyruğundan kaldırılmaz.MSG_OOBBant dışı verileri işleme.
Dönüş Değeri
Hata oluşmazsa, ReceiveFrom alınan bayt sayısını döndürür. Bağlantı kapatılmışsa 0 döndürür. Aksi takdirde değeri SOCKET_ERROR döndürülür ve çağrılarak GetLastErrorbelirli bir hata kodu alınabilir. Bu üye işlevi için aşağıdaki hatalar geçerlidir:
WSANOTINITIALISEDBu API'nin kullanılması için başarılıAfxSocketInitbir işlem gerçekleştirilmelidir.WSAENETDOWNWindows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.WSAEFAULTlpSockAddrLenBağımsız değişken geçersizdi:lpSockAddrArabellek eş adresini barındıramayacak kadar küçük.WSAEINPROGRESSEngelleyen bir Windows Yuvaları işlemi devam ediyor.WSAEINVALYuva ileBindbağlı değil.WSAENOTCONNYuva bağlı değil (SOCK_STREAMyalnızca).WSAENOTSOCKTanımlayıcı bir yuva değil.WSAEOPNOTSUPPMSG_OOBbelirtildi, ancak yuva türündeSOCK_STREAMdeğil.WSAESHUTDOWNYuva kapatıldı; 0 veya 2 olarak ayarlanmış olarak çağrıldıktanReceiveFromsonraShutDownbir yuvada çağrınHowyapmak mümkün değildir.WSAEWOULDBLOCKYuva engelleyici olarak işaretlenir veReceiveFromişlem engellenir.WSAEMSGSIZEVeri birimi belirtilen arabelleğe sığamayacak kadar büyük ve kesilmiş.WSAECONNABORTEDSanal bağlantı hattı zaman aşımı veya başka bir hata nedeniyle durduruldu.WSAECONNRESETSanal bağlantı hattı uzak taraf tarafından sıfırlandı.
Açıklamalar
Bu işlev, (büyük olasılıkla bağlı) bir yuvadaki gelen verileri okumak ve verilerin gönderildiği adresi yakalamak için kullanılır.
IPv6 adreslerini işlemek için kullanın CAsyncSocket::ReceiveFromEx.
türündeki SOCK_STREAMyuvalar için, sağlanan arabellek boyutuna kadar kullanılabilir durumda olduğu kadar çok bilgi döndürülür. Yuva bant dışı verilerin satır içi alımı için yapılandırılmışsa (yuva seçeneği SO_OOBINLINE) ve bant dışı veriler okunmuyorsa, yalnızca bant dışı veriler döndürülür. Uygulama, bant dışı verilerin okunmaya devam edip etmediğini belirlemek için veya IOCtlSIOCATMARK seçeneğini kullanabilirOnOutOfBandData.
lpSockAddr ve lpSockAddrLen parametreleri yuvalar için SOCK_STREAM yoksayılır.
Veri birimi yuvaları için veriler, sağlanan arabelleğin boyutuna kadar ilk sıralanmış veri biriminden ayıklanır. Veri birimi sağlanan arabellekten daha büyükse, arabellek iletinin ilk bölümüyle doldurulur, fazla veriler kaybolur ve ReceiveFrom hata kodu olarak ayarlanmış SOCKET_ERRORolarak değerini WSAEMSGSIZE döndürür.
Sıfır değilse ve yuva türündeyse lpSockAddrSOCK_DGRAM, verileri gönderen yuvanın ağ adresi ilgili SOCKADDR yapıya kopyalanır. tarafından lpSockAddrLen işaret edilen değer, bu yapının boyutuna başlatılır ve iadede, burada depolanan adresin gerçek boyutunu gösterecek şekilde değiştirilir. Yuvada kullanılabilir gelen veri yoksa, ReceiveFrom yuva engeli kaldırılmadığı sürece çağrı verilerin gelmesini bekler. Bu durumda hata kodu olarak ayarlanmış SOCKET_ERRORbir değeri WSAEWOULDBLOCK döndürülür. Geri OnReceive arama, daha fazla verinin ne zaman geldiğini belirlemek için kullanılabilir.
Yuva türündeyse SOCK_STREAM ve uzak taraf bağlantıyı düzgün bir şekilde kapattıysa, alınan 0 bayt ile hemen tamamlanır ReceiveFrom .
CAsyncSocket::ReceiveFromEx
Bir veri birimi almak ve kaynak adresi yapıda veya içinde SOCKADDR depolamak için bu üye işlevini çağırın rSocketAddress (IPv6 adreslerini işler).
int ReceiveFromEx(
void* lpBuf,
int nBufLen,
CString& rSocketAddress,
UINT& rSocketPort,
int nFlags = 0);
Parametreler
lpBuf
Gelen veriler için bir arabellek.
nBufLen
Bayt cinsinden uzunluğu lpBuf .
rSocketAddress
CString Noktalı sayı IP adresi alan bir nesneye başvuru.
rSocketPort
UINT Bağlantı noktasını depolayan bir başvuru.
nFlags
Çağrının nasıl yapıldığını belirtir. Bu işlevin semantiği yuva seçenekleri ve nFlags parametresi tarafından belirlenir. İkincisi, aşağıdaki değerlerden herhangi biri C++ bit düzeyinde OR işleci| () ile birleştirilerek oluşturulur:
MSG_PEEKGelen verilere göz atın. Veriler arabelleğe kopyalanır ancak giriş kuyruğundan kaldırılmaz.MSG_OOBBant dışı verileri işleme.
Dönüş Değeri
Hata oluşmazsa, ReceiveFromEx alınan bayt sayısını döndürür. Bağlantı kapatılmışsa 0 döndürür. Aksi takdirde değeri SOCKET_ERROR döndürülür ve çağrılarak GetLastErrorbelirli bir hata kodu alınabilir. Bu üye işlevi için aşağıdaki hatalar geçerlidir:
WSANOTINITIALISEDBu API'nin kullanılması için başarılıAfxSocketInitbir işlem gerçekleştirilmelidir.WSAENETDOWNWindows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.WSAEFAULTlpSockAddrLenBağımsız değişken geçersizdi:lpSockAddrArabellek eş adresini barındıramayacak kadar küçük.WSAEINPROGRESSEngelleyen bir Windows Yuvaları işlemi devam ediyor.WSAEINVALYuva ileBindbağlı değil.WSAENOTCONNYuva bağlı değil (SOCK_STREAMyalnızca).WSAENOTSOCKTanımlayıcı bir yuva değil.WSAEOPNOTSUPPMSG_OOBbelirtildi, ancak yuva türündeSOCK_STREAMdeğil.WSAESHUTDOWNYuva kapatıldı; 0 veya 2 olarak ayarlanmış olarak çağrıldıktanReceiveFromExsonraShutDownbir yuvada çağrınHowyapmak mümkün değildir.WSAEWOULDBLOCKYuva engelleyici olarak işaretlenir veReceiveFromExişlem engellenir.WSAEMSGSIZEVeri birimi belirtilen arabelleğe sığamayacak kadar büyük ve kesilmiş.WSAECONNABORTEDSanal bağlantı hattı zaman aşımı veya başka bir hata nedeniyle durduruldu.WSAECONNRESETSanal bağlantı hattı uzak taraf tarafından sıfırlandı.
Açıklamalar
Bu işlev, (büyük olasılıkla bağlı) bir yuvadaki gelen verileri okumak ve verilerin gönderildiği adresi yakalamak için kullanılır.
Bu işlev, CAsyncSocket::ReceiveFrom IPv6 adreslerinin yanı sıra eski protokolleri de işlemesi dışında aynıdır.
türündeki SOCK_STREAMyuvalar için, sağlanan arabellek boyutuna kadar kullanılabilir durumda olduğu kadar çok bilgi döndürülür. Yuva bant dışı verilerin satır içi alımı için yapılandırılmışsa (yuva seçeneği SO_OOBINLINE) ve bant dışı veriler okunmuyorsa, yalnızca bant dışı veriler döndürülür. Uygulama, bant dışı verilerin okunmaya devam edip etmediğini belirlemek için veya IOCtlSIOCATMARK seçeneğini kullanabilirOnOutOfBandData.
lpSockAddr ve lpSockAddrLen parametreleri yuvalar için SOCK_STREAM yoksayılır.
Veri birimi yuvaları için veriler, sağlanan arabelleğin boyutuna kadar ilk sıralanmış veri biriminden ayıklanır. Veri birimi sağlanan arabellekten daha büyükse, arabellek iletinin ilk bölümüyle doldurulur, fazla veriler kaybolur ve ReceiveFromEx hata kodu olarak ayarlanmış SOCKET_ERRORolarak değerini WSAEMSGSIZE döndürür.
Sıfır değilse ve yuva türündeyse lpSockAddrSOCK_DGRAM, verileri gönderen yuvanın ağ adresi ilgili SOCKADDR yapıya kopyalanır. tarafından lpSockAddrLen işaret edilen değer, bu yapının boyutuna başlatılır ve iadede, burada depolanan adresin gerçek boyutunu gösterecek şekilde değiştirilir. Yuvada kullanılabilir gelen veri yoksa, ReceiveFromEx yuva engeli kaldırılmadığı sürece çağrı verilerin gelmesini bekler. Bu durumda hata kodu olarak ayarlanmış SOCKET_ERRORbir değeri WSAEWOULDBLOCK döndürülür. Geri OnReceive arama, daha fazla verinin ne zaman geldiğini belirlemek için kullanılabilir.
Yuva türündeyse SOCK_STREAM ve uzak taraf bağlantıyı düzgün bir şekilde kapattıysa, alınan 0 bayt ile hemen tamamlanır ReceiveFromEx .
CAsyncSocket::Send
Bağlı bir yuvada veri göndermek için bu üye işlevini çağır.
virtual int Send(
const void* lpBuf,
int nBufLen,
int nFlags = 0);
Parametreler
lpBuf
İletilecek verileri içeren bir arabellek.
nBufLen
Bayt cinsinden lpBuf verilerin uzunluğu.
nFlags
Çağrının nasıl yapıldığını belirtir. Bu işlevin semantiği yuva seçenekleri ve nFlags parametresi tarafından belirlenir. İkincisi, aşağıdaki değerlerden herhangi biri C++ bit düzeyinde OR işleci| () ile birleştirilerek oluşturulur:
MSG_DONTROUTEVerilerin yönlendirmeye tabi olmaması gerektiğini belirtir. Bir Windows Yuvaları sağlayıcısı bu bayrağı yoksaymayı seçebilir.MSG_OOBBant dışı veri gönder (SOCK_STREAMyalnızca).
Dönüş Değeri
Hata oluşmazsa, Send gönderilen toplam karakter sayısını döndürür. (Bunun tarafından nBufLenbelirtilen sayıdan küçük olabileceğini unutmayın.) Aksi takdirde değeri SOCKET_ERROR döndürülür ve çağrılarak GetLastErrorbelirli bir hata kodu alınabilir. Bu üye işlevi için aşağıdaki hatalar geçerlidir:
WSANOTINITIALISEDBu API'nin kullanılması için başarılıAfxSocketInitbir işlem gerçekleştirilmelidir.WSAENETDOWNWindows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.WSAEACCESİstenen adres bir yayın adresi, ancak uygun bayrak ayarlanmadı.WSAEINPROGRESSEngelleyen bir Windows Yuvaları işlemi devam ediyor.WSAEFAULTlpBufBağımsız değişken, kullanıcı adres alanının geçerli bir bölümünde değil.WSAENETRESETWindows Yuvaları uygulaması bağlantıyı bıraktığından bağlantı sıfırlanmalıdır.WSAENOBUFSWindows Yuvaları uygulaması bir arabellek kilitlenmesi bildirir.WSAENOTCONNYuva bağlı değil.WSAENOTSOCKTanımlayıcı bir yuva değil.WSAEOPNOTSUPPMSG_OOBbelirtildi, ancak yuva türündeSOCK_STREAMdeğil.WSAESHUTDOWNYuva kapatıldı; 1 veya 2 olarak ayarlanmış olarak çağrıldıktanSendsonraShutDownbir yuvada çağrınHowyapmak mümkün değildir.WSAEWOULDBLOCKYuva engelleyici olarak işaretlenir ve istenen işlem engellenir.WSAEMSGSIZEYuva türündedirSOCK_DGRAMve veri birimi, Windows Yuvaları uygulaması tarafından desteklenen maksimum değerden daha büyüktür.WSAEINVALYuva ileBindbağlı değil.WSAECONNABORTEDSanal bağlantı hattı zaman aşımı veya başka bir hata nedeniyle durduruldu.WSAECONNRESETSanal bağlantı hattı uzak taraf tarafından sıfırlandı.
Açıklamalar
Send bağlı akışa veya veri birimi yuvalarına giden veri yazmak için kullanılır. Veri birimi yuvaları için, tarafından iMaxUdpDgdöndürülen yapıdaki WSADATA öğesi tarafından AfxSocketInit verilen temel alt ağların maksimum IP paketi boyutunu aşmamaya dikkat edilmelidir. Veriler temel alınan protokolden atomik olarak geçemeyecek kadar uzunsa, hata WSAEMSGSIZE aracılığıyla GetLastErrordöndürülür ve hiçbir veri iletilmez.
Bir veri birimi yuvası için öğesinin başarıyla tamamlanmasının Send verilerin başarıyla teslim edildiğine işaret etmediğini unutmayın.
türündeki CAsyncSocketnesnelerdeSOCK_STREAM, hem yerel hem de yabancı konaklardaki arabellek kullanılabilirliğine bağlı olarak, yazılan bayt sayısı 1 ile istenen uzunluk arasında olabilir.
Örnek
örneğine CAsyncSocket::OnSendbakın.
CAsyncSocket::SendTo
Belirli bir hedefe veri göndermek için bu üye işlevini çağır.
int SendTo(
const void* lpBuf,
int nBufLen,
UINT nHostPort,
LPCTSTR lpszHostAddress = NULL,
int nFlags = 0);
int SendTo(
const void* lpBuf,
int nBufLen,
const SOCKADDR* lpSockAddr,
int nSockAddrLen,
int nFlags = 0);
Parametreler
lpBuf
İletilecek verileri içeren bir arabellek.
nBufLen
Bayt cinsinden lpBuf verilerin uzunluğu.
nHostPort
Yuva uygulamasını tanımlayan bağlantı noktası.
lpszHostAddress
Bu nesnenin bağlandığı yuvanın ağ adresi: "ftp.microsoft.com" gibi bir makine adı veya "128.56.22.8" gibi noktalı bir sayı.
nFlags
Çağrının nasıl yapıldığını belirtir. Bu işlevin semantiği yuva seçenekleri ve nFlags parametresi tarafından belirlenir. İkincisi, aşağıdaki değerlerden herhangi biri C++ bit düzeyinde OR işleci| () ile birleştirilerek oluşturulur:
MSG_DONTROUTEVerilerin yönlendirmeye tabi olmaması gerektiğini belirtir. Bir Windows Yuvaları sağlayıcısı bu bayrağı yoksaymayı seçebilir.MSG_OOBBant dışı veri gönder (SOCK_STREAMyalnızca).
lpSockAddr
Hedef yuvanın adresini içeren bir SOCKADDR yapıya yönelik işaretçi.
nSockAddrLen
Adresin bayt cinsinden lpSockAddr uzunluğu.
Dönüş Değeri
Hata oluşmazsa, SendTo gönderilen toplam karakter sayısını döndürür. (Bunun tarafından nBufLenbelirtilen sayıdan küçük olabileceğini unutmayın.) Aksi takdirde değeri SOCKET_ERROR döndürülür ve çağrılarak GetLastErrorbelirli bir hata kodu alınabilir. Bu üye işlevi için aşağıdaki hatalar geçerlidir:
WSANOTINITIALISEDBu API'nin kullanılması için başarılıAfxSocketInitbir işlem gerçekleştirilmelidir.WSAENETDOWNWindows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.WSAEACCESİstenen adres bir yayın adresi, ancak uygun bayrak ayarlanmadı.WSAEINPROGRESSEngelleyen bir Windows Yuvaları işlemi devam ediyor.WSAEFAULTlpBufveyalpSockAddrparametreleri kullanıcı adres alanının parçası değildir veyalpSockAddrbağımsız değişken çok küçüktür (birSOCKADDRyapının boyutundan daha küçüktür).WSAEINVALAna bilgisayar adı geçersiz.WSAENETRESETWindows Yuvaları uygulaması bağlantıyı bıraktığından bağlantı sıfırlanmalıdır.WSAENOBUFSWindows Yuvaları uygulaması bir arabellek kilitlenmesi bildirir.WSAENOTCONNYuva bağlı değil (SOCK_STREAMyalnızca).WSAENOTSOCKTanımlayıcı bir yuva değil.WSAEOPNOTSUPPMSG_OOBbelirtildi, ancak yuva türündeSOCK_STREAMdeğil.WSAESHUTDOWNYuva kapatıldı; 1 veya 2 olarak ayarlanmış olarak çağrıldıktanSendTosonraShutDownbir yuvada çağrınHowyapmak mümkün değildir.WSAEWOULDBLOCKYuva engelleyici olarak işaretlenir ve istenen işlem engellenir.WSAEMSGSIZEYuva türündedirSOCK_DGRAMve veri birimi, Windows Yuvaları uygulaması tarafından desteklenen maksimum değerden daha büyüktür.WSAECONNABORTEDSanal bağlantı hattı zaman aşımı veya başka bir hata nedeniyle durduruldu.WSAECONNRESETSanal bağlantı hattı uzak taraf tarafından sıfırlandı.WSAEADDRNOTAVAILBelirtilen adres yerel makineden kullanılamıyor.WSAEAFNOSUPPORTBelirtilen ailedeki adresler bu yuvayla kullanılamaz.WSAEDESTADDRREQHedef adres gereklidir.WSAENETUNREACHAğa şu anda bu konaktan ulaşılamıyor.
Açıklamalar
SendTo veri birimi veya akış yuvalarında kullanılır ve giden verileri yuvaya yazmak için kullanılır. Veri birimi yuvaları için, tarafından iMaxUdpDgdoldurulan yapıdaki WSADATA öğesi tarafından AfxSocketInit verilen temel alt ağların maksimum IP paketi boyutunu aşmamaya dikkat edilmelidir. Veriler temel alınan protokolden atomik olarak geçemeyecek kadar uzunsa, WSAEMSGSIZE hatası döndürülür ve hiçbir veri iletilmez.
öğesinin başarıyla tamamlanmasının SendTo verilerin başarıyla teslim edildiğine işaret etmediğini unutmayın.
SendTo yalnızca parametre tarafından tanımlanan belirli bir SOCK_DGRAM yuvaya veri birimi göndermek için bir yuvada lpSockAddr kullanılır.
Yayın göndermek için (yalnızca bir SOCK_DGRAM yayında), parametredeki lpSockAddr adres, hedeflenen bağlantı noktası numarasıyla birlikte özel IP adresi INADDR_BROADCAST (Windows Yuvaları üst bilgi dosyasında WINSOCK.Htanımlanır) kullanılarak oluşturulmalıdır. Veya parametresi ise lpszHostAddressNULLyuva yayın için yapılandırılır. Bir yayın veri biriminin parçalanmanın oluşabileceği boyutu aşması genellikle önerilmez; bu da veri biriminin veri bölümünün (üst bilgiler hariç) 512 bayt'ı aşmaması gerektiğini gösterir.
IPv6 adreslerini işlemek için kullanın CAsyncSocket::SendToEx.
CAsyncSocket::SendToEx
Belirli bir hedefe veri göndermek için bu üye işlevini çağırın (IPv6 adreslerini işler).
int SendToEx(
const void* lpBuf,
int nBufLen,
UINT nHostPort,
LPCTSTR lpszHostAddress = NULL,
int nFlags = 0);
Parametreler
lpBuf
İletilecek verileri içeren bir arabellek.
nBufLen
Bayt cinsinden lpBuf verilerin uzunluğu.
nHostPort
Yuva uygulamasını tanımlayan bağlantı noktası.
lpszHostAddress
Bu nesnenin bağlandığı yuvanın ağ adresi: "ftp.microsoft.com" gibi bir makine adı veya "128.56.22.8" gibi noktalı bir sayı.
nFlags
Çağrının nasıl yapıldığını belirtir. Bu işlevin semantiği yuva seçenekleri ve nFlags parametresi tarafından belirlenir. İkincisi, aşağıdaki değerlerden herhangi biri C++ bit düzeyinde OR işleci| () ile birleştirilerek oluşturulur:
MSG_DONTROUTEVerilerin yönlendirmeye tabi olmaması gerektiğini belirtir. Bir Windows Yuvaları sağlayıcısı bu bayrağı yoksaymayı seçebilir.MSG_OOBBant dışı veri gönder (SOCK_STREAMyalnızca).
Dönüş Değeri
Hata oluşmazsa, SendToEx gönderilen toplam karakter sayısını döndürür. (Bunun tarafından nBufLenbelirtilen sayıdan küçük olabileceğini unutmayın.) Aksi takdirde değeri SOCKET_ERROR döndürülür ve çağrılarak GetLastErrorbelirli bir hata kodu alınabilir. Bu üye işlevi için aşağıdaki hatalar geçerlidir:
WSANOTINITIALISEDBu API'nin kullanılması için başarılıAfxSocketInitbir işlem gerçekleştirilmelidir.WSAENETDOWNWindows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.WSAEACCESİstenen adres bir yayın adresi, ancak uygun bayrak ayarlanmadı.WSAEINPROGRESSEngelleyen bir Windows Yuvaları işlemi devam ediyor.WSAEFAULTlpBufveyalpSockAddrparametreleri kullanıcı adres alanının parçası değildir veyalpSockAddrbağımsız değişken çok küçüktür (birSOCKADDRyapının boyutundan daha küçüktür).WSAEINVALAna bilgisayar adı geçersiz.WSAENETRESETWindows Yuvaları uygulaması bağlantıyı bıraktığından bağlantı sıfırlanmalıdır.WSAENOBUFSWindows Yuvaları uygulaması bir arabellek kilitlenmesi bildirir.WSAENOTCONNYuva bağlı değil (SOCK_STREAMyalnızca).WSAENOTSOCKTanımlayıcı bir yuva değil.WSAEOPNOTSUPPMSG_OOBbelirtildi, ancak yuva türündeSOCK_STREAMdeğil.WSAESHUTDOWNYuva kapatıldı; 1 veya 2 olarak ayarlanmış olarak çağrıldıktanSendToExsonraShutDownbir yuvada çağrınHowyapmak mümkün değildir.WSAEWOULDBLOCKYuva engelleyici olarak işaretlenir ve istenen işlem engellenir.WSAEMSGSIZEYuva türündedirSOCK_DGRAMve veri birimi, Windows Yuvaları uygulaması tarafından desteklenen maksimum değerden daha büyüktür.WSAECONNABORTEDSanal bağlantı hattı zaman aşımı veya başka bir hata nedeniyle durduruldu.WSAECONNRESETSanal bağlantı hattı uzak taraf tarafından sıfırlandı.WSAEADDRNOTAVAILBelirtilen adres yerel makineden kullanılamıyor.WSAEAFNOSUPPORTBelirtilen ailedeki adresler bu yuvayla kullanılamaz.WSAEDESTADDRREQHedef adres gereklidir.WSAENETUNREACHAğa şu anda bu konaktan ulaşılamıyor.
Açıklamalar
Bu yöntem, CAsyncSocket::SendTo IPv6 adreslerinin yanı sıra eski protokolleri de işlemesi dışında aynıdır.
SendToEx veri birimi veya akış yuvalarında kullanılır ve giden verileri yuvaya yazmak için kullanılır. Veri birimi yuvaları için, tarafından iMaxUdpDgdoldurulan yapıdaki WSADATA öğesi tarafından AfxSocketInit verilen temel alt ağların maksimum IP paketi boyutunu aşmamaya dikkat edilmelidir. Veriler temel alınan protokolden atomik olarak geçemeyecek kadar uzunsa hata WSAEMSGSIZE döndürülür ve hiçbir veri iletilmez.
öğesinin başarıyla tamamlanmasının SendToEx verilerin başarıyla teslim edildiğine işaret etmediğini unutmayın.
SendToEx yalnızca parametre tarafından tanımlanan belirli bir SOCK_DGRAM yuvaya veri birimi göndermek için bir yuvada lpSockAddr kullanılır.
Yayın göndermek için (yalnızca bir SOCK_DGRAM yayında), parametredeki lpSockAddr adres, hedeflenen bağlantı noktası numarasıyla birlikte özel IP adresi INADDR_BROADCAST (Windows Yuvaları üst bilgi dosyasında WINSOCK.Htanımlanır) kullanılarak oluşturulmalıdır. Veya parametresi ise lpszHostAddressNULLyuva yayın için yapılandırılır. Bir yayın veri biriminin parçalanmanın oluşabileceği boyutu aşması genellikle önerilmez; bu da veri biriminin veri bölümünün (üst bilgiler hariç) 512 bayt'ı aşmaması gerektiğini gösterir.
CAsyncSocket::SetSockOpt
Yuva seçeneği ayarlamak için bu üye işlevini çağır.
BOOL SetSockOpt(
int nOptionName,
const void* lpOptionValue,
int nOptionLen,
int nLevel = SOL_SOCKET);
Parametreler
nOptionName
Değerin ayarlanacağı yuva seçeneği.
lpOptionValue
İstenen seçenek için değerin sağlandığı arabelleğe yönelik bir işaretçi.
nOptionLen
Arabelleğin lpOptionValue bayt cinsinden boyutu.
nLevel
Seçeneğin tanımlandığı düzey; desteklenen tek düzeyler ve'dir SOL_SOCKETIPPROTO_TCP.
Dönüş Değeri
İşlev başarılı olursa sıfır olmayan; aksi takdirde 0 ve belirli bir hata kodu çağrılarak GetLastErroralınabilir. Bu üye işlevi için aşağıdaki hatalar geçerlidir:
WSANOTINITIALISEDBu API'nin kullanılması için başarılıAfxSocketInitbir işlem gerçekleştirilmelidir.WSAENETDOWNWindows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.WSAEFAULTlpOptionValueişlem adres alanının geçerli bir bölümünde değil.WSAEINPROGRESSEngelleyen bir Windows Yuvaları işlemi devam ediyor.WSAEINVALnLevelgeçerli değil veya içindekilpOptionValuebilgiler geçerli değil.WSAENETRESETBağlantı ayarlandığında zaman aşımınaSO_KEEPALIVEuğradı.WSAENOPROTOOPTSeçenek bilinmiyor veya desteklenmiyor. Özellikle,SO_BROADCASTtüründeki yuvalardaSOCK_STREAMdesteklenmezkenSO_DONTLINGER,SO_KEEPALIVE,SO_LINGERveSO_OOBINLINEtüründekiSOCK_DGRAMyuvalarda desteklenmez.WSAENOTCONNBağlantı ayarlandığında sıfırlandıSO_KEEPALIVE.WSAENOTSOCKTanımlayıcı bir yuva değil.
Açıklamalar
SetSockOpt , herhangi bir durumdaki herhangi bir türde yuvayla ilişkili yuva seçeneği için geçerli değeri ayarlar. Seçenekler birden çok protokol düzeyinde mevcut olsa da, bu belirtim yalnızca en üstteki "yuva" düzeyinde bulunan seçenekleri tanımlar. Seçenekler, normal veri akışında hızlandırılmış verilerin alınıp alınmadığı, yayın iletilerinin yuvaya gönderilip gönderilemeyeceği gibi yuva işlemlerini etkiler.
İki tür yuva seçeneği vardır: Bir özelliği veya davranışı etkinleştiren veya devre dışı bırakabilen Boole seçenekleri ve tamsayı değeri veya yapısı gerektiren seçenekler. Boole seçeneğini etkinleştirmek için sıfır lpOptionValue olmayan bir tamsayıya işaret edin. Seçeneğini lpOptionValue devre dışı bırakmak için sıfıra eşit bir tamsayıya işaret edin.
nOptionLen Boole seçenekleri için sizeof(BOOL) eşit olmalıdır. Diğer seçenekler için, lpOptionValue seçenek için istenen değeri içeren tamsayıyı veya yapıyı gösterir ve nOptionLen tamsayı veya yapının uzunluğudur.
SO_LINGER , bir yuvada kaydedilmemiş veriler kuyruğa alındığında ve yuvayı Close kapatmak için işlev çağrıldığında gerçekleştirilen eylemi denetler.
Varsayılan olarak, yuva zaten kullanımda olan bir yerel adrese bağlanamaz (bkz Bind. ). Ancak bazen, bir adresi bu şekilde "yeniden kullanmak" tercih edilebilir. Her bağlantı yerel ve uzak adreslerin birleşimiyle benzersiz olarak tanımlandığından, uzak adresler farklı olduğu sürece aynı yerel adrese bağlı iki yuva olması sorun olmaz.
İstenen adres zaten başka bir yuva tarafından kullanıldığından, Bir yuvadaki bir Bind çağrıya izin verilmemesi gerektiğini Windows Yuvaları uygulamasına bildirmek için, uygulamanın çağrıyı vermeden önce yuva için yuva seçeneğini ayarlaması SO_REUSEADDRBind gerekir. Seçeneğin yalnızca çağrı sırasında Bind yorumlandığını unutmayın: Bu nedenle, mevcut bir adrese bağlı olmayan bir yuvada seçeneği ayarlamak ve çağrının bu veya başka bir yuva üzerinde hiçbir etkisi olmadan seçeneği Bind ayarlamak veya sıfırlamak gereksizdir (ancak zararsızdır).
Bir uygulama, Windows Yuvaları uygulamasının yuva seçeneğini açarak İletim Denetimi Protokolü (TCP) bağlantılarında "etkin tutma" paketlerinin kullanımını etkinleştirmesini SO_KEEPALIVE isteyebilir. Windows Yuvaları uygulamasının canlı tutma kullanımını desteklemesi gerekmez: bu durumda, hassas semantik uygulamaya özgü olur ancak RFC 1122'nin 4.2.3.6 bölümüne uygun olmalıdır: "İnternet Konakları gereksinimleri — İletişim Katmanları." "Canlı tutma" sonucu bir bağlantı bırakılırsa, hata kodu WSAENETRESET yuvada devam eden tüm çağrılara döndürülür ve sonraki çağrılar ile WSAENOTCONNbaşarısız olur.
seçeneği TCP_NODELAY Nagle algoritmasını devre dışı bırakır. Nagle algoritması, tam boyutlu bir paket gönderilinceye kadar bilinmeyen gönderme verilerini arabelleğe alarak bir konak tarafından gönderilen küçük paketlerin sayısını azaltmak için kullanılır. Ancak bazı uygulamalarda bu algoritma performansı engelleyebilir ve TCP_NODELAY kapatmak için kullanılabilir. Ayarın ağ performansı üzerinde önemli bir olumsuz etkisi olabileceğinden, bunu yapmanın etkisi iyi anlaşılmadığı ve istenmediği sürece uygulama TCP_NODELAY yazıcıları ayarlanmamalıdırTCP_NODELAY.
TCP_NODELAY düzeyi IPPROTO_TCPkullanan desteklenen tek yuva seçeneğidir; diğer tüm seçenekler düzeyi SOL_SOCKETkullanır.
Bazı Windows Yuvaları uygulamaları, seçenek bir uygulama tarafından ayarlandıysa SO_DEBUG çıkış hata ayıklama bilgileri sağlar.
için SetSockOptaşağıdaki seçenekler desteklenir. Tür, tarafından lpOptionValueele alınan veri türünü tanımlar.
| Değer | Tür | Anlamı |
|---|---|---|
SO_BROADCAST |
BOOL |
Yuvada yayın iletilerinin iletimine izin verin. |
SO_DEBUG |
BOOL |
Hata ayıklama bilgilerini kaydedin. |
SO_DONTLINGER |
BOOL |
Gönderilmemiş verilerin gönderilmesini beklemeyi engellemeyin Close . Bu seçeneğin ayarlanması, sıfır olarak ayarlanmış ayara SO_LINGERl_onoff eşdeğerdir. |
SO_DONTROUTE |
BOOL |
Yönlendirmeyin: doğrudan arabirime gönderin. |
SO_KEEPALIVE |
BOOL |
Canlı tutma gönder. |
SO_LINGER |
struct LINGER |
Close Kaydedilmemiş veriler varsa oyalanır. |
SO_OOBINLINE |
BOOL |
Normal veri akışında bant dışı verileri alma. |
SO_RCVBUF |
int |
Almalar için arabellek boyutunu belirtin. |
SO_REUSEADDR |
BOOL |
Yuvanın zaten kullanımda olan bir adrese bağlanmasına izin verin. (Bkz. Bağlama.) |
SO_SNDBUF |
int |
Göndermeler için arabellek boyutunu belirtin. |
TCP_NODELAY |
BOOL |
Birleştirme göndermek için Nagle algoritmasını devre dışı bırakır. |
Berkeley Yazılım Dağıtımı (BSD) için desteklenmeyen SetSockOpt seçenekler şunlardır:
| Değer | Tür | Anlamı |
|---|---|---|
SO_ACCEPTCONN |
BOOL |
Yuva dinliyor |
SO_ERROR |
int |
Hata durumunu alın ve temizleyin. |
SO_RCVLOWAT |
int |
Düşük su işareti alın. |
SO_RCVTIMEO |
int |
Alma zaman aşımı |
SO_SNDLOWAT |
int |
Düşük su işareti gönder. |
SO_SNDTIMEO |
int |
Zaman aşımı gönderme. |
SO_TYPE |
int |
Yuvanın türü. |
IP_OPTIONS |
IP üst bilgisinde seçenekler alanını ayarlayın. |
CAsyncSocket::ShutDown
Yuvada göndermeleri, almaları veya her ikisini de devre dışı bırakmak için bu üye işlevini çağırın.
BOOL ShutDown(int nHow = sends);
Parametreler
nHow
Aşağıdaki numaralandırılmış değerleri kullanarak artık hangi işlem türlerine izin verileceğini açıklayan bir bayrak:
receives = 0
sends = 1
both = 2
Dönüş Değeri
İşlev başarılı olursa sıfır olmayan; aksi takdirde 0 ve belirli bir hata kodu çağrılarak GetLastErroralınabilir. Bu üye işlevi için aşağıdaki hatalar geçerlidir:
WSANOTINITIALISEDBu API'nin kullanılması için başarılıAfxSocketInitbir işlem gerçekleştirilmelidir.WSAENETDOWNWindows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.WSAEINVALnHowgeçerli değil.WSAEINPROGRESSEngelleyen bir Windows Yuvaları işlemi devam ediyor.WSAENOTCONNYuva bağlı değil (SOCK_STREAMyalnızca).WSAENOTSOCKTanımlayıcı bir yuva değil.
Açıklamalar
ShutDown her türlü sokette alımı, iletimi veya her ikisini devre dışı bırakmak için kullanılır. 0 ise nHow , yuvada sonraki alma işlemlerine izin verilmez. Bunun alt protokol katmanları üzerinde hiçbir etkisi yoktur.
İletim Denetimi Protokolü (TCP) için TCP penceresi değiştirilmez ve pencere tükenene kadar gelen veriler kabul edilir (ancak onaylanmaz). Kullanıcı Veri Birimi Protokolü (UDP) için gelen veri birimleri kabul edilir ve kuyruğa alınır. Hiçbir durumda bir ICMP hata paketi oluşturulmaz. 1 ise nHow , sonraki göndermelere izin verilmez. TCP yuvaları için bir FIN gönderilir. 2 ayarı nHow , yukarıda açıklandığı gibi hem gönderme hem de almaları devre dışı bırakır.
ShutDown Yuvayı kapatmadığını ve yuvaya bağlı kaynakların çağrılana kadar Close serbest edilmeyeceğini unutmayın. Bir uygulama kapatıldıktan sonra yuvayı yeniden kullanabilmeye güvenmemelidir. Özellikle, böyle bir yuvada kullanımını Connect desteklemek için bir Windows Yuvaları uygulaması gerekli değildir.
Örnek
örneğine CAsyncSocket::OnReceivebakın.
CASyncSocket::Socket
Bir yuva tutamacı ayırır.
BOOL Socket(
int nSocketType = SOCK_STREAM,
long lEvent = FD_READ | FD_WRITE | FD_OOB | FD_ACCEPT | FD_CONNECT | FD_CLOSE,
int nProtocolType = 0,
int nAddressFormat = PF_INET);
Parametreler
nSocketType
veya SOCK_STREAMbelirtirSOCK_DGRAM.
lEvent
Uygulamanın ilgilendiği ağ olaylarının bir bileşimini belirten bit maskesi.
FD_READ: Okumaya hazır olduğunu bildiren bir bildirim almak istiyorsunuz.FD_WRITE: Yazmaya hazır olduğunu bildiren bir bildirim almak istiyorsunuz.FD_OOB: Bant dışı verilerin geldiği bildirimini almak istiyorsunuz.FD_ACCEPT: Gelen bağlantıların bildirimini almak istiyorsunuz.FD_CONNECT: Tamamlanan bağlantının bildirimini almak istiyorsunuz.FD_CLOSE: Yuva kapatma bildirimini almak istiyorsunuz.
nProtocolType
Belirtilen adres ailesine özgü yuvayla kullanılacak protokol.
nAddressFormat
Aile belirtimlerini ele alın.
Dönüş Değeri
Başarılı olduğunda, TRUE başarısız olduğunda döndürürFALSE.
Açıklamalar
Bu yöntem bir yuva tutamacı ayırır. Yuvayı belirtilen bir adrese bağlamak için çağrı CAsyncSocket::Bind yapmaz, bu nedenle yuvayı belirtilen bir adrese bağlamak için daha sonra aramanız Bind gerekir. Bağlamadan önce yuva seçeneğini ayarlamak için kullanabilirsiniz CAsyncSocket::SetSockOpt .
Ayrıca bkz.
CObject Sınıf
Hiyerarşi Grafiği
CSocket Sınıf
CSocketFile Sınıf