Megosztás:


CAsyncSocket osztály

Egy Windows-szoftvercsatorna – a hálózati kommunikáció végpontja.

Szemantika

class CAsyncSocket : public CObject

Tagok

Nyilvános konstruktorok

Név Leírás
CAsyncSocket::CAsyncSocket Egy CAsyncSocket objektumot hoz létre.

Nyilvános metódusok

Név Leírás
CAsyncSocket::Accept Kapcsolatot fogad el a szoftvercsatornán.
CAsyncSocket::AsyncSelect Eseményértesítést kér a szoftvercsatornához.
CAsyncSocket::Attach Egy szoftvercsatorna fogópontját csatolja egy CAsyncSocket objektumhoz.
CAsyncSocket::Bind Egy helyi címet társít a szoftvercsatornához.
CAsyncSocket::Close Bezárja a foglalatot.
CAsyncSocket::Connect Kapcsolatot létesít egy társcsatornával.
CAsyncSocket::Create Létrehoz egy szoftvercsatornát.
CAsyncSocket::CreateEx Speciális beállításokkal rendelkező szoftvercsatornát hoz létre.
CAsyncSocket::Detach Leválasztja a szoftvercsatorna fogópontját egy CAsyncSocket objektumról.
CAsyncSocket::FromHandle Egy objektumra CAsyncSocket mutató mutatót ad vissza egy foglalatfogóponttal.
CAsyncSocket::GetLastError Lekéri a legutóbbi sikertelen művelet hibaállapotát.
CAsyncSocket::GetPeerName Lekéri annak a társcsatornának a címét, amelyhez a szoftvercsatornát csatlakoztatta.
CAsyncSocket::GetPeerNameEx Lekéri annak a társcsatornának a címét, amelyhez a szoftvercsatorna csatlakozik (az IPv6-címeket kezeli).
CAsyncSocket::GetSockName Lekéri a szoftvercsatornák helyi nevét.
CAsyncSocket::GetSockNameEx Lekéri a szoftvercsatornák helyi nevét (az IPv6-címeket kezeli).
CAsyncSocket::GetSockOpt Lekéri a szoftvercsatorna-beállítást.
CAsyncSocket::IOCtl Szabályozza a szoftvercsatorna módját.
CAsyncSocket::Listen Létrehoz egy szoftvercsatornát a bejövő kapcsolatkérések figyeléséhez.
CAsyncSocket::Receive Adatokat fogad a szoftvercsatornából.
CAsyncSocket::ReceiveFrom Megkapja a datagramot, és tárolja a forráscímet.
CAsyncSocket::ReceiveFromEx Megkapja a datagramot, és tárolja a forráscímet (az IPv6-címeket kezeli).
CAsyncSocket::Send Adatokat küld egy csatlakoztatott szoftvercsatornának.
CAsyncSocket::SendTo Adatokat küld egy adott célhelyre.
CAsyncSocket::SendToEx Adatokat küld egy adott célhelyre (IPv6-címeket kezel).
CAsyncSocket::SetSockOpt Beállít egy szoftvercsatorna-beállítást.
CAsyncSocket::ShutDown Letiltja Send és/vagy Receive meghívja a szoftvercsatornát.
CASyncSocket::Socket Foglal le egy foglalatfogópontot.

Védett metódusok

Név Leírás
CAsyncSocket::OnAccept Értesíti a figyelési szoftvercsatornát, hogy hívással Acceptelfogadhatja a függőben lévő kapcsolatkéréseket.
CAsyncSocket::OnClose Értesíti a csatlakozóaljzatot, hogy a csatlakozó aljzat bezárult.
CAsyncSocket::OnConnect Értesíti a csatlakozó szoftvercsatornát, hogy a csatlakozási kísérlet befejeződött, akár sikeresen, akár hiba esetén.
CAsyncSocket::OnOutOfBandData Értesíti a fogadó szoftvercsatornát, hogy sávon kívüli adatokat kell olvasni a szoftvercsatornán, ami általában sürgős üzenet.
CAsyncSocket::OnReceive Értesíti a figyelési szoftvercsatornát, hogy a hívással Receivelekérendő adatok vannak.
CAsyncSocket::OnSend Értesíti a szoftvercsatornát, hogy hívással Sendtud adatokat küldeni.

Nyilvános operátorok

Név Leírás
CAsyncSocket::operátor = Új értéket rendel egy CAsyncSocket objektumhoz.
CAsyncSocket::operátori SZOFTVERCSATORNA Ezzel az operátorral lekérheti az SOCKET objektum fogópontját CAsyncSocket .

Nyilvános adatok tagjai

Név Leírás
CAsyncSocket::m_hSocket SOCKET Az objektumhoz CAsyncSocket csatolt fogópontot jelzi.

Megjegyzések

Az osztály CAsyncSocket beágyazza a Windows Socket Functions API-t, amely objektumorientált absztrakciót biztosít azoknak a programozóknak, akik a Windows-szoftvercsatornákat az MFC-vel együtt szeretnék használni.

Ez az osztály azon a feltételezésen alapul, hogy tisztában van a hálózati kommunikációval. Ön felelős a Unicode és a többbájtos karakterkészlet (MBCS) sztringjei közötti blokkolások, bájtsorrendbeli különbségek és átalakítások kezeléséért. Ha kényelmesebb felületet szeretne, amely kezeli ezeket a problémákat, tekintse meg az osztályt CSocket.

Objektum CAsyncSocket használatához hívja meg a konstruktort, majd hívja meg a függvényt a Create mögöttes szoftvercsatorna leírójának (típusának SOCKET) létrehozásához, kivéve az elfogadott szoftvercsatornákat. Kiszolgálói szoftvercsatorna esetén hívja meg a Listen tagfüggvényt, ügyfélcsatorna esetén pedig a tagfüggvényt Connect . A kiszolgáló szoftvercsatornájának meg kell hívnia a Accept függvényt a kapcsolatkérés fogadásakor. Használja a többi CAsyncSocket függvényt a szoftvercsatornák közötti kommunikáció végrehajtásához. A befejezés után megsemmisítse az CAsyncSocket objektumot, ha a halomra lett létrehozva; a destruktor automatikusan meghívja a függvényt Close . Az SOCKET adattípust a Windows Szoftvercsatornák: Háttér című cikkben ismertetjük.

Megjegyzés:

Ha MFC-szoftvercsatornákat használ másodlagos szálakban egy statikusan csatolt MFC-alkalmazásban, minden olyan szálban meg kell hívnia AfxSocketInit , amely szoftvercsatornákat használ a szoftvercsatorna-kódtárak inicializálásához. Alapértelmezés szerint AfxSocketInit csak az elsődleges szálban van meghívva.

További információ : Windows Sockets: Using Class CAsyncSocket and related articles., valamint Windows Sockets 2 API.

Öröklési hierarchia

CObject

CAsyncSocket

Követelmények

fejléc:afxsock.h

CAsyncSocket::Accept

Hívja meg ezt a tagfüggvényt, hogy fogadjon el egy kapcsolatot egy szoftvercsatornán.

virtual BOOL Accept(
    CAsyncSocket& rConnectedSocket,
    SOCKADDR* lpSockAddr = NULL,
    int* lpSockAddrLen = NULL);

Paraméterek

rConnectedSocket
A kapcsolathoz elérhető új szoftvercsatornát azonosító hivatkozás.

lpSockAddr
Egy olyan struktúrára mutató SOCKADDR mutató, amely megkapja a csatlakozó szoftvercsatorna címét a hálózaton ismert módon. Az argumentum pontos formátumát a lpSockAddr szoftvercsatorna létrehozásakor létrehozott címcsalád határozza meg. Ha lpSockAddr és/vagy lpSockAddrLen egyenlő NULL, akkor a rendszer nem ad vissza információt az elfogadott szoftvercsatorna távoli címéről.

lpSockAddrLen
Mutató a cím bájtban megadott lpSockAddr hosszára. Ez lpSockAddrLen egy érték-eredmény paraméter: kezdetben tartalmaznia kell a visszaadott cím tényleges hosszát (bájtban kifejezve) az ; által mutatott lpSockAddrtérközt.

Visszaadott érték

Nonzero, ha a függvény sikeres; ellenkező esetben 0, és egy adott hibakód lekérhető a hívással GetLastError. A tagfüggvényre a következő hibák vonatkoznak:

  • WSANOTINITIALISED Az API használata előtt sikeresnek AfxSocketInit kell lennie.

  • WSAENETDOWN A Windows Sockets implementáció azt észlelte, hogy a hálózati alrendszer meghibásodott.

  • WSAEFAULT Az lpSockAddrLen argumentum túl kicsi (kisebb, mint egy SOCKADDR struktúra mérete).

  • WSAEINPROGRESS Folyamatban van egy blokkoló Windows Sockets-hívás.

  • WSAEINVAL Listen nem lett meghívva az elfogadás előtt.

  • WSAEMFILE Az üzenetsor a belépéskor üres, és nincs elérhető leíró.

  • WSAENOBUFS Nincs szabad pufferterület.

  • WSAENOTSOCK A leíró nem szoftvercsatorna.

  • WSAEOPNOTSUPP A hivatkozott szoftvercsatorna nem olyan típus, amely támogatja a kapcsolatorientált szolgáltatást.

  • WSAEWOULDBLOCK A szoftvercsatorna blokkolásmentesként van megjelölve, és nem fogadható el kapcsolat.

Megjegyzések

Ez a rutin kinyeri az első kapcsolatot a függőben lévő kapcsolatok várólistájában, létrehoz egy új szoftvercsatornát, amely ugyanazokkal a tulajdonságokkal rendelkezik, mint ez a szoftvercsatorna, és csatolja a szoftvercsatornához rConnectedSocket. Ha nincs függőben lévő kapcsolat az üzenetsoron, nulla értéket ad vissza, Accept és GetLastError hibát ad vissza. Az elfogadott szoftvercsatorna (rConnectedSocket) nem használható további kapcsolatok elfogadására. Az eredeti foglalat nyitva marad, és figyel.

Az argumentum lpSockAddr egy eredményparaméter, amely a kommunikációs réteg által ismert összekötő szoftvercsatorna címével van kitöltve. Accept kapcsolatalapú szoftvercsatorna-típusokhoz, például SOCK_STREAM.

CAsyncSocket::AsyncSelect

Hívja meg ezt a tagfüggvényt, hogy eseményértesítést kérjen egy szoftvercsatornához.

BOOL AsyncSelect(long lEvent = FD_READ | FD_WRITE | FD_OOB | FD_ACCEPT | FD_CONNECT | FD_CLOSE);

Paraméterek

lEvent
Bitmaszk, amely az alkalmazás számára érdekes hálózati események kombinációját adja meg.

  • FD_READ Értesítést szeretne kapni az olvasásra való felkészültségről.

  • FD_WRITE Értesítést szeretne kapni, ha az adatok olvashatók.

  • FD_OOB Értesítést szeretne kapni a sávon kívüli adatok érkezéséről.

  • FD_ACCEPT Értesítést szeretne kapni a bejövő kapcsolatokról.

  • FD_CONNECT Értesítést szeretne kapni a kapcsolat eredményéről.

  • FD_CLOSE Értesítést szeretne kapni, ha egy szoftvercsatornát egy társ bezárt.

Visszaadott érték

Nonzero, ha a függvény sikeres; ellenkező esetben 0, és egy adott hibakód lekérhető a hívással GetLastError. A tagfüggvényre a következő hibák vonatkoznak:

  • WSANOTINITIALISED Az API használata előtt sikeresnek AfxSocketInit kell lennie.

  • WSAENETDOWN A Windows Sockets implementáció azt észlelte, hogy a hálózati alrendszer meghibásodott.

  • WSAEINVAL Azt jelzi, hogy az egyik megadott paraméter érvénytelen volt.

  • WSAEINPROGRESS A Windows Sockets blokkolási művelete folyamatban van.

Megjegyzések

Ezzel a függvénnyel adhatja meg, hogy mely MFC visszahívási értesítési függvényeket hívja meg a szoftvercsatornához. AsyncSelect automatikusan beállítja ezt a szoftvercsatornát letiltási módra. További információ: Windows Sockets: Socket Notifications.

CAsyncSocket::Attach

A tagfüggvény meghívásával csatolja a hSocket leírót egy CAsyncSocket objektumhoz.

BOOL Attach(
    SOCKET hSocket, long lEvent = FD_READ | FD_WRITE | FD_OOB | FD_ACCEPT | FD_CONNECT | FD_CLOSE);

Paraméterek

hSocket
Egy szoftvercsatorna fogópontját tartalmazza.

lEvent
Bitmaszk, amely az alkalmazás számára érdekes hálózati események kombinációját adja meg.

  • FD_READ Értesítést szeretne kapni az olvasásra való felkészültségről.

  • FD_WRITE Értesítést szeretne kapni, ha az adatok olvashatók.

  • FD_OOB Értesítést szeretne kapni a sávon kívüli adatok érkezéséről.

  • FD_ACCEPT Értesítést szeretne kapni a bejövő kapcsolatokról.

  • FD_CONNECT Értesítést szeretne kapni a kapcsolat eredményéről.

  • FD_CLOSE Értesítést szeretne kapni, ha egy szoftvercsatornát egy társ bezárt.

Visszaadott érték

Nonzero, ha a függvény sikeres.

Megjegyzések

A SOCKET leírót az objektum adattagja m_hSocket tárolja.

CAsyncSocket::Bind

Hívja meg ezt a tagfüggvényt egy helyi címnek a szoftvercsatornához való társításához.

BOOL Bind(
    UINT nSocketPort,
    LPCTSTR lpszSocketAddress = NULL);

BOOL Bind (
    const SOCKADDR* lpSockAddr,
    int nSockAddrLen);

Paraméterek

nSocketPort
A szoftvercsatorna-alkalmazást azonosító port.

lpszSocketAddress
A hálózati cím, egy pontozott szám, például "128.56.22.8". A paraméter sztringjének NULL továbbítása azt jelzi, hogy a CAsyncSocket példánynak figyelnie kell az ügyféltevékenységet az összes hálózati adapteren.

lpSockAddr
Az ehhez a SOCKADDR szoftvercsatornához rendelendő címet tartalmazó struktúra mutatója.

nSockAddrLen
A cím hossza bájtban lpSockAddr .

Visszaadott érték

Nonzero, ha a függvény sikeres; ellenkező esetben 0, és egy adott hibakód lekérhető a hívással GetLastError. Az alábbi lista a visszaadható hibák közül néhányat ismerteti. A teljes listát a Windows Szoftvercsatornák hibakódjai című témakörben találja.

  • WSANOTINITIALISED Az API használata előtt sikeresnek AfxSocketInit kell lennie.

  • WSAENETDOWN A Windows Sockets implementáció azt észlelte, hogy a hálózati alrendszer meghibásodott.

  • WSAEADDRINUSE A megadott cím már használatban van. (Lásd a SO_REUSEADDR szoftvercsatorna beállítását a SetSockOpt.)

  • WSAEFAULT Az nSockAddrLen argumentum túl kicsi (kisebb, mint egy SOCKADDR struktúra mérete).

  • WSAEINPROGRESS Folyamatban van egy blokkoló Windows Sockets-hívás.

  • WSAEAFNOSUPPORT A megadott címcsaládot ez a port nem támogatja.

  • WSAEINVAL A szoftvercsatorna már egy címhez van kötve.

  • WSAENOBUFS Nincs elég puffer, túl sok kapcsolat.

  • WSAENOTSOCK A leíró nem szoftvercsatorna.

Megjegyzések

Ezt a rutint egy nem összekapcsolt datagram- vagy streamcsatornán használják a rendszer a későbbi Connect vagy Listen a hívások előtt. Mielőtt elfogadná a kapcsolatkéréseket, a figyelési kiszolgáló szoftvercsatornáinak ki kell választaniuk egy portszámot, és hívással Bindismertetniük kell a Windows-szoftvercsatornákkal. Bind a szoftvercsatorna helyi társítását (állomáscím/portszám) úgy hozza létre, hogy egy helyi nevet rendel egy névtelen szoftvercsatornához.

CAsyncSocket::CAsyncSocket

Üres szoftvercsatorna-objektumot hoz létre.

CAsyncSocket();

Megjegyzések

Az objektum létrehozása után meg kell hívnia annak tagfüggvényét Create az adatstruktúra létrehozásához és a SOCKET cím kötéséhez. (A Windows-szoftvercsatornák kommunikációjának kiszolgálóoldalán, amikor a figyelő szoftvercsatorna létrehoz egy szoftvercsatornát, amelyet használni szeretne a Accept hívásban, nem kell meghívnia Create a szoftvercsatornát.)

CAsyncSocket::Close

Bezárja a foglalatot.

virtual void Close();

Megjegyzések

Ez a függvény felszabadítja a szoftvercsatorna-leírót, így a további rá mutató hivatkozások sikertelenek lesznek a hibával WSAENOTSOCK. Ha ez az utolsó hivatkozás a mögöttes szoftvercsatornára, a rendszer elveti a társított elnevezési információkat és az üzenetsorba helyezett adatokat. A szoftvercsatorna-objektum destruktora meghívja Close Önt.

A CAsyncSocketszoftvercsatorna-beállítások CSocketClose és a SO_LINGER .SO_DONTLINGER További információ: tagfüggvény GetSockOpt.

CAsyncSocket::Connect

Hívja meg ezt a tagfüggvényt, hogy kapcsolatot létesítsen egy nem összekapcsolt streamhez vagy datagram-szoftvercsatornához.

BOOL Connect(
    LPCTSTR lpszHostAddress,
    UINT nHostPort);

BOOL Connect(
    const SOCKADDR* lpSockAddr,
    int nSockAddrLen);

Paraméterek

lpszHostAddress
Annak a szoftvercsatornának a hálózati címe, amelyhez az objektum csatlakozik: egy gép neve, például "ftp.microsoft.com", vagy pontozott szám, például "128.56.22.8".

nHostPort
A szoftvercsatorna-alkalmazást azonosító port.

lpSockAddr
A csatlakoztatott szoftvercsatorna címét tartalmazó struktúra mutatója SOCKADDR .

nSockAddrLen
A cím hossza bájtban lpSockAddr .

Visszaadott érték

Nonzero, ha a függvény sikeres; ellenkező esetben 0, és egy adott hibakód lekérhető a hívással GetLastError. Ha ez a hibakódot WSAEWOULDBLOCKjelzi, és az alkalmazás a felülírható visszahívásokat használja, az alkalmazás üzenetet OnConnect fog kapni a kapcsolódási művelet befejezésekor. A tagfüggvényre a következő hibák vonatkoznak:

  • WSANOTINITIALISED Az API használata előtt sikeresnek AfxSocketInit kell lennie.

  • WSAENETDOWN A Windows Sockets implementáció azt észlelte, hogy a hálózati alrendszer meghibásodott.

  • WSAEADDRINUSE A megadott cím már használatban van.

  • WSAEINPROGRESS Folyamatban van egy blokkoló Windows Sockets-hívás.

  • WSAEADDRNOTAVAIL A megadott cím nem érhető el a helyi gépről.

  • WSAEAFNOSUPPORT A megadott családban lévő címek nem használhatók ezzel a szoftvercsatornával.

  • WSAECONNREFUSED A csatlakozási kísérlet elutasításra került.

  • WSAEDESTADDRREQ Célcímre van szükség.

  • WSAEFAULT Az nSockAddrLen argumentum helytelen.

  • WSAEINVAL Érvénytelen gazdagépcím.

  • WSAEISCONN A szoftvercsatorna már csatlakoztatva van.

  • WSAEMFILE Nincs több fájlleíró.

  • WSAENETUNREACH A hálózat jelenleg nem érhető el erről a gazdagépről.

  • WSAENOBUFS Nincs szabad pufferterület. A szoftvercsatorna nem csatlakoztatható.

  • WSAENOTSOCK A leíró nem szoftvercsatorna.

  • WSAETIMEDOUT Kapcsolat létrehozása nélkül próbálja meg időtúllépéssel csatlakozni.

  • WSAEWOULDBLOCK A szoftvercsatorna blokkolásmentesként van megjelölve, és a kapcsolat nem hajtható végre azonnal.

Megjegyzések

Ha a szoftvercsatorna kötetlen, a rendszer egyedi értékeket rendel a helyi társításhoz, és a szoftvercsatorna kötöttként van megjelölve. Vegye figyelembe, hogy ha a névstruktúra címmezője minden nullát tartalmaz, Connect nullát ad vissza. A kiterjesztett hibainformációk lekéréséhez hívja meg a tagfüggvényt GetLastError .

Stream-szoftvercsatornák (típus SOCK_STREAM) esetén aktív kapcsolat jön létre az idegen gazdagéppel. Ha a szoftvercsatorna-hívás sikeresen befejeződött, a szoftvercsatorna készen áll az adatok küldésére/fogadására.

Egy datagram-szoftvercsatornához (típus) SOCK_DGRAMegy alapértelmezett cél van beállítva, amelyet a rendszer a későbbi Send és Receive a hívások során használ.

CAsyncSocket::Create

Hívja meg a Create tagfüggvényt egy szoftvercsatorna-objektum létrehozása után a Windows-szoftvercsatorna létrehozásához és csatolásához.

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);

Paraméterek

nSocketPort
Egy jól ismert port, amelyet a szoftvercsatornával kell használni, vagy 0, ha azt szeretné, hogy a Windows-szoftvercsatornák válasszanak ki egy portot.

nSocketType
SOCK_STREAM vagy SOCK_DGRAM.

lEvent
Bitmaszk, amely az alkalmazás számára érdekes hálózati események kombinációját adja meg.

  • FD_READ Értesítést szeretne kapni az olvasásra való felkészültségről.

  • FD_WRITE Értesítést szeretne kapni az íráskészségről.

  • FD_OOB Értesítést szeretne kapni a sávon kívüli adatok érkezéséről.

  • FD_ACCEPT Értesítést szeretne kapni a bejövő kapcsolatokról.

  • FD_CONNECT Értesítést szeretne kapni a befejezett kapcsolatról.

  • FD_CLOSE Értesítést szeretne kapni a szoftvercsatornák bezárásáról.

lpszSockAddress
Mutató a csatlakoztatott szoftvercsatorna hálózati címét tartalmazó sztringre, egy pontozott számra, például "128.56.22.8". A paraméter sztringjének NULL továbbítása azt jelzi, hogy a CAsyncSocket példánynak figyelnie kell az ügyféltevékenységet az összes hálózati adapteren.

Visszaadott érték

Nonzero, ha a függvény sikeres; ellenkező esetben 0, és egy adott hibakód lekérhető a hívással GetLastError. A tagfüggvényre a következő hibák vonatkoznak:

  • WSANOTINITIALISED Az API használata előtt sikeresnek AfxSocketInit kell lennie.

  • WSAENETDOWN A Windows Sockets implementáció azt észlelte, hogy a hálózati alrendszer meghibásodott.

  • WSAEAFNOSUPPORT A megadott címcsalád nem támogatott.

  • WSAEINPROGRESS A Windows Sockets blokkolási művelete folyamatban van.

  • WSAEMFILE Nincs több fájlleíró.

  • WSAENOBUFS Nincs szabad pufferterület. A szoftvercsatorna nem hozható létre.

  • WSAEPROTONOSUPPORT A megadott port nem támogatott.

  • WSAEPROTOTYPE A megadott port nem megfelelő típus ehhez a szoftvercsatornához.

  • WSAESOCKTNOSUPPORT A megadott szoftvercsatornatípus nem támogatott ebben a címcsaládban.

Megjegyzések

Create hívásokat kezdeményez Socket , és ha sikeres, meghívja Bind a szoftvercsatornát a megadott címhez kötésre. A következő szoftvercsatorna-típusok támogatottak:

  • SOCK_STREAM Szekvenciált, megbízható, teljes kétoldalas, kapcsolatalapú bájtstreameket biztosít. A Transmission Control Protocol (TCP) protokollt használja az internetcímcsaládhoz.

  • SOCK_DGRAM Támogatja a rögzített (általában kis) maximális hosszúságú, kapcsolat nélküli, megbízhatatlan csomagokat. A User Datagram Protocol (UDP) protokollt használja az internetcímcsaládhoz.

    Megjegyzés:

    A Accept tagfüggvény paraméterként egy új, üres CSocket objektumra mutató hivatkozást vesz fel. Önnek létre kell hoznia ezt az objektumot, mielőtt hívja a Accept-t. Ne feledje, hogy ha ez a szoftvercsatorna-objektum kiesik a hatókörből, a kapcsolat bezárul. Ne hívja meg Create ezt az új szoftvercsatorna-objektumot.

Fontos

Create nincs szálbiztos. Ha többszálas környezetben hívja meg, ahol a különböző szálak egyszerre hívhatják meg, mindenképpen védje meg az egyes hívásokat egy mutex vagy más szinkronizálási zárolással.

A stream- és datagram-szoftvercsatornákkal kapcsolatos további információkért lásd a Windows Sockets: Background and Windows Sockets: Ports and Socket Addresses andWindows Sockets 2 API című cikket.

CAsyncSocket::CreateEx

Hívja meg a CreateEx tagfüggvényt egy szoftvercsatorna-objektum létrehozása után a Windows-szoftvercsatorna létrehozásához és csatolásához.

Ezt a függvényt akkor használja, ha speciális beállításokat kell megadnia, például a szoftvercsatorna típusát.

BOOL CreateEx(
    ADDRINFOT* pAI,
    long lEvent = FD_READ | FD_WRITE | FD_OOB | FD_ACCEPT | FD_CONNECT | FD_CLOSE);

Paraméterek

pAI
Egy olyan szoftvercsatorna-információ tárolására mutató ADDRINFOT mutató, mint a család és a szoftvercsatorna típusa.

lEvent
Bitmaszk, amely az alkalmazás számára érdekes hálózati események kombinációját adja meg.

  • FD_READ Értesítést szeretne kapni az olvasásra való felkészültségről.

  • FD_WRITE Értesítést szeretne kapni az íráskészségről.

  • FD_OOB Értesítést szeretne kapni a sávon kívüli adatok érkezéséről.

  • FD_ACCEPT Értesítést szeretne kapni a bejövő kapcsolatokról.

  • FD_CONNECT Értesítést szeretne kapni a befejezett kapcsolatról.

  • FD_CLOSE Értesítést szeretne kapni a szoftvercsatornák bezárásáról.

Visszaadott érték

Lásd a visszatérési értéket a következőhöz Create(): .

Megjegyzések

Lásd a megjegyzéseket a következőhöz Create(): .

CAsyncSocket::Detach

Hívja meg ezt a tagfüggvényt, hogy leválasztsa az SOCKETm_hSocket adatelem leíróját az CAsyncSocket objektumról, és állítsa a következőre m_hSocketNULL: .

SOCKET Detach();

CAsyncSocket::FromHandle

Egy objektumra mutató mutatót CAsyncSocket ad vissza.

static CAsyncSocket* PASCAL FromHandle(SOCKET hSocket);

Paraméterek

hSocket
Egy szoftvercsatorna fogópontját tartalmazza.

Visszaadott érték

Egy objektumra mutató CAsyncSocket mutató, vagy NULL ha nincs CAsyncSocket objektum csatolva.hSocket

Megjegyzések

Ha egy fogópontot SOCKET ad meg, ha egy CAsyncSocket objektum nincs csatolva a fogóponthoz, a tagfüggvény ad vissza NULL.

CAsyncSocket::GetLastError

Hívja meg ezt a tagfüggvényt a legutóbbi sikertelen művelet hibaállapotának lekéréséhez.

static int PASCAL GetLastError();

Visszaadott érték

A visszatérési érték a szál által végrehajtott utolsó Windows Sockets API-rutin hibakódját jelzi.

Megjegyzések

Ha egy tagfüggvény azt jelzi, hogy hiba történt, GetLastError a megfelelő hibakód lekéréséhez meg kell hívni. A vonatkozó hibakódok listáját az egyes tagfüggvények leírásában találja.

A hibakódokkal kapcsolatos további információkért lásd a Windows Sockets 2 API-t.

CAsyncSocket::GetPeerName

Hívja meg ezt a tagfüggvényt annak a társcsatornának a címének lekéréséhez, amelyhez a szoftvercsatorna csatlakozik.

BOOL GetPeerName(
    CString& rPeerAddress,
    UINT& rPeerPort);

BOOL GetPeerName(
    SOCKADDR* lpSockAddr,
    int* lpSockAddrLen);

Paraméterek

rPeerAddress
Hivatkozás pontozott CString számú IP-címet kapó objektumra.

rPeerPort
Hivatkozás egy UINT portot tároló fájlra.

lpSockAddr
A társcsatorna nevét fogadó struktúra mutatója SOCKADDR .

lpSockAddrLen
Mutató a cím bájtban megadott lpSockAddr hosszára. Visszatéréskor az argumentum a lpSockAddrLen visszaadott bájtok tényleges méretét lpSockAddr tartalmazza.

Visszaadott érték

Nonzero, ha a függvény sikeres; ellenkező esetben 0, és egy adott hibakód lekérhető a hívással GetLastError. A tagfüggvényre a következő hibák vonatkoznak:

  • WSANOTINITIALISED Az API használata előtt sikeresnek AfxSocketInit kell lennie.

  • WSAENETDOWN A Windows Sockets implementáció azt észlelte, hogy a hálózati alrendszer meghibásodott.

  • WSAEFAULT Az lpSockAddrLen argumentum nem elég nagy.

  • WSAEINPROGRESS Folyamatban van egy blokkoló Windows Sockets-hívás.

  • WSAENOTCONN A szoftvercsatorna nincs csatlakoztatva.

  • WSAENOTSOCK A leíró nem szoftvercsatorna.

Megjegyzések

Az IPv6-címek kezeléséhez használja a következőt CAsyncSocket::GetPeerNameEx: .

CAsyncSocket::GetPeerNameEx

Hívja meg ezt a tagfüggvényt annak a társcsatornának a címének lekéréséhez, amelyhez a szoftvercsatorna csatlakozik (az IPv6-címeket kezeli).

BOOL GetPeerNameEx(
    CString& rPeerAddress,
    UINT& rPeerPort);

Paraméterek

rPeerAddress
Hivatkozás pontozott CString számú IP-címet kapó objektumra.

rPeerPort
Hivatkozás egy UINT portot tároló fájlra.

Visszaadott érték

Nonzero, ha a függvény sikeres; ellenkező esetben 0, és egy adott hibakód lekérhető a hívással GetLastError. A tagfüggvényre a következő hibák vonatkoznak:

  • WSANOTINITIALISED Az API használata előtt sikeresnek AfxSocketInit kell lennie.

  • WSAENETDOWN A Windows Sockets implementáció azt észlelte, hogy a hálózati alrendszer meghibásodott.

  • WSAEFAULT Az lpSockAddrLen argumentum nem elég nagy.

  • WSAEINPROGRESS Folyamatban van egy blokkoló Windows Sockets-hívás.

  • WSAENOTCONN A szoftvercsatorna nincs csatlakoztatva.

  • WSAENOTSOCK A leíró nem szoftvercsatorna.

Megjegyzések

Ez a függvény megegyezik azzal a kivétellel CAsyncSocket::GetPeerName , hogy az IPv6-címeket és a régebbi protokollokat kezeli.

CAsyncSocket::GetSockName

Hívja meg ezt a tagfüggvényt egy szoftvercsatorna helyi nevének lekéréséhez.

BOOL GetSockName(
    CString& rSocketAddress,
    UINT& rSocketPort);

BOOL GetSockName(
    SOCKADDR* lpSockAddr,
    int* lpSockAddrLen);

Paraméterek

rSocketAddress
Hivatkozás pontozott CString számú IP-címet kapó objektumra.

rSocketPort
Hivatkozás egy UINT portot tároló fájlra.

lpSockAddr
A szoftvercsatorna címét fogadó struktúra mutatója SOCKADDR .

lpSockAddrLen
Mutató a cím bájtban megadott lpSockAddr hosszára.

Visszaadott érték

Nonzero, ha a függvény sikeres; ellenkező esetben 0, és egy adott hibakód lekérhető a hívással GetLastError. A tagfüggvényre a következő hibák vonatkoznak:

  • WSANOTINITIALISED Az API használata előtt sikeresnek AfxSocketInit kell lennie.

  • WSAENETDOWN A Windows Sockets implementáció azt észlelte, hogy a hálózati alrendszer meghibásodott.

  • WSAEFAULT Az lpSockAddrLen argumentum nem elég nagy.

  • WSAEINPROGRESS A Windows Sockets blokkolási művelete folyamatban van.

  • WSAENOTSOCK A leíró nem szoftvercsatorna.

  • WSAEINVAL A szoftvercsatornát nem a következő címhez Bindkötötte: .

Megjegyzések

Ez a hívás különösen akkor hasznos, ha a Connect hívás első lépés Bind nélkül történt; ez a hívás biztosítja az egyetlen eszközt, amellyel meghatározhatja a rendszer által beállított helyi társítást.

Az IPv6-címek kezeléséhez használja a CAsyncSocket::GetSockNameEx

CAsyncSocket::GetSockNameEx

Hívja meg ezt a tagfüggvényt egy szoftvercsatorna helyi nevének lekéréséhez (az IPv6-címeket kezeli).

BOOL GetSockNameEx(
    CString& rSocketAddress,
    UINT& rSocketPort);

Paraméterek

rSocketAddress
Hivatkozás pontozott CString számú IP-címet kapó objektumra.

rSocketPort
Hivatkozás egy UINT portot tároló fájlra.

Visszaadott érték

Nonzero, ha a függvény sikeres; ellenkező esetben 0, és egy adott hibakód lekérhető a hívással GetLastError. A tagfüggvényre a következő hibák vonatkoznak:

  • WSANOTINITIALISED Az API használata előtt sikeresnek AfxSocketInit kell lennie.

  • WSAENETDOWN A Windows Sockets implementáció azt észlelte, hogy a hálózati alrendszer meghibásodott.

  • WSAEFAULT Az lpSockAddrLen argumentum nem elég nagy.

  • WSAEINPROGRESS A Windows Sockets blokkolási művelete folyamatban van.

  • WSAENOTSOCK A leíró nem szoftvercsatorna.

  • WSAEINVAL A szoftvercsatornát nem a következő címhez Bindkötötte: .

Megjegyzések

Ez a hívás megegyezik azzal a kivétellel CAsyncSocket::GetSockName , hogy az IPv6-címeket és a régebbi protokollokat kezeli.

Ez a hívás különösen akkor hasznos, ha a Connect hívás első lépés Bind nélkül történt; ez a hívás biztosítja az egyetlen eszközt, amellyel meghatározhatja a rendszer által beállított helyi társítást.

CAsyncSocket::GetSockOpt

Hívja meg ezt a tagfüggvényt egy szoftvercsatorna-beállítás lekéréséhez.

BOOL GetSockOpt(
    int nOptionName,
    void* lpOptionValue,
    int* lpOptionLen,
    int nLevel = SOL_SOCKET);

Paraméterek

nOptionName
Az a szoftvercsatorna-beállítás, amelyhez az értéket le kell kérni.

lpOptionValue
Egy mutató arra a pufferre, amelyben a kért beállítás értékét vissza kell adni. A kijelölt beállításhoz társított érték a pufferben lpOptionValuelesz visszaadva. A hivatkozott lpOptionLen egész számnak eredetileg bájtban kell tartalmaznia a puffer méretét, és visszatéréskor a visszaadott érték méretére lesz beállítva. Ebben SO_LINGERaz esetben ez egy LINGER struktúra mérete lesz; az összes többi beállításnál a BOOL vagy integy mérete lesz a beállítástól függően. A beállítások és méretük listáját a Megjegyzések szakaszban tekintheti meg.

lpOptionLen
Mutató a puffer méretére lpOptionValue bájtban.

nLevel
Az a szint, amelyen a beállítás definiálva van; az egyetlen támogatott szint az SOL_SOCKET and IPPROTO_TCP.

Visszaadott érték

Nonzero, ha a függvény sikeres; ellenkező esetben 0, és egy adott hibakód lekérhető a hívással GetLastError. Ha egy beállítás soha nem lett beállítva SetSockOpt, akkor GetSockOpt a beállítás alapértelmezett értékét adja vissza. A tagfüggvényre a következő hibák vonatkoznak:

  • WSANOTINITIALISED Az API használata előtt sikeresnek AfxSocketInit kell lennie.

  • WSAENETDOWN A Windows Sockets implementáció azt észlelte, hogy a hálózati alrendszer meghibásodott.

  • WSAEFAULT Az lpOptionLen argumentum érvénytelen volt.

  • WSAEINPROGRESS A Windows Sockets blokkolási művelete folyamatban van.

  • WSAENOPROTOOPT A beállítás ismeretlen vagy nem támogatott. Különösen SO_BROADCAST nem támogatott a szoftvercsatornákon SOCK_STREAM, míg SO_ACCEPTCONNa , SO_DONTLINGER, SO_KEEPALIVESO_LINGER, és SO_OOBINLINE nem támogatottak a típusú SOCK_DGRAMszoftvercsatornákon .

  • WSAENOTSOCK A leíró nem szoftvercsatorna.

Megjegyzések

GetSockOpt Lekéri a szoftvercsatornához társított szoftvercsatorna-beállítás aktuális értékét bármilyen állapotban, és az eredményt a következőben lpOptionValuetárolja: . A lehetőségek hatással vannak a szoftvercsatornák műveleteire, például a csomagok útválasztására, a sávon kívüli adatátvitelre stb.

A következő beállítások támogatottak.GetSockOpt A Típus a címzett adattípust lpOptionValueazonosítja. A TCP_NODELAY beállítás a szintet IPPROTO_TCPhasználja; az összes többi beállítás a szintet SOL_SOCKEThasználja.

Érték típus Értelmezés
SO_ACCEPTCONN BOOL A szoftvercsatorna figyel.
SO_BROADCAST BOOL A szoftvercsatorna a szórásos üzenetek továbbítására van konfigurálva.
SO_DEBUG BOOL A hibakeresés engedélyezve van.
SO_DONTLINGER BOOL Ha igaz, a SO_LINGER beállítás le van tiltva.
SO_DONTROUTE BOOL Az útválasztás le van tiltva.
SO_ERROR int Kérje le a hiba állapotát, és törölje a jelet.
SO_KEEPALIVE BOOL Életben tartást küldenek.
SO_LINGER struct LINGER Az aktuális linger-beállításokat adja vissza.
SO_OOBINLINE BOOL Sávon kívüli adatok érkeznek a normál adatfolyamban.
SO_RCVBUF int A fogadások puffermérete.
SO_REUSEADDR BOOL A szoftvercsatorna egy már használatban lévő címhez köthető.
SO_SNDBUF int A küldés puffermérete.
SO_TYPE int A szoftvercsatorna típusa (például SOCK_STREAM).
TCP_NODELAY BOOL Letiltja a Nagle-algoritmust a szenesítés küldéséhez.

A Berkeley Software Distribution (BSD) nem támogatott beállításai a GetSockOpt következők:

Érték típus Értelmezés
SO_RCVLOWAT int Alacsony vízjelet kap.
SO_RCVTIMEO int Időtúllépés fogadása.
SO_SNDLOWAT int Küldjön alacsony vízjelet.
SO_SNDTIMEO int Időtúllépés küldése.
IP_OPTIONS Az IP-fejléc beállításainak lekérése.
TCP_MAXSEG int A TCP maximális szegmensméretének lekérése.

A nem támogatott beállítással történő híváskor GetSockOpt a rendszer a visszaadott WSAENOPROTOOPThibakódot GetLastError fogja eredményezni.

CAsyncSocket::IOCtl

Hívja meg ezt a tagfüggvényt a szoftvercsatornák módjának szabályozásához.

BOOL IOCtl(
    long lCommand,
    DWORD* lpArgument);

Paraméterek

lCommand
A szoftvercsatornán végrehajtandó parancs.

lpArgument
Mutató egy paraméterhez a következőhöz lCommand: .

Visszaadott érték

Nonzero, ha a függvény sikeres; ellenkező esetben 0, és egy adott hibakód lekérhető a hívással GetLastError. A tagfüggvényre a következő hibák vonatkoznak:

  • WSANOTINITIALISED Az API használata előtt sikeresnek AfxSocketInit kell lennie.

  • WSAENETDOWN A Windows Sockets implementáció azt észlelte, hogy a hálózati alrendszer meghibásodott.

  • WSAEINVAL lCommand nem érvényes parancs, vagy lpArgument nem elfogadható paraméter lCommand, vagy a parancs nem alkalmazható a megadott szoftvercsatorna típusára.

  • WSAEINPROGRESS A Windows Sockets blokkolási művelete folyamatban van.

  • WSAENOTSOCK A leíró nem szoftvercsatorna.

Megjegyzések

Ez a rutin bármilyen állapotú szoftvercsatornán használható. A szoftvercsatornához társított üzemeltetési paraméterek lekérésére vagy lekérésére szolgál, függetlenül a protokoll- és kommunikációs alrendszerétől. A következő parancsok támogatottak:

  • FIONBIO Engedélyezze vagy tiltsa le a nem blokkoló módot a szoftvercsatornán. A lpArgument paraméter egy DWORD, amely nem engedélyezett, ha a tiltó mód engedélyezve van, és nulla, ha le szeretné tiltani. Ha AsyncSelect egy szoftvercsatornán lett kiadva, akkor a szoftvercsatorna blokkolási módra való visszaállítására tett kísérletek IOCtl sikertelenek lesznek WSAEINVAL. Ha vissza szeretné állítani a szoftvercsatornát blokkolási módra, és meg szeretné akadályozni a WSAEINVAL hibát, az alkalmazásnak először le kell tiltania AsyncSelect a AsyncSelect 0-val egyenlő paraméter meghívásávallEvent, majd a hívássalIOCtl.

  • FIONREAD Határozza meg a szoftvercsatornából egy Receive hívással beolvasható bájtok maximális számát. A lpArgument paraméter egy DWORD olyan pontra mutat, amelyben IOCtl az eredményt tárolja. Ha ez a szoftvercsatorna típus SOCK_STREAM, FIONREAD akkor az egyetlenben Receiveolvasható adatok teljes mennyiségét adja vissza; ez általában megegyezik a szoftvercsatornán várólistára helyezett adatok teljes mennyiségével. Ha ez a szoftvercsatorna típusa SOCK_DGRAM, FIONREAD a szoftvercsatornán várólistára helyezett első datagram méretét adja vissza.

  • SIOCATMARK Annak meghatározása, hogy az összes sávon kívüli adat be van-e olvasva. Ez csak olyan típusú SOCK_STREAM szoftvercsatornára vonatkozik, amely konfigurálva van a sávon kívüli adatok (SO_OOBINLINE) soron belüli fogadásához. Ha nincs sávon kívüli adat, amely olvasásra vár, a művelet nem ad vissza értéket. Ellenkező esetben a függvény 0 értéket ad vissza, és a következő Receive vagy ReceiveFrom a szoftvercsatornán végrehajtott művelet lekéri a "jel" előtti adatok egy részét vagy egészét; az alkalmazásnak a SIOCATMARK művelettel kell meghatároznia, hogy marad-e adat. Ha a "sürgős" (sávon kívüli) adatok előtt vannak normál adatok, azokat a rendszer sorrendben kapja meg. (Vegye figyelembe, hogy a ReceiveReceiveFrom sávon kívüli és a normál adatokat soha nem fogja keverni ugyanabban a hívásban.) A lpArgument paraméter egy DWORD olyan pontra mutat, amelyben IOCtl az eredményt tárolja.

Ez a függvény a Berkeley-szoftvercsatornákban használt részhalmaz ioctl() . Különösen nincs olyan parancs, amely egyenértékű, FIOASYNCmíg SIOCATMARK az egyetlen szoftvercsatornás szintű parancs, amely támogatott.

CAsyncSocket::Listen

Hívja meg ezt a tagfüggvényt a bejövő kapcsolatkérések figyeléséhez.

BOOL Listen(int nConnectionBacklog = 5);

Paraméterek

nConnectionBacklog
A függőben lévő kapcsolatok várólistájának maximális hossza. Az érvényes tartomány 1 és 5 között van.

Visszaadott érték

Nonzero, ha a függvény sikeres; ellenkező esetben 0, és egy adott hibakód lekérhető a hívással GetLastError. A tagfüggvényre a következő hibák vonatkoznak:

  • WSANOTINITIALISED Az API használata előtt sikeresnek AfxSocketInit kell lennie.

  • WSAENETDOWN A Windows Sockets implementáció azt észlelte, hogy a hálózati alrendszer meghibásodott.

  • WSAEADDRINUSE Kísérlet történt egy használt cím figyelésére.

  • WSAEINPROGRESS A Windows Sockets blokkolási művelete folyamatban van.

  • WSAEINVAL A szoftvercsatornát nem kötötte össze Bind , vagy már csatlakoztatva van.

  • WSAEISCONN A szoftvercsatorna már csatlakoztatva van.

  • WSAEMFILE Nincs több fájlleíró.

  • WSAENOBUFS Nincs szabad pufferterület.

  • WSAENOTSOCK A leíró nem szoftvercsatorna.

  • WSAEOPNOTSUPP A hivatkozott szoftvercsatorna nem olyan típusú, amely támogatja a Listen műveletet.

Megjegyzések

A kapcsolatok elfogadásához a szoftvercsatorna először a következővel Createjön létre: a rendszer a bejövő kapcsolatokhoz tartozó hátralékot adja megListen, majd a rendszer elfogadja a kapcsolatokat.Accept Listen csak azokra a szoftvercsatornákra vonatkozik, amelyek támogatják a kapcsolatokat, vagyis a típusokat SOCK_STREAM. Ez a szoftvercsatorna "passzív" módba kerül, ahol a bejövő kapcsolatokat a rendszer nyugtázza és várólistára helyezi a folyamat általi elfogadásig.

Ezt a függvényt általában olyan kiszolgálók (vagy bármely olyan alkalmazás) használják, amelyek egyszerre több csatlakozási kéréssel is rendelkezhetnek: ha egy kapcsolatkérés megtelt üzenetsorsal érkezik, az ügyfél hibaüzenetet kap, amely a következőt jelzi WSAECONNREFUSED: .

Listen ha nincsenek elérhető portok (leírók), a rendszer megpróbálja továbbra is észszerűen működni. Az üzenetsor kiürítéséig fogadja a kapcsolatokat. Ha a portok elérhetővé válnak, egy későbbi hívás ListenAccept vagy újra kitölti az üzenetsort az aktuális vagy legújabb "hátralékba", ha lehetséges, és folytathatja a bejövő kapcsolatok figyelését.

CAsyncSocket::m_hSocket

SOCKET Az objektum által CAsyncSocket beágyazott szoftvercsatorna fogópontját tartalmazza.

SOCKET m_hSocket;

CAsyncSocket::OnAccept

A keretrendszer meghívta a figyelési szoftvercsatornát, hogy a tagfüggvény meghívásával fogadja a Accept függőben lévő kapcsolatkéréseket.

virtual void OnAccept(int nErrorCode);

Paraméterek

nErrorCode
A szoftvercsatorna legutóbbi hibája. A tagfüggvényre a OnAccept következő hibakódok vonatkoznak:

  • 0 A függvény végrehajtása sikeresen megtörtént.

  • WSAENETDOWN A Windows Sockets implementáció azt észlelte, hogy a hálózati alrendszer meghibásodott.

Megjegyzések

További információ: Windows-szoftvercsatornák: Szoftvercsatorna-értesítések.

CAsyncSocket::OnClose

A keretrendszer meghívta, hogy értesítse ezt a szoftvercsatornát arról, hogy a csatlakoztatott szoftvercsatornát a folyamat bezárja.

virtual void OnClose(int nErrorCode);

Paraméterek

nErrorCode
A szoftvercsatorna legutóbbi hibája. A tagfüggvényre a OnClose következő hibakódok vonatkoznak:

  • 0 A függvény végrehajtása sikeresen megtörtént.

  • WSAENETDOWN A Windows Sockets implementáció azt észlelte, hogy a hálózati alrendszer meghibásodott.

  • WSAECONNRESET A kapcsolatot a távoli oldal állította alaphelyzetbe.

  • WSAECONNABORTED A kapcsolat időtúllépés vagy egyéb hiba miatt megszakadt.

Megjegyzések

További információ: Windows-szoftvercsatornák: Szoftvercsatorna-értesítések.

CAsyncSocket::OnConnect

A keretrendszer meghívta, hogy értesítse ezt a csatlakozó szoftvercsatornát arról, hogy a csatlakozási kísérlet befejeződött, akár sikeresen, akár hiba esetén.

virtual void OnConnect(int nErrorCode);

Paraméterek

nErrorCode
A szoftvercsatorna legutóbbi hibája. A tagfüggvényre a OnConnect következő hibakódok vonatkoznak:

  • 0 A függvény végrehajtása sikeresen megtörtént.

  • WSAEADDRINUSE A megadott cím már használatban van.

  • WSAEADDRNOTAVAIL A megadott cím nem érhető el a helyi gépről.

  • WSAEAFNOSUPPORT A megadott családban lévő címek nem használhatók ezzel a szoftvercsatornával.

  • WSAECONNREFUSED A csatlakozási kísérletet határozottan elutasították.

  • WSAEDESTADDRREQ Célcímre van szükség.

  • WSAEFAULT Az lpSockAddrLen argumentum helytelen.

  • WSAEINVAL A szoftvercsatorna már egy címhez van kötve.

  • WSAEISCONN A szoftvercsatorna már csatlakoztatva van.

  • WSAEMFILE Nincs több fájlleíró.

  • WSAENETUNREACH A hálózat jelenleg nem érhető el erről a gazdagépről.

  • WSAENOBUFS Nincs szabad pufferterület. A szoftvercsatorna nem csatlakoztatható.

  • WSAENOTCONN A szoftvercsatorna nincs csatlakoztatva.

  • WSAENOTSOCK A leíró fájl, nem szoftvercsatorna.

  • WSAETIMEDOUT A kapcsolódási kísérlet időtúllépéssel, kapcsolat létrehozása nélkül történt.

Megjegyzések

Megjegyzés:

Ebben CSocketaz esetben az értesítési OnConnect függvény soha nem lesz meghívva. Kapcsolatok esetén egyszerűen hívja meg a hívást Connect, amely a kapcsolat befejezésekor (sikeres vagy hiba esetén) fog visszatérni. A kapcsolatértesítések kezelése az MFC implementáció részletei.

További információ: Windows-szoftvercsatornák: Szoftvercsatorna-értesítések.

példa

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

A keretrendszer meghívta, hogy értesítse a fogadó szoftvercsatornát arról, hogy a küldő szoftvercsatornán sávon kívüli adatok küldendők.

virtual void OnOutOfBandData(int nErrorCode);

Paraméterek

nErrorCode
A szoftvercsatorna legutóbbi hibája. A tagfüggvényre a OnOutOfBandData következő hibakódok vonatkoznak:

  • 0 A függvény végrehajtása sikeresen megtörtént.

  • WSAENETDOWN A Windows Sockets implementáció azt észlelte, hogy a hálózati alrendszer meghibásodott.

Megjegyzések

A sávon kívüli adatok egy logikailag független csatorna, amely a csatlakoztatott szoftvercsatornák egyes párjaihoz van SOCK_STREAMtársítva. A csatornát általában sürgős adatok küldésére használják.

Az MFC támogatja a sávon kívüli adatokat, de az osztály CAsyncSocket felhasználói nem használják őket. Az ilyen adatok továbbításához egyszerűbben létrehozhat egy második szoftvercsatornát. A sávon kívüli adatokkal kapcsolatos további információkért lásd : Windows Sockets: Socket Notifications.

CAsyncSocket::OnReceive

A keretrendszer meghívta, hogy értesítse ezt a szoftvercsatornát arról, hogy a pufferben vannak olyan adatok, amelyek a Receive tagfüggvény meghívásával kérhetők le.

virtual void OnReceive(int nErrorCode);

Paraméterek

nErrorCode
A szoftvercsatorna legutóbbi hibája. A tagfüggvényre a OnReceive következő hibakódok vonatkoznak:

  • 0 A függvény végrehajtása sikeresen megtörtént.

  • WSAENETDOWN A Windows Sockets implementáció azt észlelte, hogy a hálózati alrendszer meghibásodott.

Megjegyzések

További információ: Windows-szoftvercsatornák: Szoftvercsatorna-értesítések.

példa

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

A keretrendszer meghívta, hogy értesítse a szoftvercsatornát, hogy most már képes adatokat küldeni a Send tagfüggvény meghívásával.

virtual void OnSend(int nErrorCode);

Paraméterek

nErrorCode
A szoftvercsatorna legutóbbi hibája. A tagfüggvényre a OnSend következő hibakódok vonatkoznak:

  • 0 A függvény végrehajtása sikeresen megtörtént.

  • WSAENETDOWN A Windows Sockets implementáció azt észlelte, hogy a hálózati alrendszer meghibásodott.

Megjegyzések

További információ: Windows-szoftvercsatornák: Szoftvercsatorna-értesítések.

példa

// 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 =

Új értéket rendel egy CAsyncSocket objektumhoz.

void operator=(const CAsyncSocket& rSrc);

Paraméterek

rSrc
Hivatkozás egy meglévő CAsyncSocket objektumra.

Megjegyzések

Hívja meg ezt a függvényt, hogy egy meglévő CAsyncSocket objektumot másoljon egy másik CAsyncSocket objektumba.

CAsyncSocket::operator SOCKET

Ezzel az operátorral lekérheti az SOCKET objektum fogópontját CAsyncSocket .

operator SOCKET() const;

Visszaadott érték

Ha sikeres, az objektum fogópontja SOCKET ; NULLellenkező esetben.

Megjegyzések

A leíróval közvetlenül meghívhatja a Windows API-kat.

CAsyncSocket::Receive

Hívja meg ezt a tagfüggvényt, hogy adatokat fogadjon egy szoftvercsatornából.

virtual int Receive(
    void* lpBuf,
    int nBufLen,
    int nFlags = 0);

Paraméterek

lpBuf
A bejövő adatok puffere.

nBufLen
A bájtok lpBuf hossza.

nFlags
Megadja a hívás indításának módját. A függvény szemantikáját a szoftvercsatorna beállításai és a nFlags paraméter határozza meg. Az utóbbi úgy jön létre, hogy az alábbi értékek bármelyikét kombinálja a C++ bitenkénti VAGY operátorral (|):

  • MSG_PEEK A bejövő adatok betekintése. A rendszer az adatokat a pufferbe másolja, de nem távolítja el a bemeneti üzenetsorból.

  • MSG_OOB Sávon kívüli adatok feldolgozása.

Visszaadott érték

Ha nem történik hiba, Receive a fogadott bájtok számát adja vissza. Ha a kapcsolat lezárult, akkor 0 értéket ad vissza. Ellenkező esetben a rendszer visszaad egy értéket SOCKET_ERROR , és egy adott hibakód lekérhető a hívással GetLastError. A tagfüggvényre a következő hibák vonatkoznak:

  • WSANOTINITIALISED Az API használata előtt sikeresnek AfxSocketInit kell lennie.

  • WSAENETDOWN A Windows Sockets implementáció azt észlelte, hogy a hálózati alrendszer meghibásodott.

  • WSAENOTCONN A szoftvercsatorna nincs csatlakoztatva.

  • WSAEINPROGRESS A Windows Sockets blokkolási művelete folyamatban van.

  • WSAENOTSOCK A leíró nem szoftvercsatorna.

  • WSAEOPNOTSUPP MSG_OOB van megadva, de a szoftvercsatorna nem típus SOCK_STREAM.

  • WSAESHUTDOWNA foglalat le lett állítva; a 0 vagy 2 beállítással Receive történő meghívás után ShutDown nem lehet meghívni nHow egy szoftvercsatornát.

  • WSAEWOULDBLOCK A szoftvercsatorna blokkolásmentesként van megjelölve, és a Receive művelet blokkolni fog.

  • WSAEMSGSIZE A datagram túl nagy volt ahhoz, hogy elférjen a megadott pufferben, és csonkolt volt.

  • WSAEINVAL A szoftvercsatorna nincs összekötve a következővel Bind: .

  • WSAECONNABORTED A virtuális kapcsolatcsoport időtúllépés vagy egyéb hiba miatt megszakadt.

  • WSAECONNRESET A virtuális kapcsolatcsoportot a távoli oldal állította alaphelyzetbe.

Megjegyzések

Ez a függvény csatlakoztatott stream- vagy datagram-szoftvercsatornákhoz használható, és a bejövő adatok olvasására szolgál.

A típushoz tartozó SOCK_STREAMszoftvercsatornák esetében a rendszer a megadott puffer méretétől függően a jelenleg elérhető mennyiségű információt adja vissza. Ha a szoftvercsatorna konfigurálva lett a sávon kívüli adatok soros fogadásához (szoftvercsatorna-beállítás SO_OOBINLINE) és a sávon kívüli adatok olvasatlanok, a rendszer csak sávon kívüli adatokat ad vissza. Az alkalmazás használhatja ezt a IOCtlSIOCATMARK lehetőséget, vagy OnOutOfBandData meghatározhatja, hogy a sávon kívüli adatok továbbra is olvashatók-e.

Datagram-szoftvercsatornák esetében a rendszer az adatokat az első lekért datagramból nyeri ki, a megadott puffer méretétől kezdve. Ha a datagram nagyobb, mint a megadott puffer, a puffer a datagram első részével van kitöltve, a felesleges adatok elvesznek, és Receive a hibakód értékét a következő értékre SOCKET_ERRORállítja WSAEMSGSIZE vissza: . Ha nem érhetők el bejövő adatok a szoftvercsatornában, a rendszer visszaad egy értéket SOCKET_ERROR a hibakód beállításával WSAEWOULDBLOCK. A OnReceive visszahívási függvény segítségével meghatározhatja, hogy mikor érkeznek meg további adatok.

Ha a szoftvercsatorna típusa SOCK_STREAM , és a távoli oldal kecsesen leállította a kapcsolatot, Receive a rendszer azonnal befejezi a 0 bájtos fogadást. Ha a kapcsolat alaphelyzetbe lett állítva, Receive a hiba WSAECONNRESETsikertelen lesz.

Receive minden alkalommal CAsyncSocket::OnReceive csak egyszer kell meghívni.

példa

Lásd a példát a CAsyncSocket::OnReceive.

CAsyncSocket::ReceiveFrom

Hívja meg ezt a tagfüggvényt, hogy megkapja a datagramot, és tárolja a forráscímet a struktúrában vagy a SOCKADDR rendszerben 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);

Paraméterek

lpBuf
A bejövő adatok puffere.

nBufLen
A bájtok lpBuf hossza.

rSocketAddress
Hivatkozás pontozott CString számú IP-címet kapó objektumra.

rSocketPort
Hivatkozás egy UINT portot tároló fájlra.

lpSockAddr
Egy olyan struktúrára mutató SOCKADDR mutató, amely a forráscímet a visszatéréskor tárolja.

lpSockAddrLen
Mutató a forráscím bájtban megadott lpSockAddr hosszára.

nFlags
Megadja a hívás indításának módját. A függvény szemantikáját a szoftvercsatorna beállításai és a nFlags paraméter határozza meg. Az utóbbi úgy jön létre, hogy az alábbi értékek bármelyikét kombinálja a C++ bitenkénti VAGY operátorral (|):

  • MSG_PEEK A bejövő adatok betekintése. A rendszer az adatokat a pufferbe másolja, de nem távolítja el a bemeneti üzenetsorból.

  • MSG_OOB Sávon kívüli adatok feldolgozása.

Visszaadott érték

Ha nem történik hiba, ReceiveFrom a fogadott bájtok számát adja vissza. Ha a kapcsolat lezárult, akkor 0 értéket ad vissza. Ellenkező esetben a rendszer visszaad egy értéket SOCKET_ERROR , és egy adott hibakód lekérhető a hívással GetLastError. A tagfüggvényre a következő hibák vonatkoznak:

  • WSANOTINITIALISED Az API használata előtt sikeresnek AfxSocketInit kell lennie.

  • WSAENETDOWN A Windows Sockets implementáció azt észlelte, hogy a hálózati alrendszer meghibásodott.

  • WSAEFAULT Az lpSockAddrLen argumentum érvénytelen volt: a lpSockAddr puffer túl kicsi volt a társcím elhelyezéséhez.

  • WSAEINPROGRESS A Windows Sockets blokkolási művelete folyamatban van.

  • WSAEINVAL A szoftvercsatorna nincs összekötve a következővel Bind: .

  • WSAENOTCONN A szoftvercsatorna nincs csatlakoztatva (SOCK_STREAM csak).

  • WSAENOTSOCK A leíró nem szoftvercsatorna.

  • WSAEOPNOTSUPP MSG_OOB van megadva, de a szoftvercsatorna nem típus SOCK_STREAM.

  • WSAESHUTDOWNA foglalat le lett állítva; a 0 vagy 2 beállítással ReceiveFrom történő meghívás után ShutDown nem lehet meghívni nHow egy szoftvercsatornát.

  • WSAEWOULDBLOCK A szoftvercsatorna blokkolásmentesként van megjelölve, és a ReceiveFrom művelet blokkolni fog.

  • WSAEMSGSIZE A datagram túl nagy volt ahhoz, hogy elférjen a megadott pufferben, és csonkolt volt.

  • WSAECONNABORTED A virtuális kapcsolatcsoport időtúllépés vagy egyéb hiba miatt megszakadt.

  • WSAECONNRESET A virtuális kapcsolatcsoportot a távoli oldal állította alaphelyzetbe.

Megjegyzések

Ez a függvény beolvassa a bejövő adatokat egy (esetleg csatlakoztatott) szoftvercsatornán, és rögzíti az adatokat küldő címet.

Az IPv6-címek kezeléséhez használja a következőt CAsyncSocket::ReceiveFromEx: .

A típushoz tartozó SOCK_STREAMszoftvercsatornák esetében a rendszer a megadott puffer méretétől függően a jelenleg elérhető mennyiségű információt adja vissza. Ha a szoftvercsatorna konfigurálva lett a sávon kívüli adatok soros fogadásához (szoftvercsatorna-beállítás SO_OOBINLINE) és a sávon kívüli adatok olvasatlanok, a rendszer csak sávon kívüli adatokat ad vissza. Az alkalmazás használhatja ezt a IOCtlSIOCATMARK lehetőséget, vagy OnOutOfBandData meghatározhatja, hogy a sávon kívüli adatok továbbra is olvashatók-e. A lpSockAddr szoftvercsatornák esetében a rendszer figyelmen kívül hagyja a paramétereket és lpSockAddrLen a SOCK_STREAM paramétereket.

Datagram-szoftvercsatornák esetében a rendszer az adatokat az első lekért datagramból nyeri ki, a megadott puffer méretétől kezdve. Ha a datagram nagyobb, mint a megadott puffer, a puffer az üzenet első részével van kitöltve, a felesleges adatok elvesznek, és ReceiveFrom a hibakód SOCKET_ERRORértékének WSAEMSGSIZE értékét adja vissza.

Ha lpSockAddr nem, és a szoftvercsatornának típusa SOCK_DGRAMvan, a rendszer az adatokat küldő szoftvercsatorna hálózati címét a megfelelő SOCKADDR struktúrába másolja. A hivatkozott lpSockAddrLen érték inicializálva van ennek a struktúrának a méretére, és visszatéréskor módosul, hogy jelezze az ott tárolt cím tényleges méretét. Ha nem érhetők el bejövő adatok a szoftvercsatornában, a ReceiveFrom hívás megvárja az adatok megérkezését, kivéve, ha a szoftvercsatornát nem tiltja le. Ebben az esetben a rendszer egy értéket SOCKET_ERROR ad vissza a hibakód beállításával WSAEWOULDBLOCK. A OnReceive visszahívással meghatározhatja, hogy mikor érkezik több adat.

Ha a szoftvercsatorna típusa SOCK_STREAM , és a távoli oldal kecsesen leállította a kapcsolatot, ReceiveFrom a rendszer azonnal befejezi a 0 bájtos fogadást.

CAsyncSocket::ReceiveFromEx

Hívja meg ezt a tagfüggvényt, hogy fogadjon egy datagramot, és tárolja a forráscímet a SOCKADDR struktúrában vagy a rSocketAddress rendszerben (IPv6-címeket kezel).

int ReceiveFromEx(
    void* lpBuf,
    int nBufLen,
    CString& rSocketAddress,
    UINT& rSocketPort,
    int nFlags = 0);

Paraméterek

lpBuf
A bejövő adatok puffere.

nBufLen
A bájtok lpBuf hossza.

rSocketAddress
Hivatkozás pontozott CString számú IP-címet kapó objektumra.

rSocketPort
Hivatkozás egy UINT portot tároló fájlra.

nFlags
Megadja a hívás indításának módját. A függvény szemantikáját a szoftvercsatorna beállításai és a nFlags paraméter határozza meg. Az utóbbi úgy jön létre, hogy az alábbi értékek bármelyikét kombinálja a C++ bitenkénti VAGY operátorral (|):

  • MSG_PEEK A bejövő adatok betekintése. A rendszer az adatokat a pufferbe másolja, de nem távolítja el a bemeneti üzenetsorból.

  • MSG_OOB Sávon kívüli adatok feldolgozása.

Visszaadott érték

Ha nem történik hiba, ReceiveFromEx a fogadott bájtok számát adja vissza. Ha a kapcsolat lezárult, akkor 0 értéket ad vissza. Ellenkező esetben a rendszer visszaad egy értéket SOCKET_ERROR , és egy adott hibakód lekérhető a hívással GetLastError. A tagfüggvényre a következő hibák vonatkoznak:

  • WSANOTINITIALISED Az API használata előtt sikeresnek AfxSocketInit kell lennie.

  • WSAENETDOWN A Windows Sockets implementáció azt észlelte, hogy a hálózati alrendszer meghibásodott.

  • WSAEFAULT Az lpSockAddrLen argumentum érvénytelen volt: a lpSockAddr puffer túl kicsi volt a társcím elhelyezéséhez.

  • WSAEINPROGRESS A Windows Sockets blokkolási művelete folyamatban van.

  • WSAEINVAL A szoftvercsatorna nincs összekötve a következővel Bind: .

  • WSAENOTCONN A szoftvercsatorna nincs csatlakoztatva (SOCK_STREAM csak).

  • WSAENOTSOCK A leíró nem szoftvercsatorna.

  • WSAEOPNOTSUPP MSG_OOB van megadva, de a szoftvercsatorna nem típus SOCK_STREAM.

  • WSAESHUTDOWNA foglalat le lett állítva; a 0 vagy 2 beállítással ReceiveFromEx történő meghívás után ShutDown nem lehet meghívni nHow egy szoftvercsatornát.

  • WSAEWOULDBLOCK A szoftvercsatorna blokkolásmentesként van megjelölve, és a ReceiveFromEx művelet blokkolni fog.

  • WSAEMSGSIZE A datagram túl nagy volt ahhoz, hogy elférjen a megadott pufferben, és csonkolt volt.

  • WSAECONNABORTED A virtuális kapcsolatcsoport időtúllépés vagy egyéb hiba miatt megszakadt.

  • WSAECONNRESET A virtuális kapcsolatcsoportot a távoli oldal állította alaphelyzetbe.

Megjegyzések

Ez a függvény beolvassa a bejövő adatokat egy (esetleg csatlakoztatott) szoftvercsatornán, és rögzíti az adatokat küldő címet.

Ez a függvény megegyezik azzal a kivétellel CAsyncSocket::ReceiveFrom , hogy az IPv6-címeket és a régebbi protokollokat kezeli.

A típushoz tartozó SOCK_STREAMszoftvercsatornák esetében a rendszer a megadott puffer méretétől függően a jelenleg elérhető mennyiségű információt adja vissza. Ha a szoftvercsatorna konfigurálva lett a sávon kívüli adatok soros fogadásához (szoftvercsatorna-beállítás SO_OOBINLINE) és a sávon kívüli adatok olvasatlanok, a rendszer csak sávon kívüli adatokat ad vissza. Az alkalmazás használhatja ezt a IOCtlSIOCATMARK lehetőséget, vagy OnOutOfBandData meghatározhatja, hogy a sávon kívüli adatok továbbra is olvashatók-e. A lpSockAddr szoftvercsatornák esetében a rendszer figyelmen kívül hagyja a paramétereket és lpSockAddrLen a SOCK_STREAM paramétereket.

Datagram-szoftvercsatornák esetében a rendszer az adatokat az első lekért datagramból nyeri ki, a megadott puffer méretétől kezdve. Ha a datagram nagyobb, mint a megadott puffer, a puffer az üzenet első részével van kitöltve, a felesleges adatok elvesznek, és ReceiveFromEx a hibakód SOCKET_ERRORértékének WSAEMSGSIZE értékét adja vissza.

Ha lpSockAddr nem, és a szoftvercsatornának típusa SOCK_DGRAMvan, a rendszer az adatokat küldő szoftvercsatorna hálózati címét a megfelelő SOCKADDR struktúrába másolja. A hivatkozott lpSockAddrLen érték inicializálva van ennek a struktúrának a méretére, és visszatéréskor módosul, hogy jelezze az ott tárolt cím tényleges méretét. Ha nem érhetők el bejövő adatok a szoftvercsatornában, a ReceiveFromEx hívás megvárja az adatok megérkezését, kivéve, ha a szoftvercsatornát nem tiltja le. Ebben az esetben a rendszer egy értéket SOCKET_ERROR ad vissza a hibakód beállításával WSAEWOULDBLOCK. A OnReceive visszahívással meghatározhatja, hogy mikor érkezik több adat.

Ha a szoftvercsatorna típusa SOCK_STREAM , és a távoli oldal kecsesen leállította a kapcsolatot, ReceiveFromEx a rendszer azonnal befejezi a 0 bájtos fogadást.

CAsyncSocket::Send

Hívja meg ezt a tagfüggvényt, hogy adatokat küldjön egy csatlakoztatott szoftvercsatornán.

virtual int Send(
    const void* lpBuf,
    int nBufLen,
    int nFlags = 0);

Paraméterek

lpBuf
A továbbítandó adatokat tartalmazó puffer.

nBufLen
Az adatok hossza bájtban lpBuf .

nFlags
Megadja a hívás indításának módját. A függvény szemantikáját a szoftvercsatorna beállításai és a nFlags paraméter határozza meg. Az utóbbi úgy jön létre, hogy az alábbi értékek bármelyikét kombinálja a C++ bitenkénti VAGY operátorral (|):

  • MSG_DONTROUTE Azt határozza meg, hogy az adatok ne legyenek útválasztási függőben. A Windows Sockets-szállítók dönthetnek úgy, hogy figyelmen kívül hagyják ezt a jelzőt.

  • MSG_OOB Sávon kívüli adatok küldése (SOCK_STREAM csak).

Visszaadott érték

Ha nem történik hiba, Send az elküldött karakterek teljes számát adja vissza. (Vegye figyelembe, hogy ez kisebb lehet, mint a nBufLen.) Ellenkező esetben a rendszer visszaad egy értéket SOCKET_ERROR , és egy adott hibakód lekérhető a hívással GetLastError. A tagfüggvényre a következő hibák vonatkoznak:

  • WSANOTINITIALISED Az API használata előtt sikeresnek AfxSocketInit kell lennie.

  • WSAENETDOWN A Windows Sockets implementáció azt észlelte, hogy a hálózati alrendszer meghibásodott.

  • WSAEACCES A kért cím egy szórási cím, de a megfelelő jelző nincs beállítva.

  • WSAEINPROGRESS A Windows Sockets blokkolási művelete folyamatban van.

  • WSAEFAULT Az lpBuf argumentum nem a felhasználói címtér érvényes részén található.

  • WSAENETRESET A kapcsolatot alaphelyzetbe kell állítani, mert a Windows Sockets implementáció elvetette.

  • WSAENOBUFS A Windows Sockets implementáció egy puffer holtpontot jelent.

  • WSAENOTCONN A szoftvercsatorna nincs csatlakoztatva.

  • WSAENOTSOCK A leíró nem szoftvercsatorna.

  • WSAEOPNOTSUPP MSG_OOB van megadva, de a szoftvercsatorna nem típus SOCK_STREAM.

  • WSAESHUTDOWNA foglalat le lett állítva; az 1 vagy 2 beállítással Send történő meghívás után ShutDown nem lehet meghívni nHow egy szoftvercsatornát.

  • WSAEWOULDBLOCK A szoftvercsatorna blokkolásmentesként van megjelölve, és a kért művelet blokkolva lesz.

  • WSAEMSGSIZE A szoftvercsatorna típusa SOCK_DGRAM, és a datagram nagyobb, mint a Windows Sockets implementáció által támogatott maximális érték.

  • WSAEINVAL A szoftvercsatorna nincs összekötve a következővel Bind: .

  • WSAECONNABORTED A virtuális kapcsolatcsoport időtúllépés vagy egyéb hiba miatt megszakadt.

  • WSAECONNRESET A virtuális kapcsolatcsoportot a távoli oldal állította alaphelyzetbe.

Megjegyzések

Send kimenő adatok írására szolgál a csatlakoztatott streameken vagy datagram-szoftvercsatornákon. Datagram-szoftvercsatornák esetén ügyelni kell arra, hogy ne lépje túl az alapul szolgáló alhálózatok IP-csomagméretét, amelyet a iMaxUdpDgWSADATA szerkezet által visszaadott elem ad meg AfxSocketInit. Ha az adatok túl hosszúak ahhoz, hogy atomilag áthaladjanak a mögöttes protokollon, a rendszer a hibát WSAEMSGSIZE ad GetLastErrorvissza, és nem továbbít adatokat.

Vegye figyelembe, hogy a datagram-szoftvercsatornák sikeres befejezése Send nem jelzi az adatok sikeres kézbesítését.

Típusobjektumok CAsyncSocketesetén SOCK_STREAM az írott bájtok száma 1 és a kért hossz között lehet, attól függően, hogy a puffer rendelkezésre áll-e a helyi és a külföldi gazdagépeken.

példa

Lásd a példát a CAsyncSocket::OnSend.

CAsyncSocket::SendTo

Hívja meg ezt a tagfüggvényt, hogy adatokat küldjön egy adott célhelyre.

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);

Paraméterek

lpBuf
A továbbítandó adatokat tartalmazó puffer.

nBufLen
Az adatok hossza bájtban lpBuf .

nHostPort
A szoftvercsatorna-alkalmazást azonosító port.

lpszHostAddress
Annak a szoftvercsatornának a hálózati címe, amelyhez az objektum csatlakozik: egy gép neve, például "ftp.microsoft.com", vagy pontozott szám, például "128.56.22.8".

nFlags
Megadja a hívás indításának módját. A függvény szemantikáját a szoftvercsatorna beállításai és a nFlags paraméter határozza meg. Az utóbbi úgy jön létre, hogy az alábbi értékek bármelyikét kombinálja a C++ bitenkénti VAGY operátorral (|):

  • MSG_DONTROUTE Azt határozza meg, hogy az adatok ne legyenek útválasztási függőben. A Windows Sockets-szállítók dönthetnek úgy, hogy figyelmen kívül hagyják ezt a jelzőt.

  • MSG_OOB Sávon kívüli adatok küldése (SOCK_STREAM csak).

lpSockAddr
A célcsatorna címét tartalmazó struktúra mutatója SOCKADDR .

nSockAddrLen
A cím hossza bájtban lpSockAddr .

Visszaadott érték

Ha nem történik hiba, SendTo az elküldött karakterek teljes számát adja vissza. (Vegye figyelembe, hogy ez kisebb lehet, mint a nBufLen.) Ellenkező esetben a rendszer visszaad egy értéket SOCKET_ERROR , és egy adott hibakód lekérhető a hívással GetLastError. A tagfüggvényre a következő hibák vonatkoznak:

  • WSANOTINITIALISED Az API használata előtt sikeresnek AfxSocketInit kell lennie.

  • WSAENETDOWN A Windows Sockets implementáció azt észlelte, hogy a hálózati alrendszer meghibásodott.

  • WSAEACCES A kért cím egy szórási cím, de a megfelelő jelző nincs beállítva.

  • WSAEINPROGRESS A Windows Sockets blokkolási művelete folyamatban van.

  • WSAEFAULT A lpBuf vagy lpSockAddr paraméterek nem részei a felhasználói címtérnek, vagy az lpSockAddr argumentum túl kicsi (kisebb, mint egy SOCKADDR struktúra mérete).

  • WSAEINVAL A gazdagép neve érvénytelen.

  • WSAENETRESET A kapcsolatot alaphelyzetbe kell állítani, mert a Windows Sockets implementáció elvetette.

  • WSAENOBUFS A Windows Sockets implementáció egy puffer holtpontot jelent.

  • WSAENOTCONN A szoftvercsatorna nincs csatlakoztatva (SOCK_STREAM csak).

  • WSAENOTSOCK A leíró nem szoftvercsatorna.

  • WSAEOPNOTSUPP MSG_OOB van megadva, de a szoftvercsatorna nem típus SOCK_STREAM.

  • WSAESHUTDOWNA foglalat le lett állítva; az 1 vagy 2 beállítással SendTo történő meghívás után ShutDown nem lehet meghívni nHow egy szoftvercsatornát.

  • WSAEWOULDBLOCK A szoftvercsatorna blokkolásmentesként van megjelölve, és a kért művelet blokkolva lesz.

  • WSAEMSGSIZE A szoftvercsatorna típusa SOCK_DGRAM, és a datagram nagyobb, mint a Windows Sockets implementáció által támogatott maximális érték.

  • WSAECONNABORTED A virtuális kapcsolatcsoport időtúllépés vagy egyéb hiba miatt megszakadt.

  • WSAECONNRESET A virtuális kapcsolatcsoportot a távoli oldal állította alaphelyzetbe.

  • WSAEADDRNOTAVAIL A megadott cím nem érhető el a helyi gépről.

  • WSAEAFNOSUPPORT A megadott családban lévő címek nem használhatók ezzel a szoftvercsatornával.

  • WSAEDESTADDRREQ Célcímre van szükség.

  • WSAENETUNREACH A hálózat jelenleg nem érhető el erről a gazdagépről.

Megjegyzések

SendTo datagram- vagy stream-szoftvercsatornákon használható, és kimenő adatok szoftvercsatornákra való írására szolgál. Datagram-szoftvercsatornák esetében ügyelni kell arra, hogy ne lépje túl az alapul szolgáló alhálózatok MAXIMÁLIS IP-csomagméretét, amelyet a iMaxUdpDgWSADATA struktúrában szereplő elem ad meg AfxSocketInit. Ha az adatok túl hosszúak ahhoz, hogy atomilag áthaladjanak a mögöttes protokollon, a WSAEMSGSIZE hiba lesz visszaadva, és a rendszer nem továbbít adatokat.

Vegye figyelembe, hogy a sikeres kitöltés SendTo nem jelzi az adatok sikeres kézbesítését.

SendTo a rendszer csak egy SOCK_DGRAM szoftvercsatornán használja, hogy datagramot küldjön a paraméter által azonosított adott szoftvercsatornának lpSockAddr .

Szórás küldéséhez (csak egy példányon SOCK_DGRAM ) a lpSockAddr paraméter címét a speciális IP-címmel INADDR_BROADCAST (a Windows Sockets fejlécfájljában WINSOCK.Hdefiniálva) kell létrehozni a kívánt portszámmal együtt. Vagy ha a lpszHostAddress paraméter az NULL, akkor a szoftvercsatorna konfigurálva van a közvetítéshez. A szórásos adatgramok általában nem lépik túl a töredezettség méretét, ami azt jelenti, hogy a datagram adatrésze (a fejlécek kivételével) nem haladhatja meg az 512 bájtot.

Az IPv6-címek kezeléséhez használja a következőt CAsyncSocket::SendToEx: .

CAsyncSocket::SendToEx

Hívja meg ezt a tagfüggvényt, hogy adatokat küldjön egy adott célhelyre (IPv6-címeket kezel).

int SendToEx(
    const void* lpBuf,
    int nBufLen,
    UINT nHostPort,
    LPCTSTR lpszHostAddress = NULL,
    int nFlags = 0);

Paraméterek

lpBuf
A továbbítandó adatokat tartalmazó puffer.

nBufLen
Az adatok hossza bájtban lpBuf .

nHostPort
A szoftvercsatorna-alkalmazást azonosító port.

lpszHostAddress
Annak a szoftvercsatornának a hálózati címe, amelyhez az objektum csatlakozik: egy gép neve, például "ftp.microsoft.com", vagy pontozott szám, például "128.56.22.8".

nFlags
Megadja a hívás indításának módját. A függvény szemantikáját a szoftvercsatorna beállításai és a nFlags paraméter határozza meg. Az utóbbi úgy jön létre, hogy az alábbi értékek bármelyikét kombinálja a C++ bitenkénti VAGY operátorral (|):

  • MSG_DONTROUTE Azt határozza meg, hogy az adatok ne legyenek útválasztási függőben. A Windows Sockets-szállítók dönthetnek úgy, hogy figyelmen kívül hagyják ezt a jelzőt.

  • MSG_OOB Sávon kívüli adatok küldése (SOCK_STREAM csak).

Visszaadott érték

Ha nem történik hiba, SendToEx az elküldött karakterek teljes számát adja vissza. (Vegye figyelembe, hogy ez kisebb lehet, mint a nBufLen.) Ellenkező esetben a rendszer visszaad egy értéket SOCKET_ERROR , és egy adott hibakód lekérhető a hívással GetLastError. A tagfüggvényre a következő hibák vonatkoznak:

  • WSANOTINITIALISED Az API használata előtt sikeresnek AfxSocketInit kell lennie.

  • WSAENETDOWN A Windows Sockets implementáció azt észlelte, hogy a hálózati alrendszer meghibásodott.

  • WSAEACCES A kért cím egy szórási cím, de a megfelelő jelző nincs beállítva.

  • WSAEINPROGRESS A Windows Sockets blokkolási művelete folyamatban van.

  • WSAEFAULT A lpBuf vagy lpSockAddr paraméterek nem részei a felhasználói címtérnek, vagy az lpSockAddr argumentum túl kicsi (kisebb, mint egy SOCKADDR struktúra mérete).

  • WSAEINVAL A gazdagép neve érvénytelen.

  • WSAENETRESET A kapcsolatot alaphelyzetbe kell állítani, mert a Windows Sockets implementáció elvetette.

  • WSAENOBUFS A Windows Sockets implementáció egy puffer holtpontot jelent.

  • WSAENOTCONN A szoftvercsatorna nincs csatlakoztatva (SOCK_STREAM csak).

  • WSAENOTSOCK A leíró nem szoftvercsatorna.

  • WSAEOPNOTSUPP MSG_OOB van megadva, de a szoftvercsatorna nem típus SOCK_STREAM.

  • WSAESHUTDOWNA foglalat le lett állítva; az 1 vagy 2 beállítással SendToEx történő meghívás után ShutDown nem lehet meghívni nHow egy szoftvercsatornát.

  • WSAEWOULDBLOCK A szoftvercsatorna blokkolásmentesként van megjelölve, és a kért művelet blokkolva lesz.

  • WSAEMSGSIZE A szoftvercsatorna típusa SOCK_DGRAM, és a datagram nagyobb, mint a Windows Sockets implementáció által támogatott maximális érték.

  • WSAECONNABORTED A virtuális kapcsolatcsoport időtúllépés vagy egyéb hiba miatt megszakadt.

  • WSAECONNRESET A virtuális kapcsolatcsoportot a távoli oldal állította alaphelyzetbe.

  • WSAEADDRNOTAVAIL A megadott cím nem érhető el a helyi gépről.

  • WSAEAFNOSUPPORT A megadott családban lévő címek nem használhatók ezzel a szoftvercsatornával.

  • WSAEDESTADDRREQ Célcímre van szükség.

  • WSAENETUNREACH A hálózat jelenleg nem érhető el erről a gazdagépről.

Megjegyzések

Ez a módszer megegyezik azzal a kivétellel CAsyncSocket::SendTo , hogy az IPv6-címeket és a régebbi protokollokat kezeli.

SendToEx datagram- vagy stream-szoftvercsatornákon használható, és kimenő adatok szoftvercsatornákra való írására szolgál. Datagram-szoftvercsatornák esetében ügyelni kell arra, hogy ne lépje túl az alapul szolgáló alhálózatok MAXIMÁLIS IP-csomagméretét, amelyet a iMaxUdpDgWSADATA struktúrában szereplő elem ad meg AfxSocketInit. Ha az adatok túl hosszúak ahhoz, hogy atomilag áthaladjanak a mögöttes protokollon, a rendszer visszaadja a hibát WSAEMSGSIZE , és nem továbbít adatokat.

Vegye figyelembe, hogy a sikeres kitöltés SendToEx nem jelzi az adatok sikeres kézbesítését.

SendToEx a rendszer csak egy SOCK_DGRAM szoftvercsatornán használja, hogy datagramot küldjön a paraméter által azonosított adott szoftvercsatornának lpSockAddr .

Szórás küldéséhez (csak egy példányon SOCK_DGRAM ) a lpSockAddr paraméter címét a speciális IP-címmel INADDR_BROADCAST (a Windows Sockets fejlécfájljában WINSOCK.Hdefiniálva) kell létrehozni a kívánt portszámmal együtt. Vagy ha a lpszHostAddress paraméter az NULL, akkor a szoftvercsatorna konfigurálva van a közvetítéshez. A szórásos adatgramok általában nem lépik túl a töredezettség méretét, ami azt jelenti, hogy a datagram adatrésze (a fejlécek kivételével) nem haladhatja meg az 512 bájtot.

CAsyncSocket::SetSockOpt

Hívja meg ezt a tagfüggvényt a szoftvercsatorna-beállítás beállításához.

BOOL SetSockOpt(
    int nOptionName,
    const void* lpOptionValue,
    int nOptionLen,
    int nLevel = SOL_SOCKET);

Paraméterek

nOptionName
Az a szoftvercsatorna-beállítás, amelyhez az értéket be kell állítani.

lpOptionValue
Mutató arra a pufferre, amelyben a kért beállítás értéke meg van adva.

nOptionLen
A puffer mérete lpOptionValue bájtban.

nLevel
Az a szint, amelyen a beállítás definiálva van; az egyetlen támogatott szint az SOL_SOCKET and IPPROTO_TCP.

Visszaadott érték

Nonzero, ha a függvény sikeres; ellenkező esetben 0, és egy adott hibakód lekérhető a hívással GetLastError. A tagfüggvényre a következő hibák vonatkoznak:

  • WSANOTINITIALISED Az API használata előtt sikeresnek AfxSocketInit kell lennie.

  • WSAENETDOWN A Windows Sockets implementáció azt észlelte, hogy a hálózati alrendszer meghibásodott.

  • WSAEFAULT lpOptionValue nem szerepel a folyamat címterének egy érvényes részében.

  • WSAEINPROGRESS A Windows Sockets blokkolási művelete folyamatban van.

  • WSAEINVAL nLevel érvénytelen, vagy a benne lévő lpOptionValue adatok érvénytelenek.

  • WSAENETRESET A kapcsolat túllépte az időkorlátot, amikor SO_KEEPALIVE be van állítva.

  • WSAENOPROTOOPT A beállítás ismeretlen vagy nem támogatott. Különösen SO_BROADCAST nem támogatott a szoftvercsatornákon SOCK_STREAM, míg SO_DONTLINGERa SO_KEEPALIVE, SO_LINGERés SO_OOBINLINE nem támogatottak a típusú SOCK_DGRAMszoftvercsatornákon .

  • WSAENOTCONN A kapcsolat alaphelyzetbe lett állítva, amikor SO_KEEPALIVE be van állítva.

  • WSAENOTSOCK A leíró nem szoftvercsatorna.

Megjegyzések

SetSockOpt Bármely típusú szoftvercsatorna-beállítás aktuális értékét állítja be bármilyen állapotban. Bár a beállítások több protokollszinten is létezhetnek, ez a specifikáció csak a legfelső "szoftvercsatorna" szinten létező beállításokat határozza meg. A lehetőségek hatással vannak a szoftvercsatornák műveleteire, például arra, hogy a rendszer gyorsított adatokat fogad-e a normál adatfolyamban, hogy küldhetők-e közvetítési üzenetek a szoftvercsatornán, és így tovább.

A szoftvercsatorna-beállításoknak két típusa van: logikai beállítások, amelyek lehetővé vagy letiltanak egy funkciót vagy viselkedést, valamint olyan lehetőségek, amelyek egész számot vagy struktúrát igényelnek. Logikai beállítás lpOptionValue engedélyezéséhez egy nem egész számra mutat. A beállítás lpOptionValue letiltása nullával egyenlő egész számra mutat. nOptionLen logikai beállítások esetében egyenlőnek sizeof(BOOL) kell lennie. Egyéb beállítások lpOptionValue esetén a beállítás kívánt értékét tartalmazó egész számra vagy szerkezetre mutat, és nOptionLen az egész szám vagy a struktúra hossza.

SO_LINGER szabályozza azokat a műveletet, amelyek akkor lépnek érvénybe, amikor a nem küldött adatok várólistára kerülnek egy szoftvercsatornán, és a Close függvényt meghívja a szoftvercsatorna bezárásához.

Alapértelmezés szerint a szoftvercsatornát nem lehet olyan helyi címhez kötni (lásd Bind), amely már használatban van. Időnként azonban kívánatos lehet egy cím ilyen módon történő "újrafelhasználása". Mivel minden kapcsolatot egyedileg azonosít a helyi és a távoli címek kombinációja, nincs probléma azzal, hogy két szoftvercsatornát kell ugyanahhoz a helyi címhez kötni, feltéve, hogy a távoli címek eltérőek.

A Windows-szoftvercsatornák implementációjának tájékoztatása érdekében, hogy Bind a szoftvercsatornák hívását nem szabad letiltani, mert a kívánt címet már használja egy másik szoftvercsatorna, az alkalmazásnak a hívás kiadása előtt be kell állítania SO_REUSEADDR a Bind szoftvercsatornához tartozó szoftvercsatorna-beállítást. Vegye figyelembe, hogy a beállítás csak a hívás időpontjában Bind értelmezhető: ezért szükségtelen (de ártalmatlan) beállítani a lehetőséget egy olyan szoftvercsatornán, amely nem lesz meglévő címhez kötve, és a beállítás vagy a beállítás alaphelyzetbe állítása, miután a Bind hívásnak nincs hatása erre vagy bármely más szoftvercsatornára.

Az alkalmazások kérhetik, hogy a Windows Sockets implementációja engedélyezze a "keep-alive" csomagokat a Transmission Control Protocol (TCP) kapcsolatokon a SO_KEEPALIVE szoftvercsatorna beállítás bekapcsolásával. A Windows-szoftvercsatornák implementációjának nem kell támogatnia az életben tartás használatát: ha igen, a pontos szemantikának implementációspecifikusnak kell lennie, de meg kell felelnie az RFC 1122 4.2.3.6 szakaszának: "Követelmények az internetes gazdagépekre – kommunikációs rétegek". Ha egy kapcsolat megszakad az "életben tartás" miatt, a rendszer visszaadja a hibakódot WSAENETRESET a szoftvercsatornán folyamatban lévő hívásoknak, és az azt követő hívások sikertelenek lesznek WSAENOTCONN.

Ez a TCP_NODELAY beállítás letiltja a Nagle algoritmust. A Nagle-algoritmus a gazdagép által küldött kis csomagok számának csökkentésére szolgál a nem ismeretlen küldési adatok pufferelésével, amíg egy teljes méretű csomag el nem küldhető. Egyes alkalmazások esetében azonban ez az algoritmus akadályozhatja a teljesítményt, és TCP_NODELAY kikapcsolható. Az alkalmazásírók csak akkor állíthatók be TCP_NODELAY , ha ennek hatása jól érthető és kívánatos, mivel a beállítás TCP_NODELAY jelentős negatív hatással lehet a hálózati teljesítményre. TCP_NODELAY az egyetlen támogatott szoftvercsatorna-beállítás, amely szintet IPPROTO_TCPhasznál; az összes többi beállítás használja a szintet SOL_SOCKET.

A Windows Sockets egyes implementációi kimeneti hibakeresési információkat biztosítanak, ha a SO_DEBUG beállítást egy alkalmazás állítja be.

A következő beállítások támogatottak.SetSockOpt A Típus a címzett adattípust lpOptionValueazonosítja.

Érték típus Értelmezés
SO_BROADCAST BOOL A szórási üzenetek átvitelének engedélyezése a szoftvercsatornán.
SO_DEBUG BOOL Hibakeresési adatok rögzítése.
SO_DONTLINGER BOOL Ne tiltsa le Close a nem küldött adatok küldésére való várakozást. Ennek a beállításnak a beállítása egyenértékű a nullára beállított beállítással SO_LINGERl_onoff .
SO_DONTROUTE BOOL Ne iránytű: küldje el közvetlenül a felületre.
SO_KEEPALIVE BOOL Életben tartást küldünk.
SO_LINGER struct LINGER Ha nem ad meg adatokat, tovább marad Close .
SO_OOBINLINE BOOL Sávon kívüli adatok fogadása a normál adatfolyamban.
SO_RCVBUF int Adja meg a fogadások pufferméretét.
SO_REUSEADDR BOOL Engedélyezze, hogy a szoftvercsatorna egy már használatban lévő címhez legyen kötve. (Lásd : Kötés.)
SO_SNDBUF int Adja meg a küldés pufferméretét.
TCP_NODELAY BOOL Letiltja a Nagle-algoritmust a szenesítés küldéséhez.

A Berkeley Software Distribution (BSD) nem támogatott beállításai a SetSockOpt következők:

Érték típus Értelmezés
SO_ACCEPTCONN BOOL A szoftvercsatorna figyel
SO_ERROR int Hibaállapot lekérése és törlése.
SO_RCVLOWAT int Alacsony vízjelet kap.
SO_RCVTIMEO int Fogadási időtúllépés
SO_SNDLOWAT int Küldjön alacsony vízjelet.
SO_SNDTIMEO int Időtúllépés küldése.
SO_TYPE int A foglalat típusa.
IP_OPTIONS Beállítások mező beállítása az IP-fejlécben.

CAsyncSocket::ShutDown

Hívja meg ezt a tagfüggvényt a szoftvercsatornán történő küldés, fogadás vagy mindkettő letiltásához.

BOOL ShutDown(int nHow = sends);

Paraméterek

nHow
A következő számbavételi értékeket használó jelölő, amely leírja, hogy milyen típusú műveletek nem lesznek engedélyezve:

  • fogadás = 0

  • küldés = 1

  • mindkettő = 2

Visszaadott érték

Nonzero, ha a függvény sikeres; ellenkező esetben 0, és egy adott hibakód lekérhető a hívással GetLastError. A tagfüggvényre a következő hibák vonatkoznak:

  • WSANOTINITIALISED Az API használata előtt sikeresnek AfxSocketInit kell lennie.

  • WSAENETDOWN A Windows Sockets implementáció azt észlelte, hogy a hálózati alrendszer meghibásodott.

  • WSAEINVAL nHow érvénytelen.

  • WSAEINPROGRESS A Windows Sockets blokkolási művelete folyamatban van.

  • WSAENOTCONN A szoftvercsatorna nincs csatlakoztatva (SOCK_STREAM csak).

  • WSAENOTSOCK A leíró nem szoftvercsatorna.

Megjegyzések

ShutDown a rendszer minden típusú szoftvercsatornán használja a vétel, az átvitel vagy mindkettő letiltására. Ha nHow 0, akkor a szoftvercsatorna későbbi fogadásai nem lesznek engedélyezve. Ez nincs hatással az alsó protokollrétegekre.

Az Átviteli vezérlési protokoll (TCP) esetében a TCP-ablak nem változik, és a bejövő adatok elfogadásra (de nem nyugtázva) lesznek, amíg ki nem merül az ablak. A User Datagram Protocol (UDP) esetében a bejövő datagramok elfogadottak és várólistára kerülnek. Semmilyen esetben sem jön létre ICMP-hibacsomag. Ha nHow 1, a későbbi küldések nem lesznek engedélyezve. TCP-szoftvercsatornák esetén a rendszer FIN-t küld. A 2-hez való beállítás nHow letiltja mind a küldést, mind a fogadást a fent leírtak szerint.

Vegye figyelembe, hogy ShutDown nem zárja be a szoftvercsatornát, és a szoftvercsatornához csatlakoztatott erőforrások csak a meghívásig Close lesznek felszabadítva. Az alkalmazások nem támaszkodhatnak arra, hogy a szoftvercsatornát a leállítása után újra felhasználhatják. Különösen a Windows Sockets implementáció nem szükséges az ilyen szoftvercsatornák használatának támogatásához Connect .

példa

Lásd a példát a CAsyncSocket::OnReceive.

CASyncSocket::Socket

Foglal le egy foglalatfogópontot.

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);

Paraméterek

nSocketType
Megadja vagy SOCK_STREAMSOCK_DGRAM.

lEvent
Egy bitmaszk, amely az alkalmazás számára érdekes hálózati események kombinációját adja meg.

  • FD_READ: Értesítést szeretne kapni az olvasásra való felkészültségről.

  • FD_WRITE: Értesítést szeretne kapni az íráskészségről.

  • FD_OOB: Szeretne értesítést kapni a sávon kívüli adatok érkezéséről.

  • FD_ACCEPT: Értesítést szeretne kapni a bejövő kapcsolatokról.

  • FD_CONNECT: Értesítést szeretne kapni a befejezett kapcsolatról.

  • FD_CLOSE: Értesítést szeretne kapni a szoftvercsatornák bezárásáról.

nProtocolType
A megadott címcsaládra jellemző szoftvercsatornával használandó protokoll.

nAddressFormat
Címcsalád specifikációja.

Visszaadott érték

TRUE FALSE Sikeres, sikertelen eredmény.

Megjegyzések

Ez a metódus foglal le egy foglalatfogópontot. Nem hívja meg CAsyncSocket::Bind , hogy a szoftvercsatornát egy megadott címhez kösse, ezért később kell hívnia Bind , hogy a szoftvercsatornát egy megadott címhez kösse. A CAsyncSocket::SetSockOpt szoftvercsatorna-beállítást a kötés előtt is beállíthatja.

Lásd még

CObject osztály
hierarchiadiagram
CSocket osztály
CSocketFile osztály