Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
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
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:
WSANOTINITIALISEDAz API használata előtt sikeresnekAfxSocketInitkell lennie.WSAENETDOWNA Windows Sockets implementáció azt észlelte, hogy a hálózati alrendszer meghibásodott.WSAEFAULTAzlpSockAddrLenargumentum túl kicsi (kisebb, mint egySOCKADDRstruktúra mérete).WSAEINPROGRESSFolyamatban van egy blokkoló Windows Sockets-hívás.WSAEINVALListennem lett meghívva az elfogadás előtt.WSAEMFILEAz üzenetsor a belépéskor üres, és nincs elérhető leíró.WSAENOBUFSNincs szabad pufferterület.WSAENOTSOCKA leíró nem szoftvercsatorna.WSAEOPNOTSUPPA hivatkozott szoftvercsatorna nem olyan típus, amely támogatja a kapcsolatorientált szolgáltatást.WSAEWOULDBLOCKA 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:
WSANOTINITIALISEDAz API használata előtt sikeresnekAfxSocketInitkell lennie.WSAENETDOWNA Windows Sockets implementáció azt észlelte, hogy a hálózati alrendszer meghibásodott.WSAEINVALAzt jelzi, hogy az egyik megadott paraméter érvénytelen volt.WSAEINPROGRESSA 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.
WSANOTINITIALISEDAz API használata előtt sikeresnekAfxSocketInitkell lennie.WSAENETDOWNA Windows Sockets implementáció azt észlelte, hogy a hálózati alrendszer meghibásodott.WSAEADDRINUSEA megadott cím már használatban van. (Lásd aSO_REUSEADDRszoftvercsatorna beállítását aSetSockOpt.)WSAEFAULTAznSockAddrLenargumentum túl kicsi (kisebb, mint egySOCKADDRstruktúra mérete).WSAEINPROGRESSFolyamatban van egy blokkoló Windows Sockets-hívás.WSAEAFNOSUPPORTA megadott címcsaládot ez a port nem támogatja.WSAEINVALA szoftvercsatorna már egy címhez van kötve.WSAENOBUFSNincs elég puffer, túl sok kapcsolat.WSAENOTSOCKA 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:
WSANOTINITIALISEDAz API használata előtt sikeresnekAfxSocketInitkell lennie.WSAENETDOWNA Windows Sockets implementáció azt észlelte, hogy a hálózati alrendszer meghibásodott.WSAEADDRINUSEA megadott cím már használatban van.WSAEINPROGRESSFolyamatban van egy blokkoló Windows Sockets-hívás.WSAEADDRNOTAVAILA megadott cím nem érhető el a helyi gépről.WSAEAFNOSUPPORTA megadott családban lévő címek nem használhatók ezzel a szoftvercsatornával.WSAECONNREFUSEDA csatlakozási kísérlet elutasításra került.WSAEDESTADDRREQCélcímre van szükség.WSAEFAULTAznSockAddrLenargumentum helytelen.WSAEINVALÉrvénytelen gazdagépcím.WSAEISCONNA szoftvercsatorna már csatlakoztatva van.WSAEMFILENincs több fájlleíró.WSAENETUNREACHA hálózat jelenleg nem érhető el erről a gazdagépről.WSAENOBUFSNincs szabad pufferterület. A szoftvercsatorna nem csatlakoztatható.WSAENOTSOCKA leíró nem szoftvercsatorna.WSAETIMEDOUTKapcsolat létrehozása nélkül próbálja meg időtúllépéssel csatlakozni.WSAEWOULDBLOCKA 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:
WSANOTINITIALISEDAz API használata előtt sikeresnekAfxSocketInitkell lennie.WSAENETDOWNA Windows Sockets implementáció azt észlelte, hogy a hálózati alrendszer meghibásodott.WSAEAFNOSUPPORTA megadott címcsalád nem támogatott.WSAEINPROGRESSA Windows Sockets blokkolási művelete folyamatban van.WSAEMFILENincs több fájlleíró.WSAENOBUFSNincs szabad pufferterület. A szoftvercsatorna nem hozható létre.WSAEPROTONOSUPPORTA megadott port nem támogatott.WSAEPROTOTYPEA megadott port nem megfelelő típus ehhez a szoftvercsatornához.WSAESOCKTNOSUPPORTA 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_STREAMSzekvenciált, megbízható, teljes kétoldalas, kapcsolatalapú bájtstreameket biztosít. A Transmission Control Protocol (TCP) protokollt használja az internetcímcsaládhoz.SOCK_DGRAMTá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
Accepttagfüggvény paraméterként egy új, üresCSocketobjektumra mutató hivatkozást vesz fel. Önnek létre kell hoznia ezt az objektumot, mielőtt hívja aAccept-t. Ne feledje, hogy ha ez a szoftvercsatorna-objektum kiesik a hatókörből, a kapcsolat bezárul. Ne hívja megCreateezt 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:
WSANOTINITIALISEDAz API használata előtt sikeresnekAfxSocketInitkell lennie.WSAENETDOWNA Windows Sockets implementáció azt észlelte, hogy a hálózati alrendszer meghibásodott.WSAEFAULTAzlpSockAddrLenargumentum nem elég nagy.WSAEINPROGRESSFolyamatban van egy blokkoló Windows Sockets-hívás.WSAENOTCONNA szoftvercsatorna nincs csatlakoztatva.WSAENOTSOCKA 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:
WSANOTINITIALISEDAz API használata előtt sikeresnekAfxSocketInitkell lennie.WSAENETDOWNA Windows Sockets implementáció azt észlelte, hogy a hálózati alrendszer meghibásodott.WSAEFAULTAzlpSockAddrLenargumentum nem elég nagy.WSAEINPROGRESSFolyamatban van egy blokkoló Windows Sockets-hívás.WSAENOTCONNA szoftvercsatorna nincs csatlakoztatva.WSAENOTSOCKA 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:
WSANOTINITIALISEDAz API használata előtt sikeresnekAfxSocketInitkell lennie.WSAENETDOWNA Windows Sockets implementáció azt észlelte, hogy a hálózati alrendszer meghibásodott.WSAEFAULTAzlpSockAddrLenargumentum nem elég nagy.WSAEINPROGRESSA Windows Sockets blokkolási művelete folyamatban van.WSAENOTSOCKA leíró nem szoftvercsatorna.WSAEINVALA szoftvercsatornát nem a következő címhezBindkö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:
WSANOTINITIALISEDAz API használata előtt sikeresnekAfxSocketInitkell lennie.WSAENETDOWNA Windows Sockets implementáció azt észlelte, hogy a hálózati alrendszer meghibásodott.WSAEFAULTAzlpSockAddrLenargumentum nem elég nagy.WSAEINPROGRESSA Windows Sockets blokkolási művelete folyamatban van.WSAENOTSOCKA leíró nem szoftvercsatorna.WSAEINVALA szoftvercsatornát nem a következő címhezBindkö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:
WSANOTINITIALISEDAz API használata előtt sikeresnekAfxSocketInitkell lennie.WSAENETDOWNA Windows Sockets implementáció azt észlelte, hogy a hálózati alrendszer meghibásodott.WSAEFAULTAzlpOptionLenargumentum érvénytelen volt.WSAEINPROGRESSA Windows Sockets blokkolási művelete folyamatban van.WSAENOPROTOOPTA beállítás ismeretlen vagy nem támogatott. KülönösenSO_BROADCASTnem támogatott a szoftvercsatornákonSOCK_STREAM, mígSO_ACCEPTCONNa ,SO_DONTLINGER,SO_KEEPALIVESO_LINGER, ésSO_OOBINLINEnem támogatottak a típusúSOCK_DGRAMszoftvercsatornákon .WSAENOTSOCKA 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:
WSANOTINITIALISEDAz API használata előtt sikeresnekAfxSocketInitkell lennie.WSAENETDOWNA Windows Sockets implementáció azt észlelte, hogy a hálózati alrendszer meghibásodott.WSAEINVALlCommandnem érvényes parancs, vagylpArgumentnem elfogadható paraméterlCommand, vagy a parancs nem alkalmazható a megadott szoftvercsatorna típusára.WSAEINPROGRESSA Windows Sockets blokkolási művelete folyamatban van.WSAENOTSOCKA 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:
FIONBIOEngedélyezze vagy tiltsa le a nem blokkoló módot a szoftvercsatornán. AlpArgumentparaméter egyDWORD, amely nem engedélyezett, ha a tiltó mód engedélyezve van, és nulla, ha le szeretné tiltani. HaAsyncSelectegy szoftvercsatornán lett kiadva, akkor a szoftvercsatorna blokkolási módra való visszaállítására tett kísérletekIOCtlsikertelenek lesznekWSAEINVAL. Ha vissza szeretné állítani a szoftvercsatornát blokkolási módra, és meg szeretné akadályozni aWSAEINVALhibát, az alkalmazásnak először le kell tiltaniaAsyncSelectaAsyncSelect0-val egyenlő paraméter meghívásávallEvent, majd a hívássalIOCtl.FIONREADHatározza meg a szoftvercsatornából egyReceivehívással beolvasható bájtok maximális számát. AlpArgumentparaméter egyDWORDolyan pontra mutat, amelybenIOCtlaz eredményt tárolja. Ha ez a szoftvercsatorna típusSOCK_STREAM,FIONREADakkor az egyetlenbenReceiveolvasható 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ípusaSOCK_DGRAM,FIONREADa szoftvercsatornán várólistára helyezett első datagram méretét adja vissza.SIOCATMARKAnnak meghatározása, hogy az összes sávon kívüli adat be van-e olvasva. Ez csak olyan típusúSOCK_STREAMszoftvercsatorná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őReceivevagyReceiveFroma szoftvercsatornán végrehajtott művelet lekéri a "jel" előtti adatok egy részét vagy egészét; az alkalmazásnak aSIOCATMARKmű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 aReceiveReceiveFromsávon kívüli és a normál adatokat soha nem fogja keverni ugyanabban a hívásban.) AlpArgumentparaméter egyDWORDolyan pontra mutat, amelybenIOCtlaz 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:
WSANOTINITIALISEDAz API használata előtt sikeresnekAfxSocketInitkell lennie.WSAENETDOWNA Windows Sockets implementáció azt észlelte, hogy a hálózati alrendszer meghibásodott.WSAEADDRINUSEKísérlet történt egy használt cím figyelésére.WSAEINPROGRESSA Windows Sockets blokkolási művelete folyamatban van.WSAEINVALA szoftvercsatornát nem kötötte összeBind, vagy már csatlakoztatva van.WSAEISCONNA szoftvercsatorna már csatlakoztatva van.WSAEMFILENincs több fájlleíró.WSAENOBUFSNincs szabad pufferterület.WSAENOTSOCKA leíró nem szoftvercsatorna.WSAEOPNOTSUPPA hivatkozott szoftvercsatorna nem olyan típusú, amely támogatja aListenmű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.
WSAENETDOWNA 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.
WSAENETDOWNA Windows Sockets implementáció azt észlelte, hogy a hálózati alrendszer meghibásodott.WSAECONNRESETA kapcsolatot a távoli oldal állította alaphelyzetbe.WSAECONNABORTEDA 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.
WSAEADDRINUSEA megadott cím már használatban van.WSAEADDRNOTAVAILA megadott cím nem érhető el a helyi gépről.WSAEAFNOSUPPORTA megadott családban lévő címek nem használhatók ezzel a szoftvercsatornával.WSAECONNREFUSEDA csatlakozási kísérletet határozottan elutasították.WSAEDESTADDRREQCélcímre van szükség.WSAEFAULTAzlpSockAddrLenargumentum helytelen.WSAEINVALA szoftvercsatorna már egy címhez van kötve.WSAEISCONNA szoftvercsatorna már csatlakoztatva van.WSAEMFILENincs több fájlleíró.WSAENETUNREACHA hálózat jelenleg nem érhető el erről a gazdagépről.WSAENOBUFSNincs szabad pufferterület. A szoftvercsatorna nem csatlakoztatható.WSAENOTCONNA szoftvercsatorna nincs csatlakoztatva.WSAENOTSOCKA leíró fájl, nem szoftvercsatorna.WSAETIMEDOUTA 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.
WSAENETDOWNA 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.
WSAENETDOWNA 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.
WSAENETDOWNA 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_PEEKA bejövő adatok betekintése. A rendszer az adatokat a pufferbe másolja, de nem távolítja el a bemeneti üzenetsorból.MSG_OOBSá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:
WSANOTINITIALISEDAz API használata előtt sikeresnekAfxSocketInitkell lennie.WSAENETDOWNA Windows Sockets implementáció azt észlelte, hogy a hálózati alrendszer meghibásodott.WSAENOTCONNA szoftvercsatorna nincs csatlakoztatva.WSAEINPROGRESSA Windows Sockets blokkolási művelete folyamatban van.WSAENOTSOCKA leíró nem szoftvercsatorna.WSAEOPNOTSUPPMSG_OOBvan megadva, de a szoftvercsatorna nem típusSOCK_STREAM.WSAESHUTDOWNA foglalat le lett állítva; a 0 vagy 2 beállítássalReceivetörténő meghívás utánShutDownnem lehet meghívninHowegy szoftvercsatornát.WSAEWOULDBLOCKA szoftvercsatorna blokkolásmentesként van megjelölve, és aReceiveművelet blokkolni fog.WSAEMSGSIZEA datagram túl nagy volt ahhoz, hogy elférjen a megadott pufferben, és csonkolt volt.WSAEINVALA szoftvercsatorna nincs összekötve a következővelBind: .WSAECONNABORTEDA virtuális kapcsolatcsoport időtúllépés vagy egyéb hiba miatt megszakadt.WSAECONNRESETA 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_PEEKA bejövő adatok betekintése. A rendszer az adatokat a pufferbe másolja, de nem távolítja el a bemeneti üzenetsorból.MSG_OOBSá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:
WSANOTINITIALISEDAz API használata előtt sikeresnekAfxSocketInitkell lennie.WSAENETDOWNA Windows Sockets implementáció azt észlelte, hogy a hálózati alrendszer meghibásodott.WSAEFAULTAzlpSockAddrLenargumentum érvénytelen volt: alpSockAddrpuffer túl kicsi volt a társcím elhelyezéséhez.WSAEINPROGRESSA Windows Sockets blokkolási művelete folyamatban van.WSAEINVALA szoftvercsatorna nincs összekötve a következővelBind: .WSAENOTCONNA szoftvercsatorna nincs csatlakoztatva (SOCK_STREAMcsak).WSAENOTSOCKA leíró nem szoftvercsatorna.WSAEOPNOTSUPPMSG_OOBvan megadva, de a szoftvercsatorna nem típusSOCK_STREAM.WSAESHUTDOWNA foglalat le lett állítva; a 0 vagy 2 beállítássalReceiveFromtörténő meghívás utánShutDownnem lehet meghívninHowegy szoftvercsatornát.WSAEWOULDBLOCKA szoftvercsatorna blokkolásmentesként van megjelölve, és aReceiveFromművelet blokkolni fog.WSAEMSGSIZEA datagram túl nagy volt ahhoz, hogy elférjen a megadott pufferben, és csonkolt volt.WSAECONNABORTEDA virtuális kapcsolatcsoport időtúllépés vagy egyéb hiba miatt megszakadt.WSAECONNRESETA 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_PEEKA bejövő adatok betekintése. A rendszer az adatokat a pufferbe másolja, de nem távolítja el a bemeneti üzenetsorból.MSG_OOBSá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:
WSANOTINITIALISEDAz API használata előtt sikeresnekAfxSocketInitkell lennie.WSAENETDOWNA Windows Sockets implementáció azt észlelte, hogy a hálózati alrendszer meghibásodott.WSAEFAULTAzlpSockAddrLenargumentum érvénytelen volt: alpSockAddrpuffer túl kicsi volt a társcím elhelyezéséhez.WSAEINPROGRESSA Windows Sockets blokkolási művelete folyamatban van.WSAEINVALA szoftvercsatorna nincs összekötve a következővelBind: .WSAENOTCONNA szoftvercsatorna nincs csatlakoztatva (SOCK_STREAMcsak).WSAENOTSOCKA leíró nem szoftvercsatorna.WSAEOPNOTSUPPMSG_OOBvan megadva, de a szoftvercsatorna nem típusSOCK_STREAM.WSAESHUTDOWNA foglalat le lett állítva; a 0 vagy 2 beállítássalReceiveFromExtörténő meghívás utánShutDownnem lehet meghívninHowegy szoftvercsatornát.WSAEWOULDBLOCKA szoftvercsatorna blokkolásmentesként van megjelölve, és aReceiveFromExművelet blokkolni fog.WSAEMSGSIZEA datagram túl nagy volt ahhoz, hogy elférjen a megadott pufferben, és csonkolt volt.WSAECONNABORTEDA virtuális kapcsolatcsoport időtúllépés vagy egyéb hiba miatt megszakadt.WSAECONNRESETA 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_DONTROUTEAzt 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_OOBSávon kívüli adatok küldése (SOCK_STREAMcsak).
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:
WSANOTINITIALISEDAz API használata előtt sikeresnekAfxSocketInitkell lennie.WSAENETDOWNA Windows Sockets implementáció azt észlelte, hogy a hálózati alrendszer meghibásodott.WSAEACCESA kért cím egy szórási cím, de a megfelelő jelző nincs beállítva.WSAEINPROGRESSA Windows Sockets blokkolási művelete folyamatban van.WSAEFAULTAzlpBufargumentum nem a felhasználói címtér érvényes részén található.WSAENETRESETA kapcsolatot alaphelyzetbe kell állítani, mert a Windows Sockets implementáció elvetette.WSAENOBUFSA Windows Sockets implementáció egy puffer holtpontot jelent.WSAENOTCONNA szoftvercsatorna nincs csatlakoztatva.WSAENOTSOCKA leíró nem szoftvercsatorna.WSAEOPNOTSUPPMSG_OOBvan megadva, de a szoftvercsatorna nem típusSOCK_STREAM.WSAESHUTDOWNA foglalat le lett állítva; az 1 vagy 2 beállítássalSendtörténő meghívás utánShutDownnem lehet meghívninHowegy szoftvercsatornát.WSAEWOULDBLOCKA szoftvercsatorna blokkolásmentesként van megjelölve, és a kért művelet blokkolva lesz.WSAEMSGSIZEA szoftvercsatorna típusaSOCK_DGRAM, és a datagram nagyobb, mint a Windows Sockets implementáció által támogatott maximális érték.WSAEINVALA szoftvercsatorna nincs összekötve a következővelBind: .WSAECONNABORTEDA virtuális kapcsolatcsoport időtúllépés vagy egyéb hiba miatt megszakadt.WSAECONNRESETA 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_DONTROUTEAzt 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_OOBSávon kívüli adatok küldése (SOCK_STREAMcsak).
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:
WSANOTINITIALISEDAz API használata előtt sikeresnekAfxSocketInitkell lennie.WSAENETDOWNA Windows Sockets implementáció azt észlelte, hogy a hálózati alrendszer meghibásodott.WSAEACCESA kért cím egy szórási cím, de a megfelelő jelző nincs beállítva.WSAEINPROGRESSA Windows Sockets blokkolási művelete folyamatban van.WSAEFAULTAlpBufvagylpSockAddrparaméterek nem részei a felhasználói címtérnek, vagy azlpSockAddrargumentum túl kicsi (kisebb, mint egySOCKADDRstruktúra mérete).WSAEINVALA gazdagép neve érvénytelen.WSAENETRESETA kapcsolatot alaphelyzetbe kell állítani, mert a Windows Sockets implementáció elvetette.WSAENOBUFSA Windows Sockets implementáció egy puffer holtpontot jelent.WSAENOTCONNA szoftvercsatorna nincs csatlakoztatva (SOCK_STREAMcsak).WSAENOTSOCKA leíró nem szoftvercsatorna.WSAEOPNOTSUPPMSG_OOBvan megadva, de a szoftvercsatorna nem típusSOCK_STREAM.WSAESHUTDOWNA foglalat le lett állítva; az 1 vagy 2 beállítássalSendTotörténő meghívás utánShutDownnem lehet meghívninHowegy szoftvercsatornát.WSAEWOULDBLOCKA szoftvercsatorna blokkolásmentesként van megjelölve, és a kért művelet blokkolva lesz.WSAEMSGSIZEA szoftvercsatorna típusaSOCK_DGRAM, és a datagram nagyobb, mint a Windows Sockets implementáció által támogatott maximális érték.WSAECONNABORTEDA virtuális kapcsolatcsoport időtúllépés vagy egyéb hiba miatt megszakadt.WSAECONNRESETA virtuális kapcsolatcsoportot a távoli oldal állította alaphelyzetbe.WSAEADDRNOTAVAILA megadott cím nem érhető el a helyi gépről.WSAEAFNOSUPPORTA megadott családban lévő címek nem használhatók ezzel a szoftvercsatornával.WSAEDESTADDRREQCélcímre van szükség.WSAENETUNREACHA 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_DONTROUTEAzt 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_OOBSávon kívüli adatok küldése (SOCK_STREAMcsak).
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:
WSANOTINITIALISEDAz API használata előtt sikeresnekAfxSocketInitkell lennie.WSAENETDOWNA Windows Sockets implementáció azt észlelte, hogy a hálózati alrendszer meghibásodott.WSAEACCESA kért cím egy szórási cím, de a megfelelő jelző nincs beállítva.WSAEINPROGRESSA Windows Sockets blokkolási művelete folyamatban van.WSAEFAULTAlpBufvagylpSockAddrparaméterek nem részei a felhasználói címtérnek, vagy azlpSockAddrargumentum túl kicsi (kisebb, mint egySOCKADDRstruktúra mérete).WSAEINVALA gazdagép neve érvénytelen.WSAENETRESETA kapcsolatot alaphelyzetbe kell állítani, mert a Windows Sockets implementáció elvetette.WSAENOBUFSA Windows Sockets implementáció egy puffer holtpontot jelent.WSAENOTCONNA szoftvercsatorna nincs csatlakoztatva (SOCK_STREAMcsak).WSAENOTSOCKA leíró nem szoftvercsatorna.WSAEOPNOTSUPPMSG_OOBvan megadva, de a szoftvercsatorna nem típusSOCK_STREAM.WSAESHUTDOWNA foglalat le lett állítva; az 1 vagy 2 beállítássalSendToExtörténő meghívás utánShutDownnem lehet meghívninHowegy szoftvercsatornát.WSAEWOULDBLOCKA szoftvercsatorna blokkolásmentesként van megjelölve, és a kért művelet blokkolva lesz.WSAEMSGSIZEA szoftvercsatorna típusaSOCK_DGRAM, és a datagram nagyobb, mint a Windows Sockets implementáció által támogatott maximális érték.WSAECONNABORTEDA virtuális kapcsolatcsoport időtúllépés vagy egyéb hiba miatt megszakadt.WSAECONNRESETA virtuális kapcsolatcsoportot a távoli oldal állította alaphelyzetbe.WSAEADDRNOTAVAILA megadott cím nem érhető el a helyi gépről.WSAEAFNOSUPPORTA megadott családban lévő címek nem használhatók ezzel a szoftvercsatornával.WSAEDESTADDRREQCélcímre van szükség.WSAENETUNREACHA 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:
WSANOTINITIALISEDAz API használata előtt sikeresnekAfxSocketInitkell lennie.WSAENETDOWNA Windows Sockets implementáció azt észlelte, hogy a hálózati alrendszer meghibásodott.WSAEFAULTlpOptionValuenem szerepel a folyamat címterének egy érvényes részében.WSAEINPROGRESSA Windows Sockets blokkolási művelete folyamatban van.WSAEINVALnLevelérvénytelen, vagy a benne lévőlpOptionValueadatok érvénytelenek.WSAENETRESETA kapcsolat túllépte az időkorlátot, amikorSO_KEEPALIVEbe van állítva.WSAENOPROTOOPTA beállítás ismeretlen vagy nem támogatott. KülönösenSO_BROADCASTnem támogatott a szoftvercsatornákonSOCK_STREAM, mígSO_DONTLINGERaSO_KEEPALIVE,SO_LINGERésSO_OOBINLINEnem támogatottak a típusúSOCK_DGRAMszoftvercsatornákon .WSAENOTCONNA kapcsolat alaphelyzetbe lett állítva, amikorSO_KEEPALIVEbe van állítva.WSAENOTSOCKA 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:
WSANOTINITIALISEDAz API használata előtt sikeresnekAfxSocketInitkell lennie.WSAENETDOWNA Windows Sockets implementáció azt észlelte, hogy a hálózati alrendszer meghibásodott.WSAEINVALnHowérvénytelen.WSAEINPROGRESSA Windows Sockets blokkolási művelete folyamatban van.WSAENOTCONNA szoftvercsatorna nincs csatlakoztatva (SOCK_STREAMcsak).WSAENOTSOCKA 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