Aracılığıyla paylaş


CAsyncSocket Sınıf

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 Receive çağrıları Send 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ı SOCKET CAsyncSocket almak için bu işleci kullanın.

Ortak Veri Üyeleri

Veri Akışı Adı Açıklama
CAsyncSocket::m_hSocket Bu CAsyncSocket nesneye SOCKET 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ürSOCKET) oluşturmak için işlevini çağırınCreate. 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 bkz. Windows Yuvaları: Sınıf CAsyncSocketve ilgili makaleleri kullanma. ayrıca Windows Yuvaları 2 API'sini kullanma.

Devralma Hiyerarşisi

CObject

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 lpSockAddrLen değerine NULLeşitselpSockAddr, 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:

  • WSANOTINITIALISED Bu API'nin kullanılması için başarılı AfxSocketInit bir işlem gerçekleştirilmelidir.

  • WSAENETDOWN Windows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.

  • WSAEFAULT Bağımsız lpSockAddrLen değişken çok küçük (bir SOCKADDR yapının boyutundan daha küçük).

  • WSAEINPROGRESS Engelleyen bir Windows Yuvaları çağrısı devam ediyor.

  • WSAEINVALListen kabul edilmeden önce çağrılmıyor.

  • WSAEMFILE Kabul etmek için girişte kuyruk boş olur ve kullanılabilir tanımlayıcı yoktur.

  • WSAENOBUFS Kullanılabilir arabellek alanı yok.

  • WSAENOTSOCK Tanımlayıcı bir yuva değil.

  • WSAEOPNOTSUPP Başvuruda bulunan yuva, bağlantı odaklı hizmeti destekleyen bir tür değildir.

  • WSAEWOULDBLOCK Yuva 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_READ Okumaya hazır olduğunu bildiren bir bildirim almak istiyorsunuz.

  • FD_WRITE Veriler okunmaya uygun olduğunda 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 Bağlantı sonuçlarının bildirimini almak istiyorsunuz.

  • FD_CLOSE Bir 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:

  • WSANOTINITIALISED Bu API'nin kullanılması için başarılı AfxSocketInit bir işlem gerçekleştirilmelidir.

  • WSAENETDOWN Windows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.

  • WSAEINVAL Belirtilen parametrelerden birinin geçersiz olduğunu gösterir.

  • WSAEINPROGRESS Engelleyen 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 CAsyncSocket nesneye eklemek hSocket 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_READ Okumaya hazır olduğunu bildiren bir bildirim almak istiyorsunuz.

  • FD_WRITE Veriler okunmaya uygun olduğunda 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 Bağlantı sonuçlarının bildirimini almak istiyorsunuz.

  • FD_CLOSE Bir 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ı.

  • WSANOTINITIALISED Bu API'nin kullanılması için başarılı AfxSocketInit bir işlem gerçekleştirilmelidir.

  • WSAENETDOWN Windows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.

  • WSAEADDRINUSE Belirtilen adres zaten kullanılıyor. (altındaki SetSockOptyuva seçeneğine SO_REUSEADDR bakın.)

  • WSAEFAULT Bağımsız nSockAddrLen değişken çok küçük (bir SOCKADDR yapının boyutundan daha küçük).

  • WSAEINPROGRESS Engelleyen bir Windows Yuvaları çağrısı devam ediyor.

  • WSAEAFNOSUPPORT Belirtilen adres ailesi bu bağlantı noktası tarafından desteklenmiyor.

  • WSAEINVAL Yuva zaten bir adrese bağlı.

  • WSAENOBUFS Yeterli arabellek yok, çok fazla bağlantı var.

  • WSAENOTSOCK Tanı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 SOCKET ve adresini bağlamak için üye işlevini çağırmanız Create 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:

  • WSANOTINITIALISED Bu API'nin kullanılması için başarılı AfxSocketInit bir işlem gerçekleştirilmelidir.

  • WSAENETDOWN Windows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.

  • WSAEADDRINUSE Belirtilen adres zaten kullanılıyor.

  • WSAEINPROGRESS Engelleyen bir Windows Yuvaları çağrısı devam ediyor.

  • WSAEADDRNOTAVAIL Belirtilen adres yerel makineden kullanılamıyor.

  • WSAEAFNOSUPPORT Belirtilen ailedeki adresler bu yuvayla kullanılamaz.

  • WSAECONNREFUSED Bağlanma girişimi reddedildi.

  • WSAEDESTADDRREQ Hedef adres gereklidir.

  • WSAEFAULT Bağımsız nSockAddrLen değişken yanlış.

  • WSAEINVAL Geçersiz ana bilgisayar adresi.

  • WSAEISCONN Yuva zaten bağlı.

  • WSAEMFILE Başka dosya tanımlayıcısı yok.

  • WSAENETUNREACH Ağa şu anda bu konaktan ulaşılamıyor.

  • WSAENOBUFS Kullanılabilir arabellek alanı yok. Yuva bağlanamıyor.

  • WSAENOTSOCK Tanımlayıcı bir yuva değil.

  • WSAETIMEDOUT Bağlantı kurmadan bağlanma girişimi zaman aşımına uğradı.

  • WSAEWOULDBLOCK Yuva 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_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 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:

  • WSANOTINITIALISED Bu API'nin kullanılması için başarılı AfxSocketInit bir işlem gerçekleştirilmelidir.

  • WSAENETDOWN Windows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.

  • WSAEAFNOSUPPORT Belirtilen adres ailesi desteklenmiyor.

  • WSAEINPROGRESS Engelleyen bir Windows Yuvaları işlemi devam ediyor.

  • WSAEMFILE Başka dosya tanımlayıcısı yok.

  • WSAENOBUFS Kullanılabilir arabellek alanı yok. Yuva oluşturulamıyor.

  • WSAEPROTONOSUPPORT Belirtilen bağlantı noktası desteklenmiyor.

  • WSAEPROTOTYPE Belirtilen bağlantı noktası bu yuva için yanlış türde.

  • WSAESOCKTNOSUPPORT Belirtilen 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_STREAM Sı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_DGRAM Sabit (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ş CSocket bir nesneye başvuru alır. çağırmadan Acceptö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ın Create .

Önemli

Createparç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_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 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 NULLbu üye işlevini çağırınCAsyncSocket.m_hSocket

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ş hSocketnesne yoksaCAsyncSocket.

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:

  • WSANOTINITIALISED Bu API'nin kullanılması için başarılı AfxSocketInit bir işlem gerçekleştirilmelidir.

  • WSAENETDOWN Windows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.

  • WSAEFAULT Bağımsız lpSockAddrLen değişken yeterince büyük değil.

  • WSAEINPROGRESS Engelleyen bir Windows Yuvaları çağrısı devam ediyor.

  • WSAENOTCONN Yuva bağlı değil.

  • WSAENOTSOCK Tanı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:

  • WSANOTINITIALISED Bu API'nin kullanılması için başarılı AfxSocketInit bir işlem gerçekleştirilmelidir.

  • WSAENETDOWN Windows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.

  • WSAEFAULT Bağımsız lpSockAddrLen değişken yeterince büyük değil.

  • WSAEINPROGRESS Engelleyen bir Windows Yuvaları çağrısı devam ediyor.

  • WSAENOTCONN Yuva bağlı değil.

  • WSAENOTSOCK Tanı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:

  • WSANOTINITIALISED Bu API'nin kullanılması için başarılı AfxSocketInit bir işlem gerçekleştirilmelidir.

  • WSAENETDOWN Windows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.

  • WSAEFAULT Bağımsız lpSockAddrLen değişken yeterince büyük değil.

  • WSAEINPROGRESS Engelleyen bir Windows Yuvaları işlemi devam ediyor.

  • WSAENOTSOCK Tanımlayıcı bir yuva değil.

  • WSAEINVAL Yuva ile Bindbir adrese bağlı değil.

Açıklamalar

Bu çağrı özellikle ilk kez yapılmadan Bind bir Connect ç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:

  • WSANOTINITIALISED Bu API'nin kullanılması için başarılı AfxSocketInit bir işlem gerçekleştirilmelidir.

  • WSAENETDOWN Windows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.

  • WSAEFAULT Bağımsız lpSockAddrLen değişken yeterince büyük değil.

  • WSAEINPROGRESS Engelleyen bir Windows Yuvaları işlemi devam ediyor.

  • WSAENOTSOCK Tanımlayıcı bir yuva değil.

  • WSAEINVAL Yuva ile Bindbir 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 Bind bir Connect ç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_SOCKET IPPROTO_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:

  • WSANOTINITIALISED Bu API'nin kullanılması için başarılı AfxSocketInit bir işlem gerçekleştirilmelidir.

  • WSAENETDOWN Windows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.

  • WSAEFAULT Bağımsız lpOptionLen değişken geçersizdi.

  • WSAEINPROGRESS Engelleyen bir Windows Yuvaları işlemi devam ediyor.

  • WSAENOPROTOOPT Seçenek bilinmiyor veya desteklenmiyor. Özellikle, SO_BROADCAST türündeki yuvalarda SOCK_STREAMdesteklenmezken SO_ACCEPTCONN, , SO_DONTLINGER, SO_KEEPALIVE, SO_LINGERve SO_OOBINLINE türündeki SOCK_DGRAMyuvalarda desteklenmez.

  • WSAENOTSOCK Tanı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 GetLastErrordöndürülen bir hata koduyla WSAENOPROTOOPT 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:

  • WSANOTINITIALISED Bu API'nin kullanılması için başarılı AfxSocketInit bir işlem gerçekleştirilmelidir.

  • WSAENETDOWN Windows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.

  • WSAEINVALlCommand geçerli bir komut değildir veya lpArgument için lCommandkabul edilebilir bir parametre değildir veya komut, sağlanan yuva türüne uygulanamaz.

  • WSAEINPROGRESS Engelleyen bir Windows Yuvaları işlemi devam ediyor.

  • WSAENOTSOCK Tanı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:

  • FIONBIO Yuvada engelleme modunu etkinleştirin veya devre dışı bırakın. lpArgument Parametre, engelleyici olmayan modun etkinleştirilmesi durumunda sıfır olmayan ve devre dışı bırakılacaksa sıfır olan öğesini DWORDgösterir. Bir yuvada verildiyse AsyncSelect , yuvayı engelleme moduna geri ayarlamak için herhangi IOCtl bir girişim ile WSAEINVALbaşarısız olur. Yuvayı engelleme moduna geri döndürmek ve hatayı önlemek WSAEINVAL için, bir uygulamanın önce parametresi 0'a eşit olarak çağırarak AsyncSelect lEvent devre dışı bırakması AsyncSelect ve ardından çağrısı IOCtlyapması gerekir.

  • FIONREAD Bu yuvadan tek bir Receive çağrıyla okunabilecek en fazla bayt sayısını belirleyin. parametresi sonucu lpArgument depolayan IOCtl öğesini DWORD işaret eder. Bu yuva türündeyse SOCK_STREAM, FIONREAD tek Receivebir 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ündeyse SOCK_DGRAM, FIONREAD yuvada kuyruğa alınan ilk veri biriminin boyutunu döndürür.

  • SIOCATMARK Bant dışı verilerin tümünün okunup okunmadığını belirleyin. Bu yalnızca bant dışı verilerin ( SO_OOBINLINE) satır içi alımı için yapılandırılmış bir tür SOCK_STREAM yuvası 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 ve Receive yuvada gerçekleştirilen sonraki veya ReceiveFrom gerçekleştirilen , "işaret" işaretinden önceki verilerin bir kısmını veya tümünü alır; uygulama herhangi bir verinin SIOCATMARK kalıp kalmadığını belirlemek için işlemi kullanmalıdır. "Acil" (bant dışı) verilerden önce normal veriler varsa, sırayla alınır. (Bir Receive veya'nın ReceiveFrom aynı çağrıda bant dışı ve normal verileri hiçbir zaman karıştırmayacağını unutmayın.) parametresi sonucu lpArgument depolayan IOCtl öğesini DWORD iş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:

  • WSANOTINITIALISED Bu API'nin kullanılması için başarılı AfxSocketInit bir işlem gerçekleştirilmelidir.

  • WSAENETDOWN Windows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.

  • WSAEADDRINUSE Kullanımdaki bir adresi dinleme girişiminde bulunuldu.

  • WSAEINPROGRESS Engelleyen bir Windows Yuvaları işlemi devam ediyor.

  • WSAEINVAL Yuva ile Bind bağlı değil veya zaten bağlı.

  • WSAEISCONN Yuva zaten bağlı.

  • WSAEMFILE Başka dosya tanımlayıcısı yok.

  • WSAENOBUFS Kullanılabilir arabellek alanı yok.

  • WSAENOTSOCK Tanımlayıcı bir yuva değil.

  • WSAEOPNOTSUPP Başvuruda bulunan yuva, işlemi destekleyen Listen bir 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ı Listen Accept , 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ü.

  • WSAENETDOWN Windows 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ü.

  • WSAENETDOWN Windows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.

  • WSAECONNRESET Bağlantı uzak taraf tarafından sıfırlandı.

  • WSAECONNABORTED Zaman 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ü.

  • WSAEADDRINUSE Belirtilen adres zaten kullanılıyor.

  • WSAEADDRNOTAVAIL Belirtilen adres yerel makineden kullanılamıyor.

  • WSAEAFNOSUPPORT Belirtilen ailedeki adresler bu yuvayla kullanılamaz.

  • WSAECONNREFUSED Bağlanma girişimi zorla reddedildi.

  • WSAEDESTADDRREQ Hedef adres gereklidir.

  • WSAEFAULT Bağımsız lpSockAddrLen değişken yanlış.

  • WSAEINVAL Yuva zaten bir adrese bağlı.

  • WSAEISCONN Yuva zaten bağlı.

  • WSAEMFILE Başka dosya tanımlayıcısı yok.

  • WSAENETUNREACH Ağa şu anda bu konaktan ulaşılamıyor.

  • WSAENOBUFS Kullanılabilir arabellek alanı yok. Yuva bağlanamıyor.

  • WSAENOTCONN Yuva bağlı değil.

  • WSAENOTSOCK Tanımlayıcı bir yuva değil bir dosyadır.

  • WSAETIMEDOUT Bağlanma girişimi, bağlantı kurulmadan zaman aşımına uğradı.

Açıklamalar

Not

OnConnect içinde CSocketbildirim 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ü.

  • WSAENETDOWN Windows 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ü.

  • WSAENETDOWN Windows 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ü.

  • WSAENETDOWN Windows 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ı SOCKET CAsyncSocket 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_PEEK Gelen verilere göz atın. Veriler arabelleğe kopyalanır ancak giriş kuyruğundan kaldırılmaz.

  • MSG_OOB Bant 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:

  • WSANOTINITIALISED Bu API'nin kullanılması için başarılı AfxSocketInit bir işlem gerçekleştirilmelidir.

  • WSAENETDOWN Windows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.

  • WSAENOTCONN Yuva bağlı değil.

  • WSAEINPROGRESS Engelleyen bir Windows Yuvaları işlemi devam ediyor.

  • WSAENOTSOCK Tanımlayıcı bir yuva değil.

  • WSAEOPNOTSUPPMSG_OOB belirtildi, ancak yuva türünde SOCK_STREAMdeğil.

  • WSAESHUTDOWNYuva kapatıldı; 0 veya 2 olarak ayarlanmış olarak çağrıldıktan nHow sonra ShutDown bir yuvada çağrı Receive yapmak mümkün değildir.

  • WSAEWOULDBLOCK Yuva engelleyici olarak işaretlenir ve Receive işlem engellenir.

  • WSAEMSGSIZE Veri birimi belirtilen arabelleğe sığamayacak kadar büyük ve kesilmiş.

  • WSAEINVAL Yuva ile Bindbağlı değil.

  • WSAECONNABORTED Sanal bağlantı hattı zaman aşımı veya başka bir hata nedeniyle durduruldu.

  • WSAECONNRESET Sanal 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 OnOutOfBandData seçeneğini kullanabilirIOCtlSIOCATMARK.

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ış WSAEMSGSIZEolan değerini SOCKET_ERROR döndürür. Yuvada kullanılabilir gelen veri yoksa hata kodu olarak ayarlanmış WSAEWOULDBLOCKbir değeri SOCKET_ERROR 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 Receive WSAECONNRESETbaş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 rSocketAddressdepolamak için bu üye işlevini çağırınSOCKADDR.

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_PEEK Gelen verilere göz atın. Veriler arabelleğe kopyalanır ancak giriş kuyruğundan kaldırılmaz.

  • MSG_OOB Bant 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:

  • WSANOTINITIALISED Bu API'nin kullanılması için başarılı AfxSocketInit bir işlem gerçekleştirilmelidir.

  • WSAENETDOWN Windows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.

  • WSAEFAULTlpSockAddrLen Bağımsız değişken geçersizdi: lpSockAddr Arabellek eş adresini barındıramayacak kadar küçük.

  • WSAEINPROGRESS Engelleyen bir Windows Yuvaları işlemi devam ediyor.

  • WSAEINVAL Yuva ile Bindbağlı değil.

  • WSAENOTCONN Yuva bağlı değil (SOCK_STREAM yalnızca).

  • WSAENOTSOCK Tanımlayıcı bir yuva değil.

  • WSAEOPNOTSUPPMSG_OOB belirtildi, ancak yuva türünde SOCK_STREAMdeğil.

  • WSAESHUTDOWNYuva kapatıldı; 0 veya 2 olarak ayarlanmış olarak çağrıldıktan nHow sonra ShutDown bir yuvada çağrı ReceiveFrom yapmak mümkün değildir.

  • WSAEWOULDBLOCK Yuva engelleyici olarak işaretlenir ve ReceiveFrom işlem engellenir.

  • WSAEMSGSIZE Veri birimi belirtilen arabelleğe sığamayacak kadar büyük ve kesilmiş.

  • WSAECONNABORTED Sanal bağlantı hattı zaman aşımı veya başka bir hata nedeniyle durduruldu.

  • WSAECONNRESET Sanal 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 OnOutOfBandData seçeneğini kullanabilirIOCtlSIOCATMARK. 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ış WSAEMSGSIZEolarak değerini SOCKET_ERROR döndürür.

Sıfır değilse ve yuva türündeyse lpSockAddr SOCK_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ış WSAEWOULDBLOCKbir değeri SOCKET_ERROR 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 rSocketAddress depolamak için bu üye işlevini çağırın SOCKADDR (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_PEEK Gelen verilere göz atın. Veriler arabelleğe kopyalanır ancak giriş kuyruğundan kaldırılmaz.

  • MSG_OOB Bant 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:

  • WSANOTINITIALISED Bu API'nin kullanılması için başarılı AfxSocketInit bir işlem gerçekleştirilmelidir.

  • WSAENETDOWN Windows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.

  • WSAEFAULTlpSockAddrLen Bağımsız değişken geçersizdi: lpSockAddr Arabellek eş adresini barındıramayacak kadar küçük.

  • WSAEINPROGRESS Engelleyen bir Windows Yuvaları işlemi devam ediyor.

  • WSAEINVAL Yuva ile Bindbağlı değil.

  • WSAENOTCONN Yuva bağlı değil (SOCK_STREAM yalnızca).

  • WSAENOTSOCK Tanımlayıcı bir yuva değil.

  • WSAEOPNOTSUPPMSG_OOB belirtildi, ancak yuva türünde SOCK_STREAMdeğil.

  • WSAESHUTDOWNYuva kapatıldı; 0 veya 2 olarak ayarlanmış olarak çağrıldıktan nHow sonra ShutDown bir yuvada çağrı ReceiveFromEx yapmak mümkün değildir.

  • WSAEWOULDBLOCK Yuva engelleyici olarak işaretlenir ve ReceiveFromEx işlem engellenir.

  • WSAEMSGSIZE Veri birimi belirtilen arabelleğe sığamayacak kadar büyük ve kesilmiş.

  • WSAECONNABORTED Sanal bağlantı hattı zaman aşımı veya başka bir hata nedeniyle durduruldu.

  • WSAECONNRESET Sanal 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 OnOutOfBandData seçeneğini kullanabilirIOCtlSIOCATMARK. 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ış WSAEMSGSIZEolarak değerini SOCKET_ERROR döndürür.

Sıfır değilse ve yuva türündeyse lpSockAddr SOCK_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ış WSAEWOULDBLOCKbir değeri SOCKET_ERROR 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_DONTROUTE Verilerin yönlendirmeye tabi olmaması gerektiğini belirtir. Bir Windows Yuvaları sağlayıcısı bu bayrağı yoksaymayı seçebilir.

  • MSG_OOB Bant dışı veri gönder (SOCK_STREAM yalnı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:

  • WSANOTINITIALISED Bu API'nin kullanılması için başarılı AfxSocketInit bir işlem gerçekleştirilmelidir.

  • WSAENETDOWN Windows 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ı.

  • WSAEINPROGRESS Engelleyen bir Windows Yuvaları işlemi devam ediyor.

  • WSAEFAULTlpBuf Bağımsız değişken, kullanıcı adres alanının geçerli bir bölümünde değil.

  • WSAENETRESET Windows Yuvaları uygulaması bağlantıyı bıraktığından bağlantı sıfırlanmalıdır.

  • WSAENOBUFS Windows Yuvaları uygulaması bir arabellek kilitlenmesi bildirir.

  • WSAENOTCONN Yuva bağlı değil.

  • WSAENOTSOCK Tanımlayıcı bir yuva değil.

  • WSAEOPNOTSUPPMSG_OOB belirtildi, ancak yuva türünde SOCK_STREAMdeğil.

  • WSAESHUTDOWNYuva kapatıldı; 1 veya 2 olarak ayarlanmış olarak çağrıldıktan nHow sonra ShutDown bir yuvada çağrı Send yapmak mümkün değildir.

  • WSAEWOULDBLOCK Yuva engelleyici olarak işaretlenir ve istenen işlem engellenir.

  • WSAEMSGSIZE Yuva türündedir SOCK_DGRAMve veri birimi, Windows Yuvaları uygulaması tarafından desteklenen maksimum değerden daha büyüktür.

  • WSAEINVAL Yuva ile Bindbağlı değil.

  • WSAECONNABORTED Sanal bağlantı hattı zaman aşımı veya başka bir hata nedeniyle durduruldu.

  • WSAECONNRESET Sanal 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 AfxSocketInitdöndürülen yapıdaki WSADATA öğesi tarafından iMaxUdpDg 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 SOCK_STREAMnesnelerdeCAsyncSocket, 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_DONTROUTE Verilerin yönlendirmeye tabi olmaması gerektiğini belirtir. Bir Windows Yuvaları sağlayıcısı bu bayrağı yoksaymayı seçebilir.

  • MSG_OOB Bant dışı veri gönder (SOCK_STREAM yalnı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:

  • WSANOTINITIALISED Bu API'nin kullanılması için başarılı AfxSocketInit bir işlem gerçekleştirilmelidir.

  • WSAENETDOWN Windows 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ı.

  • WSAEINPROGRESS Engelleyen bir Windows Yuvaları işlemi devam ediyor.

  • WSAEFAULTlpBuf veya lpSockAddr parametreleri kullanıcı adres alanının parçası değildir veya lpSockAddr bağımsız değişken çok küçüktür (bir SOCKADDR yapının boyutundan daha küçüktür).

  • WSAEINVAL Ana bilgisayar adı geçersiz.

  • WSAENETRESET Windows Yuvaları uygulaması bağlantıyı bıraktığından bağlantı sıfırlanmalıdır.

  • WSAENOBUFS Windows Yuvaları uygulaması bir arabellek kilitlenmesi bildirir.

  • WSAENOTCONN Yuva bağlı değil (SOCK_STREAM yalnızca).

  • WSAENOTSOCK Tanımlayıcı bir yuva değil.

  • WSAEOPNOTSUPPMSG_OOB belirtildi, ancak yuva türünde SOCK_STREAMdeğil.

  • WSAESHUTDOWNYuva kapatıldı; 1 veya 2 olarak ayarlanmış olarak çağrıldıktan nHow sonra ShutDown bir yuvada çağrı SendTo yapmak mümkün değildir.

  • WSAEWOULDBLOCK Yuva engelleyici olarak işaretlenir ve istenen işlem engellenir.

  • WSAEMSGSIZE Yuva türündedir SOCK_DGRAMve veri birimi, Windows Yuvaları uygulaması tarafından desteklenen maksimum değerden daha büyüktür.

  • WSAECONNABORTED Sanal bağlantı hattı zaman aşımı veya başka bir hata nedeniyle durduruldu.

  • WSAECONNRESET Sanal bağlantı hattı uzak taraf tarafından sıfırlandı.

  • WSAEADDRNOTAVAIL Belirtilen adres yerel makineden kullanılamıyor.

  • WSAEAFNOSUPPORT Belirtilen ailedeki adresler bu yuvayla kullanılamaz.

  • WSAEDESTADDRREQ Hedef adres gereklidir.

  • WSAENETUNREACH Ağ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 AfxSocketInitdoldurulan yapıdaki WSADATA öğesi tarafından iMaxUdpDg 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 lpszHostAddress NULLyuva 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_DONTROUTE Verilerin yönlendirmeye tabi olmaması gerektiğini belirtir. Bir Windows Yuvaları sağlayıcısı bu bayrağı yoksaymayı seçebilir.

  • MSG_OOB Bant dışı veri gönder (SOCK_STREAM yalnı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:

  • WSANOTINITIALISED Bu API'nin kullanılması için başarılı AfxSocketInit bir işlem gerçekleştirilmelidir.

  • WSAENETDOWN Windows 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ı.

  • WSAEINPROGRESS Engelleyen bir Windows Yuvaları işlemi devam ediyor.

  • WSAEFAULTlpBuf veya lpSockAddr parametreleri kullanıcı adres alanının parçası değildir veya lpSockAddr bağımsız değişken çok küçüktür (bir SOCKADDR yapının boyutundan daha küçüktür).

  • WSAEINVAL Ana bilgisayar adı geçersiz.

  • WSAENETRESET Windows Yuvaları uygulaması bağlantıyı bıraktığından bağlantı sıfırlanmalıdır.

  • WSAENOBUFS Windows Yuvaları uygulaması bir arabellek kilitlenmesi bildirir.

  • WSAENOTCONN Yuva bağlı değil (SOCK_STREAM yalnızca).

  • WSAENOTSOCK Tanımlayıcı bir yuva değil.

  • WSAEOPNOTSUPPMSG_OOB belirtildi, ancak yuva türünde SOCK_STREAMdeğil.

  • WSAESHUTDOWNYuva kapatıldı; 1 veya 2 olarak ayarlanmış olarak çağrıldıktan nHow sonra ShutDown bir yuvada çağrı SendToEx yapmak mümkün değildir.

  • WSAEWOULDBLOCK Yuva engelleyici olarak işaretlenir ve istenen işlem engellenir.

  • WSAEMSGSIZE Yuva türündedir SOCK_DGRAMve veri birimi, Windows Yuvaları uygulaması tarafından desteklenen maksimum değerden daha büyüktür.

  • WSAECONNABORTED Sanal bağlantı hattı zaman aşımı veya başka bir hata nedeniyle durduruldu.

  • WSAECONNRESET Sanal bağlantı hattı uzak taraf tarafından sıfırlandı.

  • WSAEADDRNOTAVAIL Belirtilen adres yerel makineden kullanılamıyor.

  • WSAEAFNOSUPPORT Belirtilen ailedeki adresler bu yuvayla kullanılamaz.

  • WSAEDESTADDRREQ Hedef adres gereklidir.

  • WSAENETUNREACH Ağ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 AfxSocketInitdoldurulan yapıdaki WSADATA öğesi tarafından iMaxUdpDg 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 lpszHostAddress NULLyuva 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_SOCKET IPPROTO_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:

  • WSANOTINITIALISED Bu API'nin kullanılması için başarılı AfxSocketInit bir işlem gerçekleştirilmelidir.

  • WSAENETDOWN Windows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.

  • WSAEFAULTlpOptionValue işlem adres alanının geçerli bir bölümünde değil.

  • WSAEINPROGRESS Engelleyen bir Windows Yuvaları işlemi devam ediyor.

  • WSAEINVALnLevel geçerli değil veya içindeki lpOptionValue bilgiler geçerli değil.

  • WSAENETRESET Bağlantı ayarlandığında zaman aşımına SO_KEEPALIVE uğradı.

  • WSAENOPROTOOPT Seçenek bilinmiyor veya desteklenmiyor. Özellikle, SO_BROADCAST türündeki yuvalarda SOCK_STREAMdesteklenmezken SO_DONTLINGER, SO_KEEPALIVE, SO_LINGERve SO_OOBINLINE türündeki SOCK_DGRAMyuvalarda desteklenmez.

  • WSAENOTCONN Bağlantı ayarlandığında sıfırlandı SO_KEEPALIVE .

  • WSAENOTSOCK Tanı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_REUSEADDR Bind 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_LINGER l_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:

  • WSANOTINITIALISED Bu API'nin kullanılması için başarılı AfxSocketInit bir işlem gerçekleştirilmelidir.

  • WSAENETDOWN Windows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.

  • WSAEINVALnHow geçerli değil.

  • WSAEINPROGRESS Engelleyen bir Windows Yuvaları işlemi devam ediyor.

  • WSAENOTCONN Yuva bağlı değil (SOCK_STREAM yalnızca).

  • WSAENOTSOCK Tanı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_DGRAMbelirtirSOCK_STREAM.

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, FALSE başarısız olduğunda döndürürTRUE.

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