Aracılığıyla paylaş


CAsyncSocket::ReceiveFrom

Bir veri birimi alma ve kaynak adresini saklamak için bu üye işlev çağrısı sockaddr yapısı veya rSocketAddress.

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 arabellek.

  • nBufLen
    Uzunluğu, lpBuf bayt.

  • rSocketAddress
    Başvuru için bir CString noktalı sayı bir IP adresi alır nesnesi.

  • rSocketPort
    Başvuru için bir UINT , bir bağlantı noktası depolar.

  • lpSockAddr
    Bir işaretçi bir sockaddr iade sonrasında kaynak adresi tutan yapısı.

  • lpSockAddrLen
    Kaynak adresi uzunluğunu gösteren bir işaretçi lpSockAddr bayt.

  • nFlags
    Çağrının yapıldığı biçimini belirtir.Bu işlevin semantiği soket seçenekleri tarafından belirlenir ve nFlags parametresi.Bu sonuncusu aşağıdaki değerlerden herhangi birine sahip C++ birleştirilerek oluşturulur OR işleci:

    • msg_peek gelen veri gözatma.Veriler arabelleğe kopyalanır, ancak giriş kuyruğundan kaldırılmaz.

    • msg_oob bant içi veri işleme.

Dönüş Değeri

Herhangi bir hata oluşursa, ReceiveFrom alınan bayt sayısını döndürür.Bağlantı kapatıldı, 0 döndürür.Aksi halde, değeri socket_error iade edilir ve belirli bir hata kodu çağırarak alınabilir GetLastError.Aşağıdaki hatalar bu üye işlev için geçerlidir:

  • WSANOTINITIALISED başarılı bir AfxSocketInit Bu API kullanmadan önce gerçekleştirilmelidir.

  • wsaenetdown Windows Sockets başlatılmasının algılanan ağ alt sistemi başarısız oldu.

  • wsaefaultlpSockAddrLen bağımsız değişken geçersiz: lpSockAddr arabellek eş adresi alamayacak kadar küçük.

  • WSAEINPROGRESS engelleyen bir Windows yuva işlemi devam ediyor.

  • WSAEINVAL yuva ile bağlanmış değil bağlamak.

  • wsaenotconn Yuva bağlı değil (sock_stream sadece).

  • wsaenotsock bir soket tanımlayıcısı değil.

  • WSAEOPNOTSUPP   msg_oob belirtildi, ancak yuva türü değil sock_stream.

  • wsaeshutdown yuva; aşağı Kapat Çağrı yapılamaz ReceiveFrom sonra bir yuvada ShutDown ile çağrılan nHow 0 veya 2'ye ayarlayın.

  • wsaewouldblock yuva işaretlenmiş olarak yapmayan ve ReceiveFrom işlemi engelleyin.

  • WSAEMSGSIZE datagram belirtilen arabelleğe sığmayacak kadar büyük ve kesildi.

  • wsaeconnaborted sanal devrenin zaman aşımı veya diğer hata iptal edildi.

  • wsaeconnreset sanal devrenin uzak uç tarafından sıfırlandı.

Notlar

Bu işlev (büyük olasılıkla bağlı) bir yuva üzerinde gelen verileri okuyabilir ve verilerin gönderildiği adres yakalamak için kullanılır.

IPv6 adresleri işlemek için kullanmak CAsyncSocket::ReceiveFromEx.

Yuva türü için sock_stream, sağlanan arabellek boyutu en fazla şu anda kullanılabilir ne kadar bilgi iade olarak.Yuva satır içi bant içi veri alımını yapılandırdıysanız (yuva seçeneği SO_OOBINLINE) ve bant içi veri okunmamış, yalnızca-in-bant veri döndürülmesi.Uygulamanın kullanabileceği IOCTLSIOCATMARK seçeneğini ya da OnOutOfBandData daha-bant veri okunacak kalır olup olmadığını belirlemek için.lpSockAddr Ve lpSockAddrLen parametreleri için dikkate sock_stream yuva.

Datagram yuva için sağlanan arabellek boyutu en fazla ilk sıraya alındı datagram gelen veriler ayıklanır.Datagram, sağlanan arabellekten daha büyük ise, iletiyi ilk bölümüyle arabelleğinin Dolum, fazladan veriler kaybolur ve ReceiveFrom değerini döndürür socket_error hata koduyla ayarlamak WSAEMSGSIZE.

lpSockAddr Sıfır olmayan, olduğu ve socket türüdür sock_dgram, karşılık gelen veri gönderdiği yuva ağ adresini kopyalanan sockaddr yapısı.Tarafından için değer ulaşılan lpSockAddrLen Bu yapı boyutu başlatılır ve orada depolanan adres gerçek boyutu belirtmek için return değiştirilebilir.Gelen veri kullanılabiliyorsa, yuva ReceiveFrom çağrısını bekler yuva olmadıkça gelmesi için veri yapmayan.Bu durumda değeri de socket_error belirlemek hata kodu döndürdü wsaewouldblock.OnReceive Geri arama, daha fazla veri geldiğinde belirlemek için kullanılabilir.

Yuva türü ise sock_stream ve uzak tarafı bağlantısını düzgün kapattı bir ReceiveFrom 0 bayt alındı hemen tamamlayacak.

Gereksinimler

Başlık: afxsock.h

Ayrıca bkz.

Başvuru

CAsyncSocket sınıfı

Hiyerarşi grafik

CAsyncSocket::AsyncSelect

CAsyncSocket::Create

CAsyncSocket::Receive

CAsyncSocket::Send