Klasa CAsyncSocketCAsyncSocket Class

Reprezentuje gniazdo systemu Windows — punkt końcowy komunikacji sieciowej.Represents a Windows Socket — an endpoint of network communication.

SkładniaSyntax

class CAsyncSocket : public CObject

Elementy członkowskieMembers

Konstruktory publicznePublic Constructors

NazwaName OpisDescription
CAsyncSocket:: CAsyncSocketCAsyncSocket::CAsyncSocket Konstruuje CAsyncSocket obiekt.Constructs a CAsyncSocket object.

Metody publicznePublic Methods

NazwaName OpisDescription
CAsyncSocket:: AcceptCAsyncSocket::Accept Akceptuje połączenie w gnieździe.Accepts a connection on the socket.
CAsyncSocket:: AsyncSelectCAsyncSocket::AsyncSelect Żąda powiadomienia o zdarzeniu dla gniazda.Requests event notification for the socket.
CAsyncSocket:: AttachCAsyncSocket::Attach Dołącza uchwyt gniazda do CAsyncSocket obiektu.Attaches a socket handle to a CAsyncSocket object.
CAsyncSocket:: bindCAsyncSocket::Bind Kojarzy adres lokalny z gniazdem.Associates a local address with the socket.
CAsyncSocket:: CloseCAsyncSocket::Close Zamyka gniazdo.Closes the socket.
CAsyncSocket:: ConnectCAsyncSocket::Connect Ustanawia połączenie z gniazdem równorzędnym.Establishes a connection to a peer socket.
CAsyncSocket:: CreateCAsyncSocket::Create Tworzy gniazdo.Creates a socket.
CAsyncSocket:: CreateExCAsyncSocket::CreateEx Tworzy gniazdo z zaawansowanymi opcjami.Creates a socket with advanced options.
CAsyncSocket::D etachCAsyncSocket::Detach Odłączanie uchwytu gniazda z CAsyncSocket obiektu.Detaches a socket handle from a CAsyncSocket object.
CAsyncSocket:: FromHandleCAsyncSocket::FromHandle Zwraca wskaźnik do CAsyncSocket obiektu, w którym znajduje się uchwyt gniazda.Returns a pointer to a CAsyncSocket object, given a socket handle.
CAsyncSocket:: GetLastErrorCAsyncSocket::GetLastError Pobiera stan błędu ostatniej operacji, która zakończyła się niepowodzeniem.Gets the error status for the last operation that failed.
CAsyncSocket:: getpeernameCAsyncSocket::GetPeerName Pobiera adres gniazda równorzędnego, z którym jest połączone gniazdo.Gets the address of the peer socket to which the socket is connected.
CAsyncSocket:: GetPeerNameExCAsyncSocket::GetPeerNameEx Pobiera adres gniazda równorzędnego, z którym jest połączone gniazdo (obsługuje adresy IPv6).Gets the address of the peer socket to which the socket is connected (handles IPv6 addresses).
CAsyncSocket:: GetSockNameCAsyncSocket::GetSockName Pobiera nazwę lokalną dla gniazda.Gets the local name for a socket.
CAsyncSocket:: GetSockNameExCAsyncSocket::GetSockNameEx Pobiera nazwę lokalną dla gniazda (obsługuje adresy IPv6).Gets the local name for a socket (handles IPv6 addresses).
CAsyncSocket:: GetSockOptCAsyncSocket::GetSockOpt Pobiera opcję gniazda.Retrieves a socket option.
CAsyncSocket:: IOCtlCAsyncSocket::IOCtl Kontroluje tryb gniazda.Controls the mode of the socket.
CAsyncSocket:: ListenCAsyncSocket::Listen Ustanawia gniazdo do nasłuchiwania przychodzących żądań połączeń.Establishes a socket to listen for incoming connection requests.
CAsyncSocket:: ReceiveCAsyncSocket::Receive Odbiera dane z gniazda.Receives data from the socket.
CAsyncSocket:: ReceiveFromCAsyncSocket::ReceiveFrom Odbiera datagram i przechowuje adres źródłowy.Receives a datagram and stores the source address.
CAsyncSocket:: ReceiveFromExCAsyncSocket::ReceiveFromEx Odbiera datagram i przechowuje adres źródłowy (obsługuje adresy IPv6).Receives a datagram and stores the source address (handles IPv6 addresses).
CAsyncSocket:: SendCAsyncSocket::Send Wysyła dane do połączonego gniazda.Sends data to a connected socket.
CAsyncSocket:: SendToCAsyncSocket::SendTo Wysyła dane do określonego miejsca docelowego.Sends data to a specific destination.
CAsyncSocket:: SendToExCAsyncSocket::SendToEx Wysyła dane do określonego miejsca docelowego (obsługuje adresy IPv6).Sends data to a specific destination (handles IPv6 addresses).
CAsyncSocket:: SetSockOptCAsyncSocket::SetSockOpt Ustawia opcję gniazda.Sets a socket option.
CAsyncSocket:: ShutDownCAsyncSocket::ShutDown Wyłącza Send i/lub Receive wywołuje w gnieździe.Disables Send and/or Receive calls on the socket.
CASyncSocket:: SocketCASyncSocket::Socket Przydziela obsługę gniazda.Allocates a socket handle.

Metody chronioneProtected Methods

NazwaName OpisDescription
CAsyncSocket:: OnAcceptCAsyncSocket::OnAccept Powiadamia gniazdo nasłuchiwania, które może akceptować oczekujące żądania połączenia przez wywołanie Accept .Notifies a listening socket that it can accept pending connection requests by calling Accept.
CAsyncSocket:: OnCloseCAsyncSocket::OnClose Powiadamia gniazdo, że gniazdo podłączone do niego zostało zamknięte.Notifies a socket that the socket connected to it has closed.
CAsyncSocket:: OnConnectCAsyncSocket::OnConnect Powiadamia gniazdo łączące, że próba nawiązania połączenia kończy się powodzeniem lub błędem.Notifies a connecting socket that the connection attempt is complete, whether successfully or in error.
CAsyncSocket:: OnOutOfBandDataCAsyncSocket::OnOutOfBandData Powiadamia gniazdo odbiorcze, że dane poza pasmem są odczytywane w gnieździe, zazwyczaj jest to komunikat pilny.Notifies a receiving socket that there is out-of-band data to be read on the socket, usually an urgent message.
CAsyncSocket:: OnReceiveCAsyncSocket::OnReceive Powiadamia gniazdo nasłuchujące, że dane mają być pobierane przez wywołanie Receive .Notifies a listening socket that there is data to be retrieved by calling Receive.
CAsyncSocket:: OnSendCAsyncSocket::OnSend Powiadamia gniazdo, że może wysyłać dane przez wywołanie Send .Notifies a socket that it can send data by calling Send.

Operatory publicznePublic Operators

NazwaName OpisDescription
CAsyncSocket:: operator =CAsyncSocket::operator = Przypisuje nową wartość do CAsyncSocket obiektu.Assigns a new value to a CAsyncSocket object.
CAsyncSocket:: operator — gniazdoCAsyncSocket::operator SOCKET Użyj tego operatora, aby pobrać uchwyt gniazda CAsyncSocket obiektu.Use this operator to retrieve the SOCKET handle of the CAsyncSocket object.

Publiczne elementy członkowskie danychPublic Data Members

NazwaName OpisDescription
CAsyncSocket:: m_hSocketCAsyncSocket::m_hSocket Wskazuje dojście gniazda dołączone do tego CAsyncSocket obiektu.Indicates the SOCKET handle attached to this CAsyncSocket object.

UwagiRemarks

Klasa CAsyncSocket hermetyzuje interfejs API funkcji gniazda systemu Windows, zapewniając abstrakcję zorientowaną obiektowo dla programistów, którzy chcą korzystać z Windows Sockets w połączeniu z MFC.Class CAsyncSocket encapsulates the Windows Socket Functions API, providing an object-oriented abstraction for programmers who want to use Windows Sockets in conjunction with MFC.

Ta klasa jest oparta na założeniu, że rozumiesz komunikację sieciową.This class is based on the assumption that you understand network communications. Użytkownik jest odpowiedzialny za obsługę blokowania, różnic w kolejności bajtów i konwersji między ciągami Unicode i wielobajtowym zestawem znaków (MBCS).You are responsible for handling blocking, byte-order differences, and conversions between Unicode and multibyte character set (MBCS) strings. Jeśli potrzebujesz bardziej wygodnego interfejsu, który zarządza tymi problemami, zobacz Klasa CSocket.If you want a more convenient interface that manages these issues for you, see class CSocket.

Aby użyć CAsyncSocket obiektu, wywołaj jego konstruktora, a następnie wywołaj funkcję Create , aby utworzyć bazowe dojście gniazda (typ SOCKET ), z wyjątkiem zaakceptowanych gniazd.To use a CAsyncSocket object, call its constructor, then call the Create function to create the underlying socket handle (type SOCKET), except on accepted sockets. W przypadku gniazda serwerowego wywołaj funkcję elementu członkowskiego Listen i dla gniazda klienta wywołaj funkcję łączenie elementu członkowskiego.For a server socket call the Listen member function, and for a client socket call the Connect member function. Gniazdo serwera powinno wywołać funkcję Accept po odebraniu żądania połączenia.The server socket should call the Accept function upon receiving a connection request. Użyj pozostałych CAsyncSocket funkcji do przeprowadzenia komunikacji między gniazdami.Use the remaining CAsyncSocket functions to carry out communications between sockets. Po zakończeniu Zniszcz obiekt, CAsyncSocket Jeśli został utworzony na stercie. destruktor automatycznie wywołuje funkcję Close .Upon completion, destroy the CAsyncSocket object if it was created on the heap; the destructor automatically calls the Close function. Typ danych gniazda został opisany w artykule Windows Sockets: Background.The SOCKET data type is described in the article Windows Sockets: Background.

Uwaga

W przypadku korzystania z gniazd MFC w wątkach pomocniczych w statycznie połączonej aplikacji MFC należy wywołać AfxSocketInit w każdym wątku, który używa gniazd do inicjowania bibliotek gniazd.When using MFC sockets in secondary threads in a statically linked MFC application, you must call AfxSocketInit in each thread that uses sockets to initialize the socket libraries. Domyślnie AfxSocketInit jest wywoływana tylko w wątku podstawowym.By default, AfxSocketInit is called only in the primary thread.

Aby uzyskać więcej informacji, zobacz Windows Sockets: Using Class CAsyncSocket and pokrewnych artykułów., a także interfejsu API Windows Sockets 2.For more information, see Windows Sockets: Using Class CAsyncSocket and related articles., as well as Windows Sockets 2 API.

Hierarchia dziedziczeniaInheritance Hierarchy

CObjectCObject

CAsyncSocket

WymaganiaRequirements

Nagłówek: AfxSock. hHeader: afxsock.h

CAsyncSocket:: AcceptCAsyncSocket::Accept

Wywołaj tę funkcję elementu członkowskiego, aby zaakceptować połączenie w gnieździe.Call this member function to accept a connection on a socket.

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

ParametryParameters

rConnectedSocketrConnectedSocket
Odwołanie identyfikujące nowe gniazdo, które jest dostępne do połączenia.A reference identifying a new socket that is available for connection.

lpSockAddrlpSockAddr
Wskaźnik do struktury SOCKADDR , który odbiera adres połączonego gniazda, zgodnie z opisem w sieci.A pointer to a SOCKADDR structure that receives the address of the connecting socket, as known on the network. Dokładny Format argumentu lpSockAddr jest określany przez rodzinę adresów ustanowioną podczas tworzenia gniazda.The exact format of the lpSockAddr argument is determined by the address family established when the socket was created. Jeśli lpSockAddr i/lub LPSOCKADDRLEN są równe null, to nie jest zwracana żadna informacja o adresie zdalnym zaakceptowanego gniazda.If lpSockAddr and/or lpSockAddrLen are equal to NULL, then no information about the remote address of the accepted socket is returned.

lpSockAddrLenlpSockAddrLen
Wskaźnik do długości adresu w lpSockAddr w bajtach.A pointer to the length of the address in lpSockAddr in bytes. LpSockAddrLen jest parametrem wyniku wartości: powinien początkowo zawierać ilość miejsca wskazywanego przez lpSockAddr; po zwróceniu będzie zawierać rzeczywistą Długość (w bajtach) zwróconego adresu.The lpSockAddrLen is a value-result parameter: it should initially contain the amount of space pointed to by lpSockAddr; on return it will contain the actual length (in bytes) of the address returned.

Wartość zwracanaReturn Value

Niezerowe, jeśli funkcja się powiedzie; w przeciwnym razie 0, a określony kod błędu można pobrać, wywołując wartość GetLastError.Nonzero if the function is successful; otherwise 0, and a specific error code can be retrieved by calling GetLastError. Następujące błędy dotyczą tej funkcji składowej:The following errors apply to this member function:

  • WSANOTINITIALISED pomyślne AfxSocketInit musi wystąpić przed użyciem tego interfejsu API.WSANOTINITIALISED A successful AfxSocketInit must occur before using this API.

  • WSAENETDOWN implementacja Windows Sockets wykryła, że podsystem sieci nie powiódł się.WSAENETDOWN The Windows Sockets implementation detected that the network subsystem failed.

  • WSAEFAULT argument lpSockAddrLen jest za mały (mniejszy niż rozmiar struktury SOCKADDR ).WSAEFAULT The lpSockAddrLen argument is too small (less than the size of a SOCKADDR structure).

  • WSAEINPROGRESS blokowanie wywołania Windows Sockets jest w toku.WSAEINPROGRESS A blocking Windows Sockets call is in progress.

  • WSAEINVAL Listen nie została wywołana przed zaakceptowaniem.WSAEINVAL Listen was not invoked prior to accept.

  • WSAEMFILE kolejka jest pusta, gdy wpis zostanie zaakceptowany i nie ma dostępnych deskryptorów.WSAEMFILE The queue is empty upon entry to accept and there are no descriptors available.

  • WSAENOBUFS Brak dostępnego miejsca w buforze.WSAENOBUFS No buffer space is available.

  • WSAENOTSOCK deskryptor nie jest gniazdem.WSAENOTSOCK The descriptor is not a socket.

  • WSAEOPNOTSUPP gniazdo, do którego istnieje odwołanie, nie jest typem, który obsługuje usługi zorientowane na połączenia.WSAEOPNOTSUPP The referenced socket is not a type that supports connection-oriented service.

  • WSAEWOULDBLOCK gniazdo jest oznaczone jako nieblokujące i nie ma żadnych połączeń do zaakceptowania.WSAEWOULDBLOCK The socket is marked as nonblocking and no connections are present to be accepted.

UwagiRemarks

Ta procedura wyodrębnia pierwsze połączenie w kolejce oczekujących połączeń, tworzy nowe gniazdo z tymi samymi właściwościami co to gniazdo i dołącza je do rConnectedSocket.This routine extracts the first connection in the queue of pending connections, creates a new socket with the same properties as this socket, and attaches it to rConnectedSocket. Jeśli w kolejce nie ma żadnych oczekujących połączeń, Accept funkcja zwróci wartość zero i GetLastError zwróci błąd.If no pending connections are present on the queue, Accept returns zero and GetLastError returns an error. Nie można użyć zaakceptowanego gniazda ( rConnectedSocket) w celu zaakceptowania większej liczby połączeń.The accepted socket ( rConnectedSocket) cannot be used to accept more connections. Oryginalne gniazdo pozostaje otwarte i nasłuchuje.The original socket remains open and listening.

Argument lpSockAddr jest parametrem wynikowym, który jest wypełniany adresem połączonego gniazda, tak jak w przypadku warstwy komunikacji.The argument lpSockAddr is a result parameter that is filled in with the address of the connecting socket, as known to the communications layer. Accept jest używany z typami gniazd opartymi na połączeniach, takimi jak SOCK_STREAM.Accept is used with connection-based socket types such as SOCK_STREAM.

CAsyncSocket:: AsyncSelectCAsyncSocket::AsyncSelect

Wywołaj tę funkcję elementu członkowskiego, aby zażądać powiadomienia o zdarzeniu dla gniazda.Call this member function to request event notification for a socket.

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

ParametryParameters

lEventlEvent
Maska bitów, która określa kombinację zdarzeń sieci, w których interesuje aplikacja.A bitmask which specifies a combination of network events in which the application is interested.

  • FD_READ chcesz otrzymywać powiadomienia o gotowości do odczytu.FD_READ Want to receive notification of readiness for reading.

  • FD_WRITE chcesz otrzymywać powiadomienia, gdy dane są dostępne do odczytu.FD_WRITE Want to receive notification when data is available to be read.

  • FD_OOB chcesz otrzymywać powiadomienia o nadejściu danych poza pasmem.FD_OOB Want to receive notification of the arrival of out-of-band data.

  • FD_ACCEPT chcesz otrzymywać powiadomienia o połączeniach przychodzących.FD_ACCEPT Want to receive notification of incoming connections.

  • FD_CONNECT chcesz otrzymywać powiadomienia o wynikach połączenia.FD_CONNECT Want to receive notification of connection results.

  • FD_CLOSE chcesz otrzymywać powiadomienia, gdy gniazdo zostało zamknięte przez element równorzędny.FD_CLOSE Want to receive notification when a socket has been closed by a peer.

Wartość zwracanaReturn Value

Niezerowe, jeśli funkcja się powiedzie; w przeciwnym razie 0, a określony kod błędu można pobrać, wywołując wartość GetLastError.Nonzero if the function is successful; otherwise 0, and a specific error code can be retrieved by calling GetLastError. Następujące błędy dotyczą tej funkcji składowej:The following errors apply to this member function:

  • WSANOTINITIALISED pomyślne AfxSocketInit musi wystąpić przed użyciem tego interfejsu API.WSANOTINITIALISED A successful AfxSocketInit must occur before using this API.

  • WSAENETDOWN implementacja Windows Sockets wykryła, że podsystem sieci nie powiódł się.WSAENETDOWN The Windows Sockets implementation detected that the network subsystem failed.

  • WSAEINVAL wskazuje, że jeden z określonych parametrów jest nieprawidłowy.WSAEINVAL Indicates that one of the specified parameters was invalid.

  • WSAEINPROGRESS blokuje operację blokowania Windows Sockets.WSAEINPROGRESS A blocking Windows Sockets operation is in progress.

UwagiRemarks

Ta funkcja służy do określania, które funkcje powiadomień wywołania zwrotnego MFC będą wywoływane dla gniazda.This function is used to specify which MFC callback notification functions will be called for the socket. AsyncSelect automatycznie ustawia ten gniazdo na tryb niezablokowany.AsyncSelect automatically sets this socket to nonblocking mode. Aby uzyskać więcej informacji, zapoznaj się z artykułem Windows Sockets: powiadomienia dotyczące gniazd.For more information, see the article Windows Sockets: Socket Notifications.

CAsyncSocket:: AttachCAsyncSocket::Attach

Wywołaj tę funkcję elementu członkowskiego, aby dołączyć dojście hSocket do CAsyncSocket obiektu.Call this member function to attach the hSocket handle to an CAsyncSocket object.

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

ParametryParameters

hSockethSocket
Zawiera uchwyt do gniazda.Contains a handle to a socket.

lEventlEvent
Maska bitów, która określa kombinację zdarzeń sieci, w których interesuje aplikacja.A bitmask which specifies a combination of network events in which the application is interested.

  • FD_READ chcesz otrzymywać powiadomienia o gotowości do odczytu.FD_READ Want to receive notification of readiness for reading.

  • FD_WRITE chcesz otrzymywać powiadomienia, gdy dane są dostępne do odczytu.FD_WRITE Want to receive notification when data is available to be read.

  • FD_OOB chcesz otrzymywać powiadomienia o nadejściu danych poza pasmem.FD_OOB Want to receive notification of the arrival of out-of-band data.

  • FD_ACCEPT chcesz otrzymywać powiadomienia o połączeniach przychodzących.FD_ACCEPT Want to receive notification of incoming connections.

  • FD_CONNECT chcesz otrzymywać powiadomienia o wynikach połączenia.FD_CONNECT Want to receive notification of connection results.

  • FD_CLOSE chcesz otrzymywać powiadomienia, gdy gniazdo zostało zamknięte przez element równorzędny.FD_CLOSE Want to receive notification when a socket has been closed by a peer.

Wartość zwracanaReturn Value

Niezerowe, jeśli funkcja się powiedzie.Nonzero if the function is successful.

UwagiRemarks

Uchwyt gniazda jest przechowywany w elemencie członkowskim danych m_hSocket obiektu.The SOCKET handle is stored in the object's m_hSocket data member.

CAsyncSocket:: bindCAsyncSocket::Bind

Wywołaj tę funkcję elementu członkowskiego, aby skojarzyć adres lokalny z gniazdem.Call this member function to associate a local address with the socket.

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

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

ParametryParameters

nSocketPortnSocketPort
Port identyfikujący aplikację gniazda.The port identifying the socket application.

lpszSocketAddresslpszSocketAddress
Adres sieciowy, numer kropkowany, taki jak "128.56.22.8".The network address, a dotted number such as "128.56.22.8". Przekazywanie ciągu o wartości NULL dla tego parametru wskazuje, że CAsyncSocket wystąpienie powinno nasłuchiwać aktywności klienta na wszystkich interfejsach sieciowych.Passing the NULL string for this parameter indicates the CAsyncSocket instance should listen for client activity on all network interfaces.

lpSockAddrlpSockAddr
Wskaźnik do struktury SOCKADDR , która zawiera adres, który ma zostać przypisany do tego gniazda.A pointer to a SOCKADDR structure that contains the address to assign to this socket.

nSockAddrLennSockAddrLen
Długość adresu w lpSockAddr w bajtach.The length of the address in lpSockAddr in bytes.

Wartość zwracanaReturn Value

Niezerowe, jeśli funkcja się powiedzie; w przeciwnym razie 0, a określony kod błędu można pobrać, wywołując wartość GetLastError.Nonzero if the function is successful; otherwise 0, and a specific error code can be retrieved by calling GetLastError. Poniższa lista zawiera kilka błędów, które mogą zostać zwrócone.The following list covers a few of the errors that might be returned. Aby uzyskać pełną listę, zobacz kody błędów usługi Windows Sockets.For a complete list, see Windows Sockets Error Codes.

  • WSANOTINITIALISED pomyślne AfxSocketInit musi wystąpić przed użyciem tego interfejsu API.WSANOTINITIALISED A successful AfxSocketInit must occur before using this API.

  • WSAENETDOWN implementacja Windows Sockets wykryła, że podsystem sieci nie powiódł się.WSAENETDOWN The Windows Sockets implementation detected that the network subsystem failed.

  • WSAEADDRINUSE określony adres jest już używany.WSAEADDRINUSE The specified address is already in use. (Zobacz opcję SO_REUSEADDR Socket w obszarze SetSockOpt).(See the SO_REUSEADDR socket option under SetSockOpt.)

  • WSAEFAULT argument nSockAddrLen jest za mały (mniejszy niż rozmiar struktury SOCKADDR ).WSAEFAULT The nSockAddrLen argument is too small (less than the size of a SOCKADDR structure).

  • WSAEINPROGRESS blokowanie wywołania Windows Sockets jest w toku.WSAEINPROGRESS A blocking Windows Sockets call is in progress.

  • WSAEAFNOSUPPORT określona Rodzina adresów nie jest obsługiwana przez ten port.WSAEAFNOSUPPORT The specified address family is not supported by this port.

  • WSAEINVAL gniazdo jest już powiązane z adresem.WSAEINVAL The socket is already bound to an address.

  • WSAENOBUFS jest za mało dostępnych buforów, za dużo połączeń.WSAENOBUFS Not enough buffers available, too many connections.

  • WSAENOTSOCK deskryptor nie jest gniazdem.WSAENOTSOCK The descriptor is not a socket.

UwagiRemarks

Ta procedura jest używana w niepołączonym datagramie lub gnieździe Stream przed kolejnymi Connect lub Listen wywołaniami.This routine is used on an unconnected datagram or stream socket, before subsequent Connect or Listen calls. Aby umożliwić akceptowanie żądań połączeń, nasłuchiwanie gniazda serwera musi wybrać numer portu i określić, że jest on znany dla gniazd Windows Sockets przez wywołanie Bind .Before it can accept connection requests, a listening server socket must select a port number and make it known to Windows Sockets by calling Bind. Bind ustanawia lokalne skojarzenie (adres hosta/numer portu) gniazda przez przypisanie lokalnej nazwy do nienazwanego gniazda.Bind establishes the local association (host address/port number) of the socket by assigning a local name to an unnamed socket.

CAsyncSocket:: CAsyncSocketCAsyncSocket::CAsyncSocket

Konstruuje pusty obiekt gniazda.Constructs a blank socket object.

CAsyncSocket();

UwagiRemarks

Po skonstruowaniu obiektu należy wywołać jego Create funkcję członkowską, aby utworzyć strukturę danych gniazda i powiązać jej adres.After constructing the object, you must call its Create member function to create the SOCKET data structure and bind its address. (Po stronie serwera komunikacji Windows Sockets, gdy gniazdo nasłuchiwania tworzy gniazdo do użycia w Accept wywołaniu, nie jest wywoływana Create dla tego gniazda).(On the server side of a Windows Sockets communication, when the listening socket creates a socket to use in the Accept call, you do not call Create for that socket.)

CAsyncSocket:: CloseCAsyncSocket::Close

Zamyka gniazdo.Closes the socket.

virtual void Close();

UwagiRemarks

Ta funkcja zwalnia deskryptor gniazda, dzięki czemu dalsze odwołania do niego będą kończyć się niepowodzeniem z powodu błędu WSAENOTSOCK.This function releases the socket descriptor so that further references to it will fail with the error WSAENOTSOCK. Jeśli jest to ostatnie odwołanie do bazowego gniazda, skojarzone informacje o nazewnictwie i dane znajdujące się w kolejce są odrzucane.If this is the last reference to the underlying socket, the associated naming information and queued data are discarded. Destruktor obiektu gniazda wywołuje Close Cię.The socket object's destructor calls Close for you.

W przypadku, CAsyncSocket ale nie dla CSocket , semantyki ma Close wpływ Opcje gniazda SO_LINGER i SO_DONTLINGER.For CAsyncSocket, but not for CSocket, the semantics of Close are affected by the socket options SO_LINGER and SO_DONTLINGER. Aby uzyskać więcej informacji, zobacz funkcja członkowska GetSockOpt .For further information, see member function GetSockOpt.

CAsyncSocket:: ConnectCAsyncSocket::Connect

Wywołaj tę funkcję elementu członkowskiego, aby nawiązać połączenie z niepołączonym strumieniem lub gniazdem datagramu.Call this member function to establish a connection to an unconnected stream or datagram socket.

BOOL Connect(
    LPCTSTR lpszHostAddress,
    UINT nHostPort);

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

ParametryParameters

lpszHostAddresslpszHostAddress
Adres sieciowy gniazda, z którym jest połączony ten obiekt: Nazwa komputera, taka jak "ftp.microsoft.com" lub cyfra kropkowana, taka jak "128.56.22.8".The network address of the socket to which this object is connected: a machine name such as "ftp.microsoft.com", or a dotted number such as "128.56.22.8".

nHostPortnHostPort
Port identyfikujący aplikację gniazda.The port identifying the socket application.

lpSockAddrlpSockAddr
Wskaźnik do struktury SOCKADDR , która zawiera adres połączonego gniazda.A pointer to a SOCKADDR structure that contains the address of the connected socket.

nSockAddrLennSockAddrLen
Długość adresu w lpSockAddr w bajtach.The length of the address in lpSockAddr in bytes.

Wartość zwracanaReturn Value

Niezerowe, jeśli funkcja się powiedzie; w przeciwnym razie 0, a określony kod błędu można pobrać, wywołując wartość GetLastError.Nonzero if the function is successful; otherwise 0, and a specific error code can be retrieved by calling GetLastError. Jeśli wskazuje to na kod błędu WSAEWOULDBLOCK, a aplikacja używa zaszeregowania wywołania zwrotnego, aplikacja otrzyma OnConnect komunikat po zakończeniu operacji łączenia.If this indicates an error code of WSAEWOULDBLOCK, and your application is using the overridable callbacks, your application will receive an OnConnect message when the connect operation is complete. Następujące błędy dotyczą tej funkcji składowej:The following errors apply to this member function:

  • WSANOTINITIALISED pomyślne AfxSocketInit musi wystąpić przed użyciem tego interfejsu API.WSANOTINITIALISED A successful AfxSocketInit must occur before using this API.

  • WSAENETDOWN implementacja Windows Sockets wykryła, że podsystem sieci nie powiódł się.WSAENETDOWN The Windows Sockets implementation detected that the network subsystem failed.

  • WSAEADDRINUSE określony adres jest już używany.WSAEADDRINUSE The specified address is already in use.

  • WSAEINPROGRESS blokowanie wywołania Windows Sockets jest w toku.WSAEINPROGRESS A blocking Windows Sockets call is in progress.

  • WSAEADDRNOTAVAIL określony adres nie jest dostępny na komputerze lokalnym.WSAEADDRNOTAVAIL The specified address is not available from the local machine.

  • Adresów WSAEAFNOSUPPORT w określonej rodzinie nie można używać w tym gnieździe.WSAEAFNOSUPPORT Addresses in the specified family cannot be used with this socket.

  • WSAECONNREFUSED próba nawiązania połączenia została odrzucona.WSAECONNREFUSED The attempt to connect was rejected.

  • WSAEDESTADDRREQ jest wymagany adres docelowy.WSAEDESTADDRREQ A destination address is required.

  • WSAEFAULT argument nSockAddrLen jest niepoprawny.WSAEFAULT The nSockAddrLen argument is incorrect.

  • WSAEINVAL nieprawidłowy adres hosta.WSAEINVAL Invalid host address.

  • WSAEISCONN gniazdo jest już połączone.WSAEISCONN The socket is already connected.

  • WSAEMFILE nie ma więcej dostępnych deskryptorów plików.WSAEMFILE No more file descriptors are available.

  • WSAENETUNREACH w tej chwili nie można nawiązać połączenia z siecią.WSAENETUNREACH The network cannot be reached from this host at this time.

  • WSAENOBUFS Brak dostępnego miejsca w buforze.WSAENOBUFS No buffer space is available. Nie można nawiązać połączenia z gniazdem.The socket cannot be connected.

  • WSAENOTSOCK deskryptor nie jest gniazdem.WSAENOTSOCK The descriptor is not a socket.

  • WSAETIMEDOUT podjęto próbę nawiązania połączenia bez nawiązania połączenia.WSAETIMEDOUT Attempt to connect timed out without establishing a connection.

  • WSAEWOULDBLOCK gniazdo jest oznaczone jako nieblokowe, a połączenie nie może zostać zakończone natychmiast.WSAEWOULDBLOCK The socket is marked as nonblocking and the connection cannot be completed immediately.

UwagiRemarks

Jeśli gniazdo jest niepowiązane, unikatowe wartości są przypisywane do lokalnego skojarzenia przez system, a gniazdo jest oznaczone jako powiązane.If the socket is unbound, unique values are assigned to the local association by the system, and the socket is marked as bound. Należy pamiętać, że jeśli pole adres struktury nazw ma same wartości zerowe, Connect program zwróci wartość zero.Note that if the address field of the name structure is all zeroes, Connect will return zero. Aby uzyskać rozszerzone informacje o błędzie, wywołaj GetLastError funkcję członkowską.To get extended error information, call the GetLastError member function.

Dla gniazd strumienia (typu SOCK_STREAM) aktywne połączenie jest inicjowane dla hosta obcego.For stream sockets (type SOCK_STREAM), an active connection is initiated to the foreign host. Gdy połączenie gniazda zakończy się pomyślnie, gniazdo jest gotowe do wysyłania/odbierania danych.When the socket call completes successfully, the socket is ready to send/receive data.

Dla gniazda datagramu (typu SOCK_DGRAM) ustawiany jest domyślny element docelowy, który będzie używany podczas kolejnych Send i Receive wywołań.For a datagram socket (type SOCK_DGRAM), a default destination is set, which will be used on subsequent Send and Receive calls.

CAsyncSocket:: CreateCAsyncSocket::Create

Wywołaj Create funkcję członkowską po utworzeniu obiektu gniazda, aby utworzyć gniazdo systemu Windows i dołączyć go.Call the Create member function after constructing a socket object to create the Windows socket and attach it.

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

ParametryParameters

nSocketPortnSocketPort
Dobrze znany port do użycia w gnieździe lub 0, jeśli chcesz, aby system Windows Sockets wybierał port.A well-known port to be used with the socket, or 0 if you want Windows Sockets to select a port.

nSocketTypenSocketType
SOCK_STREAM lub SOCK_DGRAM.SOCK_STREAM or SOCK_DGRAM.

lEventlEvent
Maska bitów, która określa kombinację zdarzeń sieci, w których interesuje aplikacja.A bitmask which specifies a combination of network events in which the application is interested.

  • FD_READ chcesz otrzymywać powiadomienia o gotowości do odczytu.FD_READ Want to receive notification of readiness for reading.

  • FD_WRITE chcesz otrzymywać powiadomienia o gotowości do zapisu.FD_WRITE Want to receive notification of readiness for writing.

  • FD_OOB chcesz otrzymywać powiadomienia o nadejściu danych poza pasmem.FD_OOB Want to receive notification of the arrival of out-of-band data.

  • FD_ACCEPT chcesz otrzymywać powiadomienia o połączeniach przychodzących.FD_ACCEPT Want to receive notification of incoming connections.

  • FD_CONNECT chcesz otrzymywać powiadomienia o ukończonym połączeniu.FD_CONNECT Want to receive notification of completed connection.

  • FD_CLOSE chcesz otrzymywać powiadomienia o zamknięciu gniazda.FD_CLOSE Want to receive notification of socket closure.

lpszSockAddresslpszSockAddress
Wskaźnik do ciągu zawierającego adres sieciowy połączonego gniazda, numer kropkowany, taki jak "128.56.22.8". Przekazywanie ciągu o wartości NULL dla tego parametru wskazuje, że CAsyncSocket wystąpienie powinno nasłuchiwać aktywności klienta na wszystkich interfejsach sieciowych.A pointer to a string containing the network address of the connected socket, a dotted number such as "128.56.22.8".Passing the NULL string for this parameter indicates the CAsyncSocket instance should listen for client activity on all network interfaces.

Wartość zwracanaReturn Value

Niezerowe, jeśli funkcja się powiedzie; w przeciwnym razie 0, a określony kod błędu można pobrać, wywołując wartość GetLastError.Nonzero if the function is successful; otherwise 0, and a specific error code can be retrieved by calling GetLastError. Następujące błędy dotyczą tej funkcji składowej:The following errors apply to this member function:

  • WSANOTINITIALISED pomyślne AfxSocketInit musi wystąpić przed użyciem tego interfejsu API.WSANOTINITIALISED A successful AfxSocketInit must occur before using this API.

  • WSAENETDOWN implementacja Windows Sockets wykryła, że podsystem sieci nie powiódł się.WSAENETDOWN The Windows Sockets implementation detected that the network subsystem failed.

  • WSAEAFNOSUPPORT określona Rodzina adresów nie jest obsługiwana.WSAEAFNOSUPPORT The specified address family is not supported.

  • WSAEINPROGRESS blokuje operację blokowania Windows Sockets.WSAEINPROGRESS A blocking Windows Sockets operation is in progress.

  • WSAEMFILE nie ma więcej dostępnych deskryptorów plików.WSAEMFILE No more file descriptors are available.

  • WSAENOBUFS Brak dostępnego miejsca w buforze.WSAENOBUFS No buffer space is available. Nie można utworzyć gniazda.The socket cannot be created.

  • WSAEPROTONOSUPPORT określony port nie jest obsługiwany.WSAEPROTONOSUPPORT The specified port is not supported.

  • WSAEPROTOTYPE określony port jest niewłaściwy dla tego gniazda.WSAEPROTOTYPE The specified port is the wrong type for this socket.

  • WSAESOCKTNOSUPPORT określony typ gniazda nie jest obsługiwany w tej rodzinie adresów.WSAESOCKTNOSUPPORT The specified socket type is not supported in this address family.

UwagiRemarks

Create wywołuje gniazdo i jeśli to się powiedzie, wywołuje powiązanie , aby powiązać gniazdo z określonym adresem.Create calls Socket and if successful, it calls Bind to bind the socket to the specified address. Obsługiwane są następujące typy gniazd:The following socket types are supported:

  • SOCK_STREAM zapewnia sekwencyjne, niezawodne i jednobajtowe strumienie strumienia bajtów.SOCK_STREAM Provides sequenced, reliable, full-duplex, connection-based byte streams. Używa Transmission Control Protocol (TCP) dla rodziny adresów internetowych.Uses the Transmission Control Protocol (TCP) for the Internet address family.

  • SOCK_DGRAM obsługuje datagramy, które są bezpołączeniowe, niezawodne pakiety o stałej (zwykle małych) długości.SOCK_DGRAM Supports datagrams, which are connectionless, unreliable packets of a fixed (typically small) maximum length. Używa protokołu UDP (User Datagram) dla rodziny adresów internetowych.Uses the User Datagram Protocol (UDP) for the Internet address family.

    Uwaga

    AcceptFunkcja członkowska przyjmuje odwołanie do nowego, pustego CSocket obiektu jako jego parametru.The Accept member function takes a reference to a new, empty CSocket object as its parameter. Należy skonstruować ten obiekt przed wywołaniem Accept .You must construct this object before you call Accept. Należy pamiętać, że jeśli ten obiekt gniazda wykracza poza zakres, połączenie zostanie zamknięte.Keep in mind that if this socket object goes out of scope, the connection closes. Nie wywołuj Create dla tego nowego obiektu gniazda.Do not call Create for this new socket object.

Ważne

Createnie jest bezpieczny wątkowo.Create is not thread-safe. Jeśli wywołujesz ją w środowisku wielowątkowym, w którym może być wywoływana jednocześnie przez różne wątki, pamiętaj o ochronie każdego wywołania z muteksem lub inną blokadą synchronizacji.If you are calling it in a multi-threaded environment where it could be invoked simultaneously by different threads, be sure to protect each call with a mutex or other synchronization lock.

Aby uzyskać więcej informacji na temat gniazd strumienia i datagramów, zobacz artykuły dotyczące Windows Sockets: Background i Windows Sockets: Ports and Socket Addresss and Windows Sockets API.For more information about stream and datagram sockets, see the articles Windows Sockets: Background and Windows Sockets: Ports and Socket Addresses and Windows Sockets 2 API.

CAsyncSocket:: CreateExCAsyncSocket::CreateEx

Wywołaj CreateEx funkcję członkowską po utworzeniu obiektu gniazda, aby utworzyć gniazdo systemu Windows i dołączyć go.Call the CreateEx member function after constructing a socket object to create the Windows socket and attach it.

Użyj tej funkcji, jeśli musisz podać opcje zaawansowane, takie jak typ gniazda.Use this function when you need to supply advanced options such as the socket type.

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

ParametryParameters

pAIpAI
Wskaźnik do ADDRINFOT w celu przechowywania informacji o gnieździe, takich jak rodzina i typ gniazda.A pointer to a ADDRINFOT to hold socket info such as the family and socket type.

lEventlEvent
Maska bitów, która określa kombinację zdarzeń sieci, w których interesuje aplikacja.A bitmask which specifies a combination of network events in which the application is interested.

  • FD_READ chcesz otrzymywać powiadomienia o gotowości do odczytu.FD_READ Want to receive notification of readiness for reading.

  • FD_WRITE chcesz otrzymywać powiadomienia o gotowości do zapisu.FD_WRITE Want to receive notification of readiness for writing.

  • FD_OOB chcesz otrzymywać powiadomienia o nadejściu danych poza pasmem.FD_OOB Want to receive notification of the arrival of out-of-band data.

  • FD_ACCEPT chcesz otrzymywać powiadomienia o połączeniach przychodzących.FD_ACCEPT Want to receive notification of incoming connections.

  • FD_CONNECT chcesz otrzymywać powiadomienia o ukończonym połączeniu.FD_CONNECT Want to receive notification of completed connection.

  • FD_CLOSE chcesz otrzymywać powiadomienia o zamknięciu gniazda.FD_CLOSE Want to receive notification of socket closure.

Wartość zwracanaReturn Value

Zobacz wartość zwracaną dla elementu Create ().See the return value for Create().

UwagiRemarks

Zobacz uwagi dotyczące tworzenia ().See the remarks for Create().

CAsyncSocket::D etachCAsyncSocket::Detach

Wywołaj tę funkcję elementu członkowskiego, aby odłączyć uchwyt gniazda w elemencie członkowskim danych m_hSocket z CAsyncSocket obiektu i ustawić m_hSocket na wartość null.Call this member function to detach the SOCKET handle in the m_hSocket data member from the CAsyncSocket object and set m_hSocket to NULL.

SOCKET Detach();

CAsyncSocket:: FromHandleCAsyncSocket::FromHandle

Zwraca wskaźnik do CAsyncSocket obiektu.Returns a pointer to a CAsyncSocket object.

static CAsyncSocket* PASCAL FromHandle(SOCKET hSocket);

ParametryParameters

hSockethSocket
Zawiera uchwyt do gniazda.Contains a handle to a socket.

Wartość zwracanaReturn Value

Wskaźnik do CAsyncSocket obiektu lub wartość null, jeśli nie ma CAsyncSocket obiektu dołączonego do hSocket.A pointer to an CAsyncSocket object, or NULL if there is no CAsyncSocket object attached to hSocket.

UwagiRemarks

Gdy dany CAsyncSocket obiekt nie jest dołączony do dojścia, funkcja członkowska zwraca wartość null.When given a SOCKET handle, if a CAsyncSocket object is not attached to the handle, the member function returns NULL.

CAsyncSocket:: GetLastErrorCAsyncSocket::GetLastError

Wywołaj tę funkcję elementu członkowskiego, aby uzyskać stan błędu dla ostatniej operacji, która się nie powiodła.Call this member function to get the error status for the last operation that failed.

static int PASCAL GetLastError();

Wartość zwracanaReturn Value

Wartość zwracana wskazuje kod błędu dla ostatniej procedury interfejsu API Windows Sockets wykonywanej przez ten wątek.The return value indicates the error code for the last Windows Sockets API routine performed by this thread.

UwagiRemarks

Gdy określona funkcja członkowska wskazuje, że wystąpił błąd, GetLastError należy wywołać, aby pobrać odpowiedni kod błędu.When a particular member function indicates that an error has occurred, GetLastError should be called to retrieve the appropriate error code. Listę odpowiednich kodów błędów można znaleźć w opisach funkcji poszczególnych elementów członkowskich.See the individual member function descriptions for a list of applicable error codes.

Aby uzyskać więcej informacji o kodach błędów, zobacz interfejs API Windows Sockets 2.For more information about the error codes, see Windows Sockets 2 API.

CAsyncSocket:: getpeernameCAsyncSocket::GetPeerName

Wywołaj tę funkcję elementu członkowskiego, aby uzyskać adres gniazda równorzędnego, z którym jest połączone to gniazdo.Call this member function to get the address of the peer socket to which this socket is connected.

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

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

ParametryParameters

rPeerAddressrPeerAddress
Odwołanie do CString obiektu, który odbiera adres IP o liczbie kropek.Reference to a CString object that receives a dotted number IP address.

rPeerPortrPeerPort
Odwołanie do typu UINT, który przechowuje port.Reference to a UINT that stores a port.

lpSockAddrlpSockAddr
Wskaźnik do struktury SOCKADDR , która otrzymuje nazwę gniazda równorzędnego.A pointer to the SOCKADDR structure that receives the name of the peer socket.

lpSockAddrLenlpSockAddrLen
Wskaźnik do długości adresu w lpSockAddr w bajtach.A pointer to the length of the address in lpSockAddr in bytes. W przypadku powrotu argument lpSockAddrLen zawiera rzeczywisty rozmiar lpSockAddr zwrócony w bajtach.On return, the lpSockAddrLen argument contains the actual size of lpSockAddr returned in bytes.

Wartość zwracanaReturn Value

Niezerowe, jeśli funkcja się powiedzie; w przeciwnym razie 0, a określony kod błędu można pobrać, wywołując wartość GetLastError.Nonzero if the function is successful; otherwise 0, and a specific error code can be retrieved by calling GetLastError. Następujące błędy dotyczą tej funkcji składowej:The following errors apply to this member function:

  • WSANOTINITIALISED pomyślne AfxSocketInit musi wystąpić przed użyciem tego interfejsu API.WSANOTINITIALISED A successful AfxSocketInit must occur before using this API.

  • WSAENETDOWN implementacja Windows Sockets wykryła, że podsystem sieci nie powiódł się.WSAENETDOWN The Windows Sockets implementation detected that the network subsystem failed.

  • WSAEFAULT argument lpSockAddrLen nie jest wystarczająco duży.WSAEFAULT The lpSockAddrLen argument is not large enough.

  • WSAEINPROGRESS blokowanie wywołania Windows Sockets jest w toku.WSAEINPROGRESS A blocking Windows Sockets call is in progress.

  • WSAENOTCONN gniazdo nie jest połączone.WSAENOTCONN The socket is not connected.

  • WSAENOTSOCK deskryptor nie jest gniazdem.WSAENOTSOCK The descriptor is not a socket.

UwagiRemarks

Aby obsłużyć adresy IPv6, należy użyć CAsyncSocket:: GetPeerNameEx.To handle IPv6 addresses, use CAsyncSocket::GetPeerNameEx.

CAsyncSocket:: GetPeerNameExCAsyncSocket::GetPeerNameEx

Wywołaj tę funkcję elementu członkowskiego, aby uzyskać adres gniazda równorzędnego, z którym jest połączone to gniazdo (obsługuje adresy IPv6).Call this member function to get the address of the peer socket to which this socket is connected (handles IPv6 addresses).

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

ParametryParameters

rPeerAddressrPeerAddress
Odwołanie do CString obiektu, który odbiera adres IP o liczbie kropek.Reference to a CString object that receives a dotted number IP address.

rPeerPortrPeerPort
Odwołanie do typu UINT, który przechowuje port.Reference to a UINT that stores a port.

Wartość zwracanaReturn Value

Niezerowe, jeśli funkcja się powiedzie; w przeciwnym razie 0, a określony kod błędu można pobrać, wywołując wartość GetLastError.Nonzero if the function is successful; otherwise 0, and a specific error code can be retrieved by calling GetLastError. Następujące błędy dotyczą tej funkcji składowej:The following errors apply to this member function:

  • WSANOTINITIALISED pomyślne AfxSocketInit musi wystąpić przed użyciem tego interfejsu API.WSANOTINITIALISED A successful AfxSocketInit must occur before using this API.

  • WSAENETDOWN implementacja Windows Sockets wykryła, że podsystem sieci nie powiódł się.WSAENETDOWN The Windows Sockets implementation detected that the network subsystem failed.

  • WSAEFAULT argument lpSockAddrLen nie jest wystarczająco duży.WSAEFAULT The lpSockAddrLen argument is not large enough.

  • WSAEINPROGRESS blokowanie wywołania Windows Sockets jest w toku.WSAEINPROGRESS A blocking Windows Sockets call is in progress.

  • WSAENOTCONN gniazdo nie jest połączone.WSAENOTCONN The socket is not connected.

  • WSAENOTSOCK deskryptor nie jest gniazdem.WSAENOTSOCK The descriptor is not a socket.

UwagiRemarks

Ta funkcja jest taka sama jak CAsyncSocket:: getpeername , z tą różnicą, że obsługuje adresy IPv6 oraz starsze protokoły.This function is the same as CAsyncSocket::GetPeerName except that it handles IPv6 addresses as well as older protocols.

CAsyncSocket:: GetSockNameCAsyncSocket::GetSockName

Wywołaj tę funkcję elementu członkowskiego, aby uzyskać lokalną nazwę gniazda.Call this member function to get the local name for a socket.

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

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

ParametryParameters

rSocketAddressrSocketAddress
Odwołanie do CString obiektu, który odbiera adres IP o liczbie kropek.Reference to a CString object that receives a dotted number IP address.

rSocketPortrSocketPort
Odwołanie do typu UINT, który przechowuje port.Reference to a UINT that stores a port.

lpSockAddrlpSockAddr
Wskaźnik do struktury SOCKADDR , który odbiera adres gniazda.A pointer to a SOCKADDR structure that receives the address of the socket.

lpSockAddrLenlpSockAddrLen
Wskaźnik do długości adresu w lpSockAddr w bajtach.A pointer to the length of the address in lpSockAddr in bytes.

Wartość zwracanaReturn Value

Niezerowe, jeśli funkcja się powiedzie; w przeciwnym razie 0, a określony kod błędu można pobrać, wywołując wartość GetLastError.Nonzero if the function is successful; otherwise 0, and a specific error code can be retrieved by calling GetLastError. Następujące błędy dotyczą tej funkcji składowej:The following errors apply to this member function:

  • WSANOTINITIALISED pomyślne AfxSocketInit musi wystąpić przed użyciem tego interfejsu API.WSANOTINITIALISED A successful AfxSocketInit must occur before using this API.

  • WSAENETDOWN implementacja Windows Sockets wykryła, że podsystem sieci nie powiódł się.WSAENETDOWN The Windows Sockets implementation detected that the network subsystem failed.

  • WSAEFAULT argument lpSockAddrLen nie jest wystarczająco duży.WSAEFAULT The lpSockAddrLen argument is not large enough.

  • WSAEINPROGRESS blokuje operację blokowania Windows Sockets.WSAEINPROGRESS A blocking Windows Sockets operation is in progress.

  • WSAENOTSOCK deskryptor nie jest gniazdem.WSAENOTSOCK The descriptor is not a socket.

  • WSAEINVAL gniazdo nie zostało powiązane z adresem z Bind .WSAEINVAL The socket has not been bound to an address with Bind.

UwagiRemarks

To wywołanie jest szczególnie przydatne, gdy Connect Wywołanie zostało wykonane bez wykonywania pierwszej operacji Bind . to wywołanie zapewnia tylko metodę określania skojarzenia lokalnego, które zostało ustawione przez system.This call is especially useful when a Connect call has been made without doing a Bind first; this call provides the only means by which you can determine the local association which has been set by the system.

Aby obsłużyć adresy IPv6, użyj CAsyncSocket:: GetSockNameExTo handle IPv6 addresses, use CAsyncSocket::GetSockNameEx

CAsyncSocket:: GetSockNameExCAsyncSocket::GetSockNameEx

Wywołaj tę funkcję elementu członkowskiego, aby uzyskać lokalną nazwę gniazda (obsługuje adresy IPv6).Call this member function to get the local name for a socket (handles IPv6 addresses).

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

ParametryParameters

rSocketAddressrSocketAddress
Odwołanie do CString obiektu, który odbiera adres IP o liczbie kropek.Reference to a CString object that receives a dotted number IP address.

rSocketPortrSocketPort
Odwołanie do typu UINT, który przechowuje port.Reference to a UINT that stores a port.

Wartość zwracanaReturn Value

Niezerowe, jeśli funkcja się powiedzie; w przeciwnym razie 0, a określony kod błędu można pobrać, wywołując wartość GetLastError.Nonzero if the function is successful; otherwise 0, and a specific error code can be retrieved by calling GetLastError. Następujące błędy dotyczą tej funkcji składowej:The following errors apply to this member function:

  • WSANOTINITIALISED pomyślne AfxSocketInit musi wystąpić przed użyciem tego interfejsu API.WSANOTINITIALISED A successful AfxSocketInit must occur before using this API.

  • WSAENETDOWN implementacja Windows Sockets wykryła, że podsystem sieci nie powiódł się.WSAENETDOWN The Windows Sockets implementation detected that the network subsystem failed.

  • WSAEFAULT argument lpSockAddrLen nie jest wystarczająco duży.WSAEFAULT The lpSockAddrLen argument is not large enough.

  • WSAEINPROGRESS blokuje operację blokowania Windows Sockets.WSAEINPROGRESS A blocking Windows Sockets operation is in progress.

  • WSAENOTSOCK deskryptor nie jest gniazdem.WSAENOTSOCK The descriptor is not a socket.

  • WSAEINVAL gniazdo nie zostało powiązane z adresem z Bind .WSAEINVAL The socket has not been bound to an address with Bind.

UwagiRemarks

To wywołanie jest takie samo jak CAsyncSocket:: GetSockName , z tą różnicą, że obsługuje adresy IPv6 oraz starsze protokoły.This call is the same as CAsyncSocket::GetSockName except that it handles IPv6 addresses as well as older protocols.

To wywołanie jest szczególnie przydatne, gdy Connect Wywołanie zostało wykonane bez wykonywania pierwszej operacji Bind . to wywołanie zapewnia tylko metodę określania skojarzenia lokalnego, które zostało ustawione przez system.This call is especially useful when a Connect call has been made without doing a Bind first; this call provides the only means by which you can determine the local association which has been set by the system.

CAsyncSocket:: GetSockOptCAsyncSocket::GetSockOpt

Wywołaj tę funkcję elementu członkowskiego, aby pobrać opcję gniazda.Call this member function to retrieve a socket option.

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

ParametryParameters

nOptionNamenOptionName
Opcja gniazda, dla której ma zostać pobrana wartość.The socket option for which the value is to be retrieved.

lpOptionValuelpOptionValue
Wskaźnik do buforu, w którym ma zostać zwrócona wartość dla wybranej opcji.A pointer to the buffer in which the value for the requested option is to be returned. Wartość skojarzona z wybraną opcją jest zwracana w buforze lpOptionValue.The value associated with the selected option is returned in the buffer lpOptionValue. Liczba całkowita wskazywana przez lpOptionLen powinna początkowo zawierać rozmiar tego buforu w bajtach; i w przypadku powrotu zostanie ustawiony rozmiar zwracanej wartości.The integer pointed to by lpOptionLen should originally contain the size of this buffer in bytes; and on return, it will be set to the size of the value returned. W przypadku SO_LINGER będzie to rozmiar LINGER struktury; w przypadku wszystkich innych opcji będzie to rozmiar bool lub int , w zależności od opcji.For SO_LINGER, this will be the size of a LINGER structure; for all other options it will be the size of a BOOL or an int, depending on the option. Zapoznaj się z listą opcji i ich rozmiarów w sekcji uwagi.See the list of options and their sizes in the Remarks section.

lpOptionLenlpOptionLen
Wskaźnik do rozmiaru buforu lpOptionValue w bajtach.A pointer to the size of the lpOptionValue buffer in bytes.

nLevelnLevel
Poziom, na którym jest zdefiniowana opcja; Jedyne obsługiwane poziomy to SOL_SOCKET i IPPROTO_TCP.The level at which the option is defined; the only supported levels are SOL_SOCKET and IPPROTO_TCP.

Wartość zwracanaReturn Value

Niezerowe, jeśli funkcja się powiedzie; w przeciwnym razie 0, a określony kod błędu można pobrać, wywołując wartość GetLastError.Nonzero if the function is successful; otherwise 0, and a specific error code can be retrieved by calling GetLastError. Jeśli opcja nigdy nie została ustawiona z SetSockOpt , GetSockOpt Funkcja zwraca wartość domyślną dla opcji.If an option was never set with SetSockOpt, then GetSockOpt returns the default value for the option. Następujące błędy dotyczą tej funkcji składowej:The following errors apply to this member function:

  • WSANOTINITIALISED pomyślne AfxSocketInit musi wystąpić przed użyciem tego interfejsu API.WSANOTINITIALISED A successful AfxSocketInit must occur before using this API.

  • WSAENETDOWN implementacja Windows Sockets wykryła, że podsystem sieci nie powiódł się.WSAENETDOWN The Windows Sockets implementation detected that the network subsystem failed.

  • WSAEFAULT argument lpOptionLen był nieprawidłowy.WSAEFAULT The lpOptionLen argument was invalid.

  • WSAEINPROGRESS blokuje operację blokowania Windows Sockets.WSAEINPROGRESS A blocking Windows Sockets operation is in progress.

  • WSAENOPROTOOPT opcja jest nieznana lub nieobsługiwana.WSAENOPROTOOPT The option is unknown or unsupported. W szczególności SO_BROADCAST nie jest obsługiwana w gniazdach typu SOCK_STREAM, podczas gdy SO_ACCEPTCONN, SO_DONTLINGER, SO_KEEPALIVE, SO_LINGER i SO_OOBINLINE nie są obsługiwane w gniazdach typu SOCK_DGRAM.In particular, SO_BROADCAST is not supported on sockets of type SOCK_STREAM, while SO_ACCEPTCONN, SO_DONTLINGER, SO_KEEPALIVE, SO_LINGER, and SO_OOBINLINE are not supported on sockets of type SOCK_DGRAM.

  • WSAENOTSOCK deskryptor nie jest gniazdem.WSAENOTSOCK The descriptor is not a socket.

UwagiRemarks

GetSockOpt Pobiera bieżącą wartość dla opcji gniazda skojarzonej z gniazdem dowolnego typu, w dowolnym stanie i zapisuje wynik w lpOptionValue.GetSockOpt retrieves the current value for a socket option associated with a socket of any type, in any state, and stores the result in lpOptionValue. Opcje mają wpływ na operacje gniazda, takie jak routing pakietów, transfer danych poza pasmem itd.Options affect socket operations, such as the routing of packets, out-of-band data transfer, and so on.

W programie są obsługiwane następujące opcje GetSockOpt .The following options are supported for GetSockOpt. Typ identyfikuje typ danych rozmieszczonych przez lpOptionValue.The Type identifies the type of data addressed by lpOptionValue. Opcja TCP_NODELAY używa poziomu IPPROTO_TCP; wszystkie inne opcje używają SOL_SOCKET poziomu.The TCP_NODELAY option uses level IPPROTO_TCP; all other options use level SOL_SOCKET.

WartośćValue TypType ZnaczenieMeaning
SO_ACCEPTCONNSO_ACCEPTCONN LOGICZNABOOL Gniazdo nasłuchuje.Socket is listening.
SO_BROADCASTSO_BROADCAST LOGICZNABOOL Gniazdo jest skonfigurowane do przesyłania komunikatów emisji.Socket is configured for the transmission of broadcast messages.
SO_DEBUGSO_DEBUG LOGICZNABOOL Debugowanie jest włączone.Debugging is enabled.
SO_DONTLINGERSO_DONTLINGER LOGICZNABOOL W przypadku opcji true opcja SO_LINGER jest wyłączona.If true, the SO_LINGER option is disabled.
SO_DONTROUTESO_DONTROUTE LOGICZNABOOL Routing jest wyłączony.Routing is disabled.
SO_ERRORSO_ERROR int Pobierz stan błędu i usuń zaznaczenie.Retrieve error status and clear.
SO_KEEPALIVESO_KEEPALIVE LOGICZNABOOL Trwa wysyłanie aktywności.Keep-alives are being sent.
SO_LINGERSO_LINGER struct LINGER Zwraca bieżące opcje pokutujące.Returns the current linger options.
SO_OOBINLINESO_OOBINLINE LOGICZNABOOL Dane poza pasmem są odbierane w normalnym strumieniu danych.Out-of-band data is being received in the normal data stream.
SO_RCVBUFSO_RCVBUF intint Rozmiar buforu dla odbieranych.Buffer size for receives.
SO_REUSEADDRSO_REUSEADDR LOGICZNABOOL Gniazdo może być powiązane z adresem, który jest już używany.The socket can be bound to an address which is already in use.
SO_SNDBUFSO_SNDBUF int Rozmiar buforu do wysłania.Buffer size for sends.
SO_TYPESO_TYPE int Typ gniazda (na przykład SOCK_STREAM).The type of the socket (for example, SOCK_STREAM).
TCP_NODELAYTCP_NODELAY LOGICZNABOOL Wyłącza algorytm nagle dla łączenia wysyłania.Disables the Nagle algorithm for send coalescing.

Opcje rozpowszechniania oprogramowania Berkeley (BSD) nie są obsługiwane w przypadku programu GetSockOpt :Berkeley Software Distribution (BSD) options not supported for GetSockOpt are:

WartośćValue TypType ZnaczenieMeaning
SO_RCVLOWATSO_RCVLOWAT int Odbierz znak wodny.Receive low water mark.
SO_RCVTIMEOSO_RCVTIMEO int Limit czasu odbierania.Receive timeout.
SO_SNDLOWATSO_SNDLOWAT int Wyślij znak wodny.Send low water mark.
SO_SNDTIMEOSO_SNDTIMEO int Limit czasu wysyłania.Send timeout.
IP_OPTIONSIP_OPTIONS Pobierz opcje w nagłówku IP.Get options in IP header.
TCP_MAXSEGTCP_MAXSEG int Pobierz maksymalny rozmiar segmentu TCP.Get TCP maximum segment size.

Wywołanie GetSockOpt z nieobsługiwaną opcją spowoduje zwrócenie kodu błędu WSAENOPROTOOPT z GetLastError .Calling GetSockOpt with an unsupported option will result in an error code of WSAENOPROTOOPT being returned from GetLastError.

CAsyncSocket:: IOCtlCAsyncSocket::IOCtl

Wywołaj tę funkcję elementu członkowskiego, aby kontrolować tryb gniazda.Call this member function to control the mode of a socket.

BOOL IOCtl(
    long lCommand,
    DWORD* lpArgument);

ParametryParameters

lCommandlCommand
Polecenie do wykonania w gnieździe.The command to perform on the socket.

lpArgumentlpArgument
Wskaźnik do parametru dla lCommand.A pointer to a parameter for lCommand.

Wartość zwracanaReturn Value

Niezerowe, jeśli funkcja się powiedzie; w przeciwnym razie 0, a określony kod błędu można pobrać, wywołując wartość GetLastError.Nonzero if the function is successful; otherwise 0, and a specific error code can be retrieved by calling GetLastError. Następujące błędy dotyczą tej funkcji składowej:The following errors apply to this member function:

  • WSANOTINITIALISED pomyślne AfxSocketInit musi wystąpić przed użyciem tego interfejsu API.WSANOTINITIALISED A successful AfxSocketInit must occur before using this API.

  • WSAENETDOWN implementacja Windows Sockets wykryła, że podsystem sieci nie powiódł się.WSAENETDOWN The Windows Sockets implementation detected that the network subsystem failed.

  • WSAEINVAL lCommand nie jest prawidłowym poleceniem lub lpArgument nie jest akceptowalnym parametrem dla lCommand lub polecenie nie ma zastosowania do typu dostarczonego gniazda.WSAEINVAL lCommand is not a valid command, or lpArgument is not an acceptable parameter for lCommand, or the command is not applicable to the type of socket supplied.

  • WSAEINPROGRESS blokuje operację blokowania Windows Sockets.WSAEINPROGRESS A blocking Windows Sockets operation is in progress.

  • WSAENOTSOCK deskryptor nie jest gniazdem.WSAENOTSOCK The descriptor is not a socket.

UwagiRemarks

Tej procedury można użyć w dowolnym gnieździe w dowolnym stanie.This routine can be used on any socket in any state. Służy do pobierania lub pobierania parametrów operacyjnych skojarzonych z gniazdem, niezależnie od podsystemu protokołu i komunikacji.It is used to get or retrieve operating parameters associated with the socket, independent of the protocol and communications subsystem. Obsługiwane są następujące polecenia:The following commands are supported:

  • FIONBIO włączać lub wyłączać tryb nieblokowany w gnieździe.FIONBIO Enable or disable nonblocking mode on the socket. Parametr lpArgument wskazuje DWORD , że jest różna od zera, jeśli tryb nieblokowany ma być włączony i zero, jeśli ma być wyłączone.The lpArgument parameter points at a DWORD, which is nonzero if nonblocking mode is to be enabled and zero if it is to be disabled. Jeśli AsyncSelect został wystawiony w gnieździe, każda próba użycia IOCtl w celu ustawienia gniazda z powrotem do trybu blokowania zakończy się niepowodzeniem z WSAEINVAL.If AsyncSelect has been issued on a socket, then any attempt to use IOCtl to set the socket back to blocking mode will fail with WSAEINVAL. Aby ustawić gniazdo z powrotem do trybu blokowania i zapobiec wystąpieniu błędu WSAEINVAL, aplikacja musi zostać najpierw wyłączona AsyncSelect przez wywołanie AsyncSelect z parametrem Levent równym 0, a następnie Wywołaj metodę IOCtl .To set the socket back to blocking mode and prevent the WSAEINVAL error, an application must first disable AsyncSelect by calling AsyncSelect with the lEvent parameter equal to 0, then call IOCtl.

  • FIONREAD określić maksymalną liczbę bajtów, które mogą być odczytane przy użyciu jednego Receive wywołania z tego gniazda.FIONREAD Determine the maximum number of bytes that can be read with one Receive call from this socket. Parametr lpArgument wskazuje, DWORD w którym jest IOCtl przechowywany wynik.The lpArgument parameter points at a DWORD in which IOCtl stores the result. Jeśli to gniazdo jest typu SOCK_STREAM, FIONREAD zwraca łączną ilość danych, które mogą być odczytywane w jednym Receive ; jest to zwykle taka sama jak całkowita ilość danych umieszczonych w kolejce w gnieździe.If this socket is of type SOCK_STREAM, FIONREAD returns the total amount of data which can be read in a single Receive; this is normally the same as the total amount of data queued on the socket. Jeśli to gniazdo jest typu SOCK_DGRAM, FIONREAD zwraca rozmiar pierwszego datagramu w kolejce w gnieździe.If this socket is of type SOCK_DGRAM, FIONREAD returns the size of the first datagram queued on the socket.

  • SIOCATMARK określić, czy wszystkie dane poza pasmem zostały odczytane.SIOCATMARK Determine whether all out-of-band data has been read. Dotyczy to tylko gniazda typu SOCK_STREAM, który został skonfigurowany do odbierania danych poza pasmem (SO_OOBINLINE).This applies only to a socket of type SOCK_STREAM which has been configured for in-line reception of any out-of-band data ( SO_OOBINLINE). Jeśli żadne dane poza pasmem oczekują na odczytanie, operacja zwróci wartość różną od zera.If no out-of-band data is waiting to be read, the operation returns nonzero. W przeciwnym razie zwraca wartość 0, a następny Receive lub ReceiveFrom wykonany w gnieździe spowoduje pobranie niektórych lub wszystkich danych poprzedzających "markę". aplikacja powinna użyć operacji SIOCATMARK, aby określić, czy dane pozostaną niezmienione.Otherwise it returns 0, and the next Receive or ReceiveFrom performed on the socket will retrieve some or all of the data preceding the "mark"; the application should use the SIOCATMARK operation to determine whether any data remains. Jeśli istnieją normalne dane poprzedzające "pilne" (poza pasmem), zostaną one odebrane w podanej kolejności.If there is any normal data preceding the "urgent" (out-of-band) data, it will be received in order. (Należy zauważyć, że Receive lub ReceiveFrom nigdy nie będą mieszać poza pasmem i zwykłych danych w tym samym wywołaniu). Parametr lpArgument wskazuje, DWORD w którym jest IOCtl przechowywany wynik.(Note that a Receive or ReceiveFrom will never mix out-of-band and normal data in the same call.) The lpArgument parameter points at a DWORD in which IOCtl stores the result.

Ta funkcja jest podzbiorem ioctl() używanym w usłudze Berkeley Sockets.This function is a subset of ioctl() as used in Berkeley sockets. W szczególności nie ma polecenia odpowiadającego FIOASYNC, podczas gdy SIOCATMARK jest jedynym obsługiwanym poleceniem na poziomie gniazda.In particular, there is no command which is equivalent to FIOASYNC, while SIOCATMARK is the only socket-level command which is supported.

CAsyncSocket:: ListenCAsyncSocket::Listen

Wywołaj tę funkcję elementu członkowskiego, aby nasłuchiwać żądań połączeń przychodzących.Call this member function to listen for incoming connection requests.

BOOL Listen(int nConnectionBacklog = 5);

ParametryParameters

nConnectionBacklognConnectionBacklog
Maksymalna długość, do której można zwiększyć kolejkę oczekujących połączeń.The maximum length to which the queue of pending connections can grow. Prawidłowy zakres to od 1 do 5.Valid range is from 1 to 5.

Wartość zwracanaReturn Value

Niezerowe, jeśli funkcja się powiedzie; w przeciwnym razie 0, a określony kod błędu można pobrać, wywołując wartość GetLastError.Nonzero if the function is successful; otherwise 0, and a specific error code can be retrieved by calling GetLastError. Następujące błędy dotyczą tej funkcji składowej:The following errors apply to this member function:

  • WSANOTINITIALISED pomyślne AfxSocketInit musi wystąpić przed użyciem tego interfejsu API.WSANOTINITIALISED A successful AfxSocketInit must occur before using this API.

  • WSAENETDOWN implementacja Windows Sockets wykryła, że podsystem sieci nie powiódł się.WSAENETDOWN The Windows Sockets implementation detected that the network subsystem failed.

  • WSAEADDRINUSE podjęto próbę nasłuchiwania na używanym adresie.WSAEADDRINUSE An attempt has been made to listen on an address in use.

  • WSAEINPROGRESS blokuje operację blokowania Windows Sockets.WSAEINPROGRESS A blocking Windows Sockets operation is in progress.

  • WSAEINVAL gniazdo nie zostało powiązane z Bind lub jest już połączone.WSAEINVAL The socket has not been bound with Bind or is already connected.

  • WSAEISCONN gniazdo jest już połączone.WSAEISCONN The socket is already connected.

  • WSAEMFILE nie ma więcej dostępnych deskryptorów plików.WSAEMFILE No more file descriptors are available.

  • WSAENOBUFS Brak dostępnego miejsca w buforze.WSAENOBUFS No buffer space is available.

  • WSAENOTSOCK deskryptor nie jest gniazdem.WSAENOTSOCK The descriptor is not a socket.

  • WSAEOPNOTSUPP gniazdo, do którego istnieje odwołanie, nie jest typu, który obsługuje Listen operację.WSAEOPNOTSUPP The referenced socket is not of a type that supports the Listen operation.

UwagiRemarks

Aby akceptować połączenia, gniazdo jest tworzone w pierwszej kolejności przy użyciu Create , a następnie w przypadku, Listen gdy połączenia są akceptowane przy użyciu Accept .To accept connections, the socket is first created with Create, a backlog for incoming connections is specified with Listen, and then the connections are accepted with Accept. Listen dotyczy tylko gniazd, które obsługują połączenia, czyli te, które są typu SOCK_STREAM.Listen applies only to sockets that support connections, that is, those of type SOCK_STREAM. To gniazdo jest umieszczane w trybie pasywnym, w którym połączenia przychodzące są potwierdzane i umieszczane w kolejce oczekujące na akceptację przez proces.This socket is put into "passive" mode where incoming connections are acknowledged and queued pending acceptance by the process.

Ta funkcja jest zwykle używana przez serwery (lub dowolną aplikację, która chce akceptować połączenia), która może mieć jednocześnie więcej niż jedno żądanie połączenia: Jeśli żądanie połączenia dociera do kolejki, klient otrzyma błąd z oznaczeniem WSAECONNREFUSED.This function is typically used by servers (or any application that wants to accept connections) that could have more than one connection request at a time: if a connection request arrives with the queue full, the client will receive an error with an indication of WSAECONNREFUSED.

Listen próbuje nadal działać racjonalnie, gdy nie ma dostępnych portów (deskryptorów).Listen attempts to continue to function rationally when there are no available ports (descriptors). Spowoduje to zaakceptowanie połączeń do momentu opróżnienia kolejki.It will accept connections until the queue is emptied. Jeśli porty staną się dostępne, późniejsze wywołanie Listen lub Accept przepełnienie kolejki do bieżącej lub najnowszej zaległości, o ile jest to możliwe, i wznowienie nasłuchiwania połączeń przychodzących.If ports become available, a later call to Listen or Accept will refill the queue to the current or most recent "backlog," if possible, and resume listening for incoming connections.

CAsyncSocket:: m_hSocketCAsyncSocket::m_hSocket

Zawiera uchwyt gniazda dla gniazda hermetyzowanego przez ten CAsyncSocket obiekt.Contains the SOCKET handle for the socket encapsulated by this CAsyncSocket object.

SOCKET m_hSocket;

CAsyncSocket:: OnAcceptCAsyncSocket::OnAccept

Wywoływane przez platformę w celu powiadomienia gniazda nasłuchiwania, które może akceptować oczekujące żądania połączenia przez wywołanie funkcji Zaakceptuj element członkowski.Called by the framework to notify a listening socket that it can accept pending connection requests by calling the Accept member function.

virtual void OnAccept(int nErrorCode);

ParametryParameters

nErrorCodenErrorCode
Ostatni błąd w gnieździe.The most recent error on a socket. Następujące kody błędów dotyczą OnAccept funkcji składowej:The following error codes applies to the OnAccept member function:

  • 0 funkcja została wykonana pomyślnie.0 The function executed successfully.

  • WSAENETDOWN implementacja Windows Sockets wykryła, że podsystem sieci nie powiódł się.WSAENETDOWN The Windows Sockets implementation detected that the network subsystem failed.

UwagiRemarks

Aby uzyskać więcej informacji, zobacz Windows Sockets: powiadomienia gniazda.For more information, see Windows Sockets: Socket Notifications.

CAsyncSocket:: OnCloseCAsyncSocket::OnClose

Wywoływane przez platformę w celu powiadomienia tego gniazda o zamknięciu połączonego gniazda przez ten proces.Called by the framework to notify this socket that the connected socket is closed by its process.

virtual void OnClose(int nErrorCode);

ParametryParameters

nErrorCodenErrorCode
Ostatni błąd w gnieździe.The most recent error on a socket. Następujące kody błędów mają zastosowanie do OnClose funkcji składowej:The following error codes apply to the OnClose member function:

  • 0 funkcja została wykonana pomyślnie.0 The function executed successfully.

  • WSAENETDOWN implementacja Windows Sockets wykryła, że podsystem sieci nie powiódł się.WSAENETDOWN The Windows Sockets implementation detected that the network subsystem failed.

  • WSAECONNRESET połączenie zostało zresetowane przez stronę zdalną.WSAECONNRESET The connection was reset by the remote side.

  • WSAECONNABORTED połączenie zostało przerwane z powodu przekroczenia limitu czasu lub innego błędu.WSAECONNABORTED The connection was aborted due to timeout or other failure.

UwagiRemarks

Aby uzyskać więcej informacji, zobacz Windows Sockets: powiadomienia gniazda.For more information, see Windows Sockets: Socket Notifications.

CAsyncSocket:: OnConnectCAsyncSocket::OnConnect

Wywoływane przez platformę, by powiadomić to gniazdo łączące, że jego próba połączenia została zakończona, czy błąd wystąpił pomyślnie, czy z powodu błędu.Called by the framework to notify this connecting socket that its connection attempt is completed, whether successfully or in error.

virtual void OnConnect(int nErrorCode);

ParametryParameters

nErrorCodenErrorCode
Ostatni błąd w gnieździe.The most recent error on a socket. Następujące kody błędów mają zastosowanie do OnConnect funkcji składowej:The following error codes apply to the OnConnect member function:

  • 0 funkcja została wykonana pomyślnie.0 The function executed successfully.

  • WSAEADDRINUSE określony adres jest już używany.WSAEADDRINUSE The specified address is already in use.

  • WSAEADDRNOTAVAIL określony adres nie jest dostępny na komputerze lokalnym.WSAEADDRNOTAVAIL The specified address is not available from the local machine.

  • Adresów WSAEAFNOSUPPORT w określonej rodzinie nie można używać w tym gnieździe.WSAEAFNOSUPPORT Addresses in the specified family cannot be used with this socket.

  • WSAECONNREFUSED próba nawiązania połączenia została wymuszona.WSAECONNREFUSED The attempt to connect was forcefully rejected.

  • WSAEDESTADDRREQ jest wymagany adres docelowy.WSAEDESTADDRREQ A destination address is required.

  • WSAEFAULT argument lpSockAddrLen jest niepoprawny.WSAEFAULT The lpSockAddrLen argument is incorrect.

  • WSAEINVAL gniazdo jest już powiązane z adresem.WSAEINVAL The socket is already bound to an address.

  • WSAEISCONN gniazdo jest już połączone.WSAEISCONN The socket is already connected.

  • WSAEMFILE nie ma więcej dostępnych deskryptorów plików.WSAEMFILE No more file descriptors are available.

  • WSAENETUNREACH w tej chwili nie można nawiązać połączenia z siecią.WSAENETUNREACH The network cannot be reached from this host at this time.

  • WSAENOBUFS Brak dostępnego miejsca w buforze.WSAENOBUFS No buffer space is available. Nie można nawiązać połączenia z gniazdem.The socket cannot be connected.

  • WSAENOTCONN gniazdo nie jest połączone.WSAENOTCONN The socket is not connected.

  • WSAENOTSOCK deskryptora to plik, a nie gniazdo.WSAENOTSOCK The descriptor is a file, not a socket.

  • WSAETIMEDOUT próba nawiązania połączenia bez nawiązywania połączenia.WSAETIMEDOUT The attempt to connect timed out without establishing a connection.

UwagiRemarks

Uwaga

W CSocket OnConnect Funkcja powiadomień nigdy nie jest wywoływana.In CSocket, the OnConnect notification function is never called. W przypadku połączeń można po prostu wywołać Connect , co spowoduje zwrócenie po zakończeniu połączenia (pomyślnie lub w błąd).For connections, you simply call Connect, which will return when the connection is completed (either successfully or in error). Sposób obsługi powiadomień o połączeniach to szczegóły implementacji MFC.How connection notifications are handled is an MFC implementation detail.

Aby uzyskać więcej informacji, zobacz Windows Sockets: powiadomienia gniazda.For more information, see Windows Sockets: Socket Notifications.

PrzykładExample

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:: OnOutOfBandDataCAsyncSocket::OnOutOfBandData

Wywoływane przez platformę, by powiadomić gniazdo odbiorcze, że wysłano dane poza pasmem.Called by the framework to notify the receiving socket that the sending socket has out-of-band data to send.

virtual void OnOutOfBandData(int nErrorCode);

ParametryParameters

nErrorCodenErrorCode
Ostatni błąd w gnieździe.The most recent error on a socket. Następujące kody błędów mają zastosowanie do OnOutOfBandData funkcji składowej:The following error codes apply to the OnOutOfBandData member function:

  • 0 funkcja została wykonana pomyślnie.0 The function executed successfully.

  • WSAENETDOWN implementacja Windows Sockets wykryła, że podsystem sieci nie powiódł się.WSAENETDOWN The Windows Sockets implementation detected that the network subsystem failed.

UwagiRemarks

Dane poza pasmem są logicznie niezależnym kanałem skojarzonym z każdą parą podłączonych gniazd typu SOCK_STREAM.Out-of-band data is a logically independent channel that is associated with each pair of connected sockets of type SOCK_STREAM. Kanał jest zazwyczaj używany do wysyłania pilnych danych.The channel is generally used to send urgent data.

MFC obsługuje dane poza pasmem, ale CAsyncSocket nie jest odradzane korzystanie z nich przez użytkowników klasy.MFC supports out-of-band data, but users of class CAsyncSocket are discouraged from using it. Łatwiejszym sposobem, aby utworzyć drugie gniazdo do przekazywania takich danych.The easier way is to create a second socket for passing such data. Aby uzyskać więcej informacji na temat danych poza pasmem, zobacz Windows Sockets: powiadomienia dotyczące gniazd.For more information about out-of-band data, see Windows Sockets: Socket Notifications.

CAsyncSocket:: OnReceiveCAsyncSocket::OnReceive

Wywoływane przez platformę w celu powiadomienia tego gniazda o danych w buforze, który można pobrać, wywołując Receive funkcję członkowską.Called by the framework to notify this socket that there is data in the buffer that can be retrieved by calling the Receive member function.

virtual void OnReceive(int nErrorCode);

ParametryParameters

nErrorCodenErrorCode
Ostatni błąd w gnieździe.The most recent error on a socket. Następujące kody błędów mają zastosowanie do OnReceive funkcji składowej:The following error codes apply to the OnReceive member function:

  • 0 funkcja została wykonana pomyślnie.0 The function executed successfully.

  • WSAENETDOWN implementacja Windows Sockets wykryła, że podsystem sieci nie powiódł się.WSAENETDOWN The Windows Sockets implementation detected that the network subsystem failed.

UwagiRemarks

Aby uzyskać więcej informacji, zobacz Windows Sockets: powiadomienia gniazda.For more information, see Windows Sockets: Socket Notifications.

PrzykładExample

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:: OnSendCAsyncSocket::OnSend

Wywoływane przez platformę, by powiadomić gniazdo, że może teraz wysyłać dane, wywołując Send funkcję członkowską.Called by the framework to notify the socket that it can now send data by calling the Send member function.

virtual void OnSend(int nErrorCode);

ParametryParameters

nErrorCodenErrorCode
Ostatni błąd w gnieździe.The most recent error on a socket. Następujące kody błędów mają zastosowanie do OnSend funkcji składowej:The following error codes apply to the OnSend member function:

  • 0 funkcja została wykonana pomyślnie.0 The function executed successfully.

  • WSAENETDOWN implementacja Windows Sockets wykryła, że podsystem sieci nie powiódł się.WSAENETDOWN The Windows Sockets implementation detected that the network subsystem failed.

UwagiRemarks

Aby uzyskać więcej informacji, zobacz Windows Sockets: powiadomienia gniazda.For more information, see Windows Sockets: Socket Notifications.

PrzykładExample

// 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 =CAsyncSocket::operator =

Przypisuje nową wartość do CAsyncSocket obiektu.Assigns a new value to a CAsyncSocket object.

void operator=(const CAsyncSocket& rSrc);

ParametryParameters

rSrcrSrc
Odwołanie do istniejącego CAsyncSocket obiektu.A reference to an existing CAsyncSocket object.

UwagiRemarks

Wywołaj tę funkcję, aby skopiować istniejący CAsyncSocket obiekt do innego CAsyncSocket obiektu.Call this function to copy an existing CAsyncSocket object to another CAsyncSocket object.

CAsyncSocket:: operator — gniazdoCAsyncSocket::operator SOCKET

Użyj tego operatora, aby pobrać uchwyt gniazda CAsyncSocket obiektu.Use this operator to retrieve the SOCKET handle of the CAsyncSocket object.

operator SOCKET() const;

Wartość zwracanaReturn Value

Jeśli to się powiedzie, uchwyt obiektu SOCKET; w przeciwnym razie wartość NULL.If successful, the handle of the SOCKET object; otherwise, NULL.

UwagiRemarks

Możesz użyć uchwytu, aby bezpośrednio wywołać interfejsy API systemu Windows.You can use the handle to call Windows APIs directly.

CAsyncSocket:: ReceiveCAsyncSocket::Receive

Wywołaj tę funkcję elementu członkowskiego, aby odbierać dane z gniazda.Call this member function to receive data from a socket.

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

ParametryParameters

lpBuflpBuf
Bufor dla danych przychodzących.A buffer for the incoming data.

nBufLennBufLen
Długość lpBuf w bajtach.The length of lpBuf in bytes.

nFlagsnFlags
Określa sposób, w jaki nawiązywane jest wywołanie.Specifies the way in which the call is made. Semantyka tej funkcji jest określana przez opcje gniazda i parametr nFlags .The semantics of this function are determined by the socket options and the nFlags parameter. Ta ostatnia jest zbudowana przez połączenie następujących wartości z operatorem C++ lub :The latter is constructed by combining any of the following values with the C++ OR operator:

  • MSG_PEEK wgląd w dane przychodzące.MSG_PEEK Peek at the incoming data. Dane są kopiowane do buforu, ale nie są usuwane z kolejki wejściowej.The data is copied into the buffer but is not removed from the input queue.

  • MSG_OOB Przetwarzaj dane poza pasmem.MSG_OOB Process out-of-band data.

Wartość zwracanaReturn Value

Jeśli błąd nie wystąpi, Receive zwraca liczbę odebranych bajtów.If no error occurs, Receive returns the number of bytes received. Jeśli połączenie zostało zamknięte, zwraca wartość 0.If the connection has been closed, it returns 0. W przeciwnym razie zwracana jest wartość SOCKET_ERROR, a określony kod błędu można pobrać, wywołując wartość GetLastError.Otherwise, a value of SOCKET_ERROR is returned, and a specific error code can be retrieved by calling GetLastError. Następujące błędy dotyczą tej funkcji składowej:The following errors apply to this member function:

  • WSANOTINITIALISED pomyślne AfxSocketInit musi wystąpić przed użyciem tego interfejsu API.WSANOTINITIALISED A successful AfxSocketInit must occur before using this API.

  • WSAENETDOWN implementacja Windows Sockets wykryła, że podsystem sieci nie powiódł się.WSAENETDOWN The Windows Sockets implementation detected that the network subsystem failed.

  • WSAENOTCONN gniazdo nie jest połączone.WSAENOTCONN The socket is not connected.

  • WSAEINPROGRESS blokuje operację blokowania Windows Sockets.WSAEINPROGRESS A blocking Windows Sockets operation is in progress.

  • WSAENOTSOCK deskryptor nie jest gniazdem.WSAENOTSOCK The descriptor is not a socket.

  • WSAEOPNOTSUPP MSG_OOB został określony, ale gniazdo nie jest typu SOCK_STREAM.WSAEOPNOTSUPP MSG_OOB was specified, but the socket is not of type SOCK_STREAM.

  • WSAESHUTDOWN gniazdo zostało zamknięte; nie można wywołać Receive w gnieździe po ShutDown wywołaniu z Nhow ustawionym na 0 lub 2.WSAESHUTDOWN The socket has been shut down; it is not possible to call Receive on a socket after ShutDown has been invoked with nHow set to 0 or 2.

  • WSAEWOULDBLOCK gniazdo jest oznaczone jako nieblokowe, a Receive operacja zostałaby zablokowana.WSAEWOULDBLOCK The socket is marked as nonblocking and the Receive operation would block.

  • WSAEMSGSIZE datagram był zbyt duży, aby zmieścił się w określonym buforze i został obcięty.WSAEMSGSIZE The datagram was too large to fit into the specified buffer and was truncated.

  • WSAEINVAL gniazdo nie zostało powiązane z Bind .WSAEINVAL The socket has not been bound with Bind.

  • WSAECONNABORTED obwód wirtualny został przerwany z powodu przekroczenia limitu czasu lub innego błędu.WSAECONNABORTED The virtual circuit was aborted due to timeout or other failure.

  • WSAECONNRESET obwód wirtualny został zresetowany przez stronę zdalną.WSAECONNRESET The virtual circuit was reset by the remote side.

UwagiRemarks

Ta funkcja jest używana dla podłączonych strumieni lub gniazd datasockets i służy do odczytywania danych przychodzących.This function is used for connected stream or datagram sockets and is used to read incoming data.

Dla gniazd typu SOCK_STREAM, zwracana jest ilość informacji, która jest obecnie dostępna do rozmiaru dostarczonego buforu.For sockets of type SOCK_STREAM, as much information as is currently available up to the size of the buffer supplied is returned. Jeśli gniazdo zostało skonfigurowane do odbierania w wierszu danych poza pasmem (opcja gniazda SO_OOBINLINE) i dane poza pasmem są odczytane, zostaną zwrócone tylko dane poza pasmem.If the socket has been configured for in-line reception of out-of-band data (socket option SO_OOBINLINE) and out-of-band data is unread, only out-of-band data will be returned. Aplikacja może użyć IOCtlSIOCATMARK opcji lub OnOutOfBandData , aby określić, czy jeszcze więcej danych poza pasmem ma być odczytywane.The application can use the IOCtlSIOCATMARK option or OnOutOfBandData to determine whether any more out-of-band data remains to be read.

W przypadku gniazd datagramów dane są wyodrębniane z pierwszego zapakowanego datagramu do rozmiaru dostarczonego buforu.For datagram sockets, data is extracted from the first enqueued datagram, up to the size of the buffer supplied. Jeśli datagram jest większy niż podany bufor, bufor jest wypełniany pierwszą częścią datagramu, nadmiarowe dane są tracone i Receive zwraca wartość SOCKET_ERROR z kodem błędu ustawionym na WSAEMSGSIZE.If the datagram is larger than the buffer supplied, the buffer is filled with the first part of the datagram, the excess data is lost, and Receive returns a value of SOCKET_ERROR with the error code set to WSAEMSGSIZE. Jeśli w gnieździe nie są dostępne żadne dane przychodzące, wartość SOCKET_ERROR jest zwracana z kodem błędu ustawionym na WSAEWOULDBLOCK.If no incoming data is available at the socket, a value of SOCKET_ERROR is returned with the error code set to WSAEWOULDBLOCK. Funkcja wywołania zwrotnego OnReceive może służyć do określania, kiedy docierają więcej danych.The OnReceive callback function can be used to determine when more data arrives.

Jeśli gniazdo jest typu SOCK_STREAM i zdalna Strona zamknie połączenie, Receive zostanie zakończona natychmiast po 0 bajtach.If the socket is of type SOCK_STREAM and the remote side has shut down the connection gracefully, a Receive will complete immediately with 0 bytes received. Jeśli połączenie zostało zresetowane, zakończy Receive się niepowodzeniem z powodu błędu WSAECONNRESET.If the connection has been reset, a Receive will fail with the error WSAECONNRESET.

Receive powinna być wywoływana tylko raz dla każdego CAsyncSocket:: OnReceive .Receive should be called only once for each time CAsyncSocket::OnReceive is called.

PrzykładExample

Zobacz przykład dla CAsyncSocket:: OnReceive.See the example for CAsyncSocket::OnReceive.

CAsyncSocket:: ReceiveFromCAsyncSocket::ReceiveFrom

Wywołaj tę funkcję elementu członkowskiego, aby odbierać datagram i przechowywać adres źródłowy w strukturze SOCKADDR lub w rSocketAddress.Call this member function to receive a datagram and store the source address in the SOCKADDR structure or in 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);

ParametryParameters

lpBuflpBuf
Bufor dla danych przychodzących.A buffer for the incoming data.

nBufLennBufLen
Długość lpBuf w bajtach.The length of lpBuf in bytes.

rSocketAddressrSocketAddress
Odwołanie do CString obiektu, który odbiera adres IP o liczbie kropek.Reference to a CString object that receives a dotted number IP address.

rSocketPortrSocketPort
Odwołanie do typu UINT, który przechowuje port.Reference to a UINT that stores a port.

lpSockAddrlpSockAddr
Wskaźnik do struktury SOCKADDR , która przechowuje adres źródłowy po powrocie.A pointer to a SOCKADDR structure that holds the source address upon return.

lpSockAddrLenlpSockAddrLen
Wskaźnik do długości adresu źródłowego w lpSockAddr w bajtach.A pointer to the length of the source address in lpSockAddr in bytes.

nFlagsnFlags
Określa sposób, w jaki nawiązywane jest wywołanie.Specifies the way in which the call is made. Semantyka tej funkcji jest określana przez opcje gniazda i parametr nFlags .The semantics of this function are determined by the socket options and the nFlags parameter. Ta ostatnia jest zbudowana przez połączenie następujących wartości z operatorem C++ lub :The latter is constructed by combining any of the following values with the C++ OR operator:

  • MSG_PEEK wgląd w dane przychodzące.MSG_PEEK Peek at the incoming data. Dane są kopiowane do buforu, ale nie są usuwane z kolejki wejściowej.The data is copied into the buffer but is not removed from the input queue.

  • MSG_OOB Przetwarzaj dane poza pasmem.MSG_OOB Process out-of-band data.

Wartość zwracanaReturn Value

Jeśli błąd nie wystąpi, ReceiveFrom zwraca liczbę odebranych bajtów.If no error occurs, ReceiveFrom returns the number of bytes received. Jeśli połączenie zostało zamknięte, zwraca wartość 0.If the connection has been closed, it returns 0. W przeciwnym razie zwracana jest wartość SOCKET_ERROR, a określony kod błędu może zostać pobrany przez wywołanie GetLastError .Otherwise, a value of SOCKET_ERROR is returned, and a specific error code can be retrieved by calling GetLastError. Następujące błędy dotyczą tej funkcji składowej:The following errors apply to this member function:

  • WSANOTINITIALISED pomyślne AfxSocketInit musi wystąpić przed użyciem tego interfejsu API.WSANOTINITIALISED A successful AfxSocketInit must occur before using this API.

  • WSAENETDOWN implementacja Windows Sockets wykryła, że podsystem sieci nie powiódł się.WSAENETDOWN The Windows Sockets implementation detected that the network subsystem failed.

  • WSAEFAULT argument lpSockAddrLen był nieprawidłowy: bufor lpSockAddr był zbyt mały, aby pomieścić adres elementu równorzędnego.WSAEFAULT The lpSockAddrLen argument was invalid: the lpSockAddr buffer was too small to accommodate the peer address.

  • WSAEINPROGRESS blokuje operację blokowania Windows Sockets.WSAEINPROGRESS A blocking Windows Sockets operation is in progress.

  • WSAEINVAL gniazdo nie zostało powiązane z Bind .WSAEINVAL The socket has not been bound with Bind.

  • WSAENOTCONN gniazdo nie jest połączone (tylko SOCK_STREAM).WSAENOTCONN The socket is not connected ( SOCK_STREAM only).

  • WSAENOTSOCK deskryptor nie jest gniazdem.WSAENOTSOCK The descriptor is not a socket.

  • WSAEOPNOTSUPP MSG_OOB został określony, ale gniazdo nie jest typu SOCK_STREAM.WSAEOPNOTSUPP MSG_OOB was specified, but the socket is not of type SOCK_STREAM.

  • WSAESHUTDOWN gniazdo zostało zamknięte; nie można wywołać ReceiveFrom w gnieździe po ShutDown wywołaniu z Nhow ustawionym na 0 lub 2.WSAESHUTDOWN The socket has been shut down; it is not possible to call ReceiveFrom on a socket after ShutDown has been invoked with nHow set to 0 or 2.

  • WSAEWOULDBLOCK gniazdo jest oznaczone jako nieblokowe, a ReceiveFrom operacja zostałaby zablokowana.WSAEWOULDBLOCK The socket is marked as nonblocking and the ReceiveFrom operation would block.

  • WSAEMSGSIZE datagram był zbyt duży, aby zmieścił się w określonym buforze i został obcięty.WSAEMSGSIZE The datagram was too large to fit into the specified buffer and was truncated.

  • WSAECONNABORTED obwód wirtualny został przerwany z powodu przekroczenia limitu czasu lub innego błędu.WSAECONNABORTED The virtual circuit was aborted due to timeout or other failure.

  • WSAECONNRESET obwód wirtualny został zresetowany przez stronę zdalną.WSAECONNRESET The virtual circuit was reset by the remote side.

UwagiRemarks

Ta funkcja służy do odczytywania danych przychodzących na (prawdopodobnie podłączonym) gnieździe i przechwytywania adresu, z którego dane zostały wysłane.This function is used to read incoming data on a (possibly connected) socket and capture the address from which the data was sent.

Aby obsłużyć adresy IPv6, należy użyć CAsyncSocket:: ReceiveFromEx.To handle IPv6 addresses, use CAsyncSocket::ReceiveFromEx.

Dla gniazd typu SOCK_STREAM, zwracana jest ilość informacji, która jest obecnie dostępna do rozmiaru dostarczonego buforu.For sockets of type SOCK_STREAM, as much information as is currently available up to the size of the buffer supplied is returned. Jeśli gniazdo zostało skonfigurowane do odbierania w wierszu danych poza pasmem (opcja gniazda SO_OOBINLINE) i dane poza pasmem są odczytane, zostaną zwrócone tylko dane poza pasmem.If the socket has been configured for in-line reception of out-of-band data (socket option SO_OOBINLINE) and out-of-band data is unread, only out-of-band data will be returned. Aplikacja może użyć IOCtlSIOCATMARK opcji lub, OnOutOfBandData Aby określić, czy więcej danych poza pasmem ma być odczytywane.The application can use the IOCtlSIOCATMARK option or OnOutOfBandData to determine whether any more out-of-band data remains to be read. Parametry lpSockAddr i lpSockAddrLen są ignorowane dla SOCK_STREAM Sockets.The lpSockAddr and lpSockAddrLen parameters are ignored for SOCK_STREAM sockets.

W przypadku gniazd datagramów dane są wyodrębniane z pierwszego zapakowanego datagramu do rozmiaru dostarczonego buforu.For datagram sockets, data is extracted from the first enqueued datagram, up to the size of the buffer supplied. Jeśli datagram jest większy niż podany bufor, bufor jest wypełniany pierwszą częścią komunikatu, nadmiarowe dane są tracone i ReceiveFrom zwraca wartość SOCKET_ERROR z kodem błędu ustawionym na WSAEMSGSIZE.If the datagram is larger than the buffer supplied, the buffer is filled with the first part of the message, the excess data is lost, and ReceiveFrom returns a value of SOCKET_ERROR with the error code set to WSAEMSGSIZE.

Jeśli lpSockAddr jest różna od zera, a gniazdo jest typu SOCK_DGRAM, adres sieciowy gniazda, które wysłał dane, jest kopiowany do odpowiedniej struktury SOCKADDR .If lpSockAddr is nonzero, and the socket is of type SOCK_DGRAM, the network address of the socket which sent the data is copied to the corresponding SOCKADDR structure. Wartość wskazywana przez lpSockAddrLen jest inicjowana do rozmiaru tej struktury i jest modyfikowana przy powrocie, aby wskazać rzeczywisty rozmiar przechowywanych tam adresów.The value pointed to by lpSockAddrLen is initialized to the size of this structure, and is modified on return to indicate the actual size of the address stored there. Jeśli w gnieździe nie są dostępne żadne dane przychodzące, ReceiveFrom wywołanie czeka na dostarczenie danych, chyba że gniazdo nie jest blokowane.If no incoming data is available at the socket, the ReceiveFrom call waits for data to arrive unless the socket is nonblocking. W takim przypadku wartość SOCKET_ERROR jest zwracana z kodem błędu ustawionym na WSAEWOULDBLOCK.In this case, a value of SOCKET_ERROR is returned with the error code set to WSAEWOULDBLOCK. OnReceiveWywołanie zwrotne może służyć do określania, kiedy docierają więcej danych.The OnReceive callback can be used to determine when more data arrives.

Jeśli gniazdo jest typu SOCK_STREAM i zdalna Strona zamknie połączenie, ReceiveFrom zostanie zakończona natychmiast po 0 bajtach.If the socket is of type SOCK_STREAM and the remote side has shut down the connection gracefully, a ReceiveFrom will complete immediately with 0 bytes received.

CAsyncSocket:: ReceiveFromExCAsyncSocket::ReceiveFromEx

Wywołaj tę funkcję elementu członkowskiego, aby odbierać datagram i przechowywać adres źródłowy w strukturze SOCKADDR lub w rSocketAddress (obsługuje adresy IPv6).Call this member function to receive a datagram and store the source address in the SOCKADDR structure or in rSocketAddress (handles IPv6 addresses).

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

ParametryParameters

lpBuflpBuf
Bufor dla danych przychodzących.A buffer for the incoming data.

nBufLennBufLen
Długość lpBuf w bajtach.The length of lpBuf in bytes.

rSocketAddressrSocketAddress
Odwołanie do CString obiektu, który odbiera adres IP o liczbie kropek.Reference to a CString object that receives a dotted number IP address.

rSocketPortrSocketPort
Odwołanie do typu UINT, który przechowuje port.Reference to a UINT that stores a port.

nFlagsnFlags
Określa sposób, w jaki nawiązywane jest wywołanie.Specifies the way in which the call is made. Semantyka tej funkcji jest określana przez opcje gniazda i parametr nFlags .The semantics of this function are determined by the socket options and the nFlags parameter. Ta ostatnia jest zbudowana przez połączenie następujących wartości z operatorem C++ lub :The latter is constructed by combining any of the following values with the C++ OR operator:

  • MSG_PEEK wgląd w dane przychodzące.MSG_PEEK Peek at the incoming data. Dane są kopiowane do buforu, ale nie są usuwane z kolejki wejściowej.The data is copied into the buffer but is not removed from the input queue.

  • MSG_OOB Przetwarzaj dane poza pasmem.MSG_OOB Process out-of-band data.

Wartość zwracanaReturn Value

Jeśli błąd nie wystąpi, ReceiveFromEx zwraca liczbę odebranych bajtów.If no error occurs, ReceiveFromEx returns the number of bytes received. Jeśli połączenie zostało zamknięte, zwraca wartość 0.If the connection has been closed, it returns 0. W przeciwnym razie zwracana jest wartość SOCKET_ERROR, a określony kod błędu może zostać pobrany przez wywołanie GetLastError .Otherwise, a value of SOCKET_ERROR is returned, and a specific error code can be retrieved by calling GetLastError. Następujące błędy dotyczą tej funkcji składowej:The following errors apply to this member function:

  • WSANOTINITIALISED pomyślne AfxSocketInit musi wystąpić przed użyciem tego interfejsu API.WSANOTINITIALISED A successful AfxSocketInit must occur before using this API.

  • WSAENETDOWN implementacja Windows Sockets wykryła, że podsystem sieci nie powiódł się.WSAENETDOWN The Windows Sockets implementation detected that the network subsystem failed.

  • WSAEFAULT argument lpSockAddrLen był nieprawidłowy: bufor lpSockAddr był zbyt mały, aby pomieścić adres elementu równorzędnego.WSAEFAULT The lpSockAddrLen argument was invalid: the lpSockAddr buffer was too small to accommodate the peer address.

  • WSAEINPROGRESS blokuje operację blokowania Windows Sockets.WSAEINPROGRESS A blocking Windows Sockets operation is in progress.

  • WSAEINVAL gniazdo nie zostało powiązane z Bind .WSAEINVAL The socket has not been bound with Bind.

  • WSAENOTCONN gniazdo nie jest połączone (tylko SOCK_STREAM).WSAENOTCONN The socket is not connected ( SOCK_STREAM only).

  • WSAENOTSOCK deskryptor nie jest gniazdem.WSAENOTSOCK The descriptor is not a socket.

  • WSAEOPNOTSUPP MSG_OOB został określony, ale gniazdo nie jest typu SOCK_STREAM.WSAEOPNOTSUPP MSG_OOB was specified, but the socket is not of type SOCK_STREAM.

  • WSAESHUTDOWN gniazdo zostało zamknięte; nie można wywołać ReceiveFromEx w gnieździe po ShutDown wywołaniu z Nhow ustawionym na 0 lub 2.WSAESHUTDOWN The socket has been shut down; it is not possible to call ReceiveFromEx on a socket after ShutDown has been invoked with nHow set to 0 or 2.

  • WSAEWOULDBLOCK gniazdo jest oznaczone jako nieblokowe, a ReceiveFromEx operacja zostałaby zablokowana.WSAEWOULDBLOCK The socket is marked as nonblocking and the ReceiveFromEx operation would block.

  • WSAEMSGSIZE datagram był zbyt duży, aby zmieścił się w określonym buforze i został obcięty.WSAEMSGSIZE The datagram was too large to fit into the specified buffer and was truncated.

  • WSAECONNABORTED obwód wirtualny został przerwany z powodu przekroczenia limitu czasu lub innego błędu.WSAECONNABORTED The virtual circuit was aborted due to timeout or other failure.

  • WSAECONNRESET obwód wirtualny został zresetowany przez stronę zdalną.WSAECONNRESET The virtual circuit was reset by the remote side.

UwagiRemarks

Ta funkcja służy do odczytywania danych przychodzących na (prawdopodobnie podłączonym) gnieździe i przechwytywania adresu, z którego dane zostały wysłane.This function is used to read incoming data on a (possibly connected) socket and capture the address from which the data was sent.

Ta funkcja jest taka sama jak CAsyncSocket:: ReceiveFrom , z tą różnicą, że obsługuje adresy IPv6 oraz starsze protokoły.This function is the same as CAsyncSocket::ReceiveFrom except that it handles IPv6 addresses as well as older protocols.

Dla gniazd typu SOCK_STREAM, zwracana jest ilość informacji, która jest obecnie dostępna do rozmiaru dostarczonego buforu.For sockets of type SOCK_STREAM, as much information as is currently available up to the size of the buffer supplied is returned. Jeśli gniazdo zostało skonfigurowane do odbierania w wierszu danych poza pasmem (opcja gniazda SO_OOBINLINE) i dane poza pasmem są odczytane, zostaną zwrócone tylko dane poza pasmem.If the socket has been configured for in-line reception of out-of-band data (socket option SO_OOBINLINE) and out-of-band data is unread, only out-of-band data will be returned. Aplikacja może użyć IOCtlSIOCATMARK opcji lub, OnOutOfBandData Aby określić, czy więcej danych poza pasmem ma być odczytywane.The application can use the IOCtlSIOCATMARK option or OnOutOfBandData to determine whether any more out-of-band data remains to be read. Parametry lpSockAddr i lpSockAddrLen są ignorowane dla SOCK_STREAM Sockets.The lpSockAddr and lpSockAddrLen parameters are ignored for SOCK_STREAM sockets.

W przypadku gniazd datagramów dane są wyodrębniane z pierwszego zapakowanego datagramu do rozmiaru dostarczonego buforu.For datagram sockets, data is extracted from the first enqueued datagram, up to the size of the buffer supplied. Jeśli datagram jest większy niż podany bufor, bufor jest wypełniany pierwszą częścią komunikatu, nadmiarowe dane są tracone i ReceiveFromEx zwraca wartość SOCKET_ERROR z kodem błędu ustawionym na WSAEMSGSIZE.If the datagram is larger than the buffer supplied, the buffer is filled with the first part of the message, the excess data is lost, and ReceiveFromEx returns a value of SOCKET_ERROR with the error code set to WSAEMSGSIZE.

Jeśli lpSockAddr jest różna od zera, a gniazdo jest typu SOCK_DGRAM, adres sieciowy gniazda, które wysłał dane, jest kopiowany do odpowiedniej struktury SOCKADDR .If lpSockAddr is nonzero, and the socket is of type SOCK_DGRAM, the network address of the socket which sent the data is copied to the corresponding SOCKADDR structure. Wartość wskazywana przez lpSockAddrLen jest inicjowana do rozmiaru tej struktury i jest modyfikowana przy powrocie, aby wskazać rzeczywisty rozmiar przechowywanych tam adresów.The value pointed to by lpSockAddrLen is initialized to the size of this structure, and is modified on return to indicate the actual size of the address stored there. Jeśli w gnieździe nie są dostępne żadne dane przychodzące, ReceiveFromEx wywołanie czeka na dostarczenie danych, chyba że gniazdo nie jest blokowane.If no incoming data is available at the socket, the ReceiveFromEx call waits for data to arrive unless the socket is nonblocking. W takim przypadku wartość SOCKET_ERROR jest zwracana z kodem błędu ustawionym na WSAEWOULDBLOCK.In this case, a value of SOCKET_ERROR is returned with the error code set to WSAEWOULDBLOCK. OnReceiveWywołanie zwrotne może służyć do określania, kiedy docierają więcej danych.The OnReceive callback can be used to determine when more data arrives.

Jeśli gniazdo jest typu SOCK_STREAM i zdalna Strona zamknie połączenie, ReceiveFromEx zostanie zakończona natychmiast po 0 bajtach.If the socket is of type SOCK_STREAM and the remote side has shut down the connection gracefully, a ReceiveFromEx will complete immediately with 0 bytes received.

CAsyncSocket:: SendCAsyncSocket::Send

Wywołaj tę funkcję elementu członkowskiego, aby wysłać dane w podłączonym gnieździe.Call this member function to send data on a connected socket.

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

ParametryParameters

lpBuflpBuf
Bufor zawierający dane, które mają zostać przesłane.A buffer containing the data to be transmitted.

nBufLennBufLen
Długość danych w lpBuf w bajtach.The length of the data in lpBuf in bytes.

nFlagsnFlags
Określa sposób, w jaki nawiązywane jest wywołanie.Specifies the way in which the call is made. Semantyka tej funkcji jest określana przez opcje gniazda i parametr nFlags .The semantics of this function are determined by the socket options and the nFlags parameter. Ta ostatnia jest zbudowana przez połączenie następujących wartości z operatorem C++ lub :The latter is constructed by combining any of the following values with the C++ OR operator:

  • MSG_DONTROUTE Określa, że dane nie powinny podlegać routingu.MSG_DONTROUTE Specifies that the data should not be subject to routing. Dostawca Windows Sockets może wybrać ignorowanie tej flagi.A Windows Sockets supplier can choose to ignore this flag.

  • MSG_OOB Wysyłaj dane poza pasmem (tylko SOCK_STREAM).MSG_OOB Send out-of-band data (SOCK_STREAM only).

Wartość zwracanaReturn Value

Jeśli błąd nie wystąpi, Send zwraca łączną liczbę wysłanych znaków.If no error occurs, Send returns the total number of characters sent. (Należy pamiętać, że może to być mniejsze niż liczba wskazywana przez nBufLen). W przeciwnym razie zwracana jest wartość SOCKET_ERROR, a określony kod błędu można pobrać, wywołując wartość GetLastError.(Note that this can be less than the number indicated by nBufLen.) Otherwise, a value of SOCKET_ERROR is returned, and a specific error code can be retrieved by calling GetLastError. Następujące błędy dotyczą tej funkcji składowej:The following errors apply to this member function:

  • WSANOTINITIALISED pomyślne AfxSocketInit musi wystąpić przed użyciem tego interfejsu API.WSANOTINITIALISED A successful AfxSocketInit must occur before using this API.

  • WSAENETDOWN implementacja Windows Sockets wykryła, że podsystem sieci nie powiódł się.WSAENETDOWN The Windows Sockets implementation detected that the network subsystem failed.

  • WSAEACCES żądany adres jest adresem emisji, ale nie ustawiono odpowiedniej flagi.WSAEACCES The requested address is a broadcast address, but the appropriate flag was not set.

  • WSAEINPROGRESS blokuje operację blokowania Windows Sockets.WSAEINPROGRESS A blocking Windows Sockets operation is in progress.

  • WSAEFAULT argument lpBuf nie znajduje się w prawidłowej części przestrzeni adresowej użytkownika.WSAEFAULT The lpBuf argument is not in a valid part of the user address space.

  • WSAENETRESET połączenie musi zostać zresetowane, ponieważ jego implementacja została porzucona przez implementację Windows Sockets.WSAENETRESET The connection must be reset because the Windows Sockets implementation dropped it.

  • WSAENOBUFS implementacja Windows Sockets zgłasza zakleszczenie bufora.WSAENOBUFS The Windows Sockets implementation reports a buffer deadlock.

  • WSAENOTCONN gniazdo nie jest połączone.WSAENOTCONN The socket is not connected.

  • WSAENOTSOCK deskryptor nie jest gniazdem.WSAENOTSOCK The descriptor is not a socket.

  • WSAEOPNOTSUPP MSG_OOB został określony, ale gniazdo nie jest typu SOCK_STREAM.WSAEOPNOTSUPP MSG_OOB was specified, but the socket is not of type SOCK_STREAM.

  • WSAESHUTDOWN gniazdo zostało zamknięte; nie można wywołać Send w gnieździe po ShutDown wywołaniu z Nhow ustawionym na 1 lub 2.WSAESHUTDOWN The socket has been shut down; it is not possible to call Send on a socket after ShutDown has been invoked with nHow set to 1 or 2.

  • WSAEWOULDBLOCK gniazdo jest oznaczone jako nieblokowe i żądana operacja zostałaby zablokowana.WSAEWOULDBLOCK The socket is marked as nonblocking and the requested operation would block.

  • WSAEMSGSIZE gniazdo jest typu SOCK_DGRAM, a datagram jest większy niż maksymalny obsługiwany przez implementację Windows Sockets.WSAEMSGSIZE The socket is of type SOCK_DGRAM, and the datagram is larger than the maximum supported by the Windows Sockets implementation.

  • WSAEINVAL gniazdo nie zostało powiązane z Bind .WSAEINVAL The socket has not been bound with Bind.

  • WSAECONNABORTED obwód wirtualny został przerwany z powodu przekroczenia limitu czasu lub innego błędu.WSAECONNABORTED The virtual circuit was aborted due to timeout or other failure.

  • WSAECONNRESET obwód wirtualny został zresetowany przez stronę zdalną.WSAECONNRESET The virtual circuit was reset by the remote side.

UwagiRemarks

Send służy do zapisywania danych wychodzących w podłączonym strumieniu lub gniazdach datagramów.Send is used to write outgoing data on connected stream or datagram sockets. W przypadku gniazd datagramów należy zachować ostrożność, aby nie przekroczyć maksymalnego rozmiaru pakietu IP bazowych podsieci, która jest określona przez iMaxUdpDg element w strukturze WSADATA zwróconej przez AfxSocketInit .For datagram sockets, care must be taken not to exceed the maximum IP packet size of the underlying subnets, which is given by the iMaxUdpDg element in the WSADATA structure returned by AfxSocketInit. Jeśli dane są zbyt długie, aby można je było przekazać niepodzielnie za pośrednictwem bazowego protokołu, błąd WSAEMSGSIZE jest zwracany za pośrednictwem GetLastError i nie są przesyłane żadne dane.If the data is too long to pass atomically through the underlying protocol, the error WSAEMSGSIZE is returned via GetLastError, and no data is transmitted.

Należy pamiętać, że w przypadku gniazda datagramu pomyślne ukończenie programu Send nie wskazuje, że dane zostały dostarczone pomyślnie.Note that for a datagram socket the successful completion of a Send does not indicate that the data was successfully delivered.

W przypadku CAsyncSocket obiektów typu SOCK_STREAM liczba zapisanych bajtów może należeć do przedziału od 1 do długości, w zależności od dostępności bufora na hostach lokalnych i obcych.On CAsyncSocket objects of type SOCK_STREAM, the number of bytes written can be between 1 and the requested length, depending on buffer availability on both the local and foreign hosts.

PrzykładExample

Zobacz przykład dla CAsyncSocket:: OnSend.See the example for CAsyncSocket::OnSend.

CAsyncSocket:: SendToCAsyncSocket::SendTo

Wywołaj tę funkcję elementu członkowskiego, aby wysłać dane do określonego miejsca docelowego.Call this member function to send data to a specific destination.

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

ParametryParameters

lpBuflpBuf
Bufor zawierający dane, które mają zostać przesłane.A buffer containing the data to be transmitted.

nBufLennBufLen
Długość danych w lpBuf w bajtach.The length of the data in lpBuf in bytes.

nHostPortnHostPort
Port identyfikujący aplikację gniazda.The port identifying the socket application.

lpszHostAddresslpszHostAddress
Adres sieciowy gniazda, z którym jest połączony ten obiekt: Nazwa komputera, taka jak "ftp.microsoft.com", lub cyfra kropkowana, taka jak "128.56.22.8".The network address of the socket to which this object is connected: a machine name such as "ftp.microsoft.com," or a dotted number such as "128.56.22.8".

nFlagsnFlags
Określa sposób, w jaki nawiązywane jest wywołanie.Specifies the way in which the call is made. Semantyka tej funkcji jest określana przez opcje gniazda i parametr nFlags .The semantics of this function are determined by the socket options and the nFlags parameter. Ta ostatnia jest zbudowana przez połączenie następujących wartości z operatorem C++ lub :The latter is constructed by combining any of the following values with the C++ OR operator:

  • MSG_DONTROUTE Określa, że dane nie powinny podlegać routingu.MSG_DONTROUTE Specifies that the data should not be subject to routing. Dostawca Windows Sockets może wybrać ignorowanie tej flagi.A Windows Sockets supplier can choose to ignore this flag.

  • MSG_OOB Wysyłaj dane poza pasmem (tylko SOCK_STREAM).MSG_OOB Send out-of-band data (SOCK_STREAM only).

lpSockAddrlpSockAddr
Wskaźnik do struktury SOCKADDR , która zawiera adres gniazda docelowego.A pointer to a SOCKADDR structure that contains the address of the target socket.

nSockAddrLennSockAddrLen
Długość adresu w lpSockAddr w bajtach.The length of the address in lpSockAddr in bytes.

Wartość zwracanaReturn Value

Jeśli błąd nie wystąpi, SendTo zwraca łączną liczbę wysłanych znaków.If no error occurs, SendTo returns the total number of characters sent. (Należy pamiętać, że może to być mniejsze niż liczba wskazywana przez nBufLen). W przeciwnym razie zwracana jest wartość SOCKET_ERROR, a określony kod błędu można pobrać, wywołując wartość GetLastError.(Note that this can be less than the number indicated by nBufLen.) Otherwise, a value of SOCKET_ERROR is returned, and a specific error code can be retrieved by calling GetLastError. Następujące błędy dotyczą tej funkcji składowej:The following errors apply to this member function:

  • WSANOTINITIALISED pomyślne AfxSocketInit musi wystąpić przed użyciem tego interfejsu API.WSANOTINITIALISED A successful AfxSocketInit must occur before using this API.

  • WSAENETDOWN implementacja Windows Sockets wykryła, że podsystem sieci nie powiódł się.WSAENETDOWN The Windows Sockets implementation detected that the network subsystem failed.

  • WSAEACCES żądany adres jest adresem emisji, ale nie ustawiono odpowiedniej flagi.WSAEACCES The requested address is a broadcast address, but the appropriate flag was not set.

  • WSAEINPROGRESS blokuje operację blokowania Windows Sockets.WSAEINPROGRESS A blocking Windows Sockets operation is in progress.

  • WSAEFAULT parametry lpBuf lub lpSockAddr nie są częścią przestrzeni adresowej użytkownika lub argument lpSockAddr jest za mały (mniejszy niż rozmiar struktury SOCKADDR ).WSAEFAULT The lpBuf or lpSockAddr parameters are not part of the user address space, or the lpSockAddr argument is too small (less than the size of a SOCKADDR structure).

  • WSAEINVAL nazwa hosta jest nieprawidłowa.WSAEINVAL The host name is invalid.

  • WSAENETRESET połączenie musi zostać zresetowane, ponieważ jego implementacja została porzucona przez implementację Windows Sockets.WSAENETRESET The connection must be reset because the Windows Sockets implementation dropped it.

  • WSAENOBUFS implementacja Windows Sockets zgłasza zakleszczenie bufora.WSAENOBUFS The Windows Sockets implementation reports a buffer deadlock.

  • WSAENOTCONN gniazdo nie jest połączone (tylko SOCK_STREAM).WSAENOTCONN The socket is not connected (SOCK_STREAM only).

  • WSAENOTSOCK deskryptor nie jest gniazdem.WSAENOTSOCK The descriptor is not a socket.

  • WSAEOPNOTSUPP MSG_OOB został określony, ale gniazdo nie jest typu SOCK_STREAM.WSAEOPNOTSUPP MSG_OOB was specified, but the socket is not of type SOCK_STREAM.

  • WSAESHUTDOWN gniazdo zostało zamknięte; nie można wywołać SendTo w gnieździe po ShutDown wywołaniu z Nhow ustawionym na 1 lub 2.WSAESHUTDOWN The socket has been shut down; it is not possible to call SendTo on a socket after ShutDown has been invoked with nHow set to 1 or 2.

  • WSAEWOULDBLOCK gniazdo jest oznaczone jako nieblokowe i żądana operacja zostałaby zablokowana.WSAEWOULDBLOCK The socket is marked as nonblocking and the requested operation would block.

  • WSAEMSGSIZE gniazdo jest typu SOCK_DGRAM, a datagram jest większy niż maksymalny obsługiwany przez implementację Windows Sockets.WSAEMSGSIZE The socket is of type SOCK_DGRAM, and the datagram is larger than the maximum supported by the Windows Sockets implementation.

  • WSAECONNABORTED obwód wirtualny został przerwany z powodu przekroczenia limitu czasu lub innego błędu.WSAECONNABORTED The virtual circuit was aborted due to timeout or other failure.

  • WSAECONNRESET obwód wirtualny został zresetowany przez stronę zdalną.WSAECONNRESET The virtual circuit was reset by the remote side.

  • WSAEADDRNOTAVAIL określony adres nie jest dostępny na komputerze lokalnym.WSAEADDRNOTAVAIL The specified address is not available from the local machine.

  • Adresów WSAEAFNOSUPPORT w określonej rodzinie nie można używać w tym gnieździe.WSAEAFNOSUPPORT Addresses in the specified family cannot be used with this socket.

  • WSAEDESTADDRREQ jest wymagany adres docelowy.WSAEDESTADDRREQ A destination address is required.

  • WSAENETUNREACH w tej chwili nie można nawiązać połączenia z siecią.WSAENETUNREACH The network cannot be reached from this host at this time.

UwagiRemarks

SendTo jest używany w gnieździe lub gniazdach strumienia i jest używany do zapisywania wychodzących danych z gniazda.SendTo is used on datagram or stream sockets and is used to write outgoing data on a socket. W przypadku gniazd datagramów należy zachować ostrożność, aby nie przekroczyć maksymalnego rozmiaru pakietów IP bazowych podsieci, które są podane przez iMaxUdpDg element w strukturze WSADATA wypełnionej przez AfxSocketInit.For datagram sockets, care must be taken not to exceed the maximum IP packet size of the underlying subnets, which is given by the iMaxUdpDg element in the WSADATA structure filled out by AfxSocketInit. Jeśli dane są zbyt długie, aby przekazać niepodzielność przez podstawowy protokół, zwracany jest błąd WSAEMSGSIZE i nie są przesyłane żadne dane.If the data is too long to pass atomically through the underlying protocol, the error WSAEMSGSIZE is returned, and no data is transmitted.

Należy zauważyć, że pomyślne zakończenie a nie SendTo wskazuje, że dane zostały dostarczone pomyślnie.Note that the successful completion of a SendTo does not indicate that the data was successfully delivered.

SendTo jest używany tylko w gnieździe SOCK_DGRAM do wysyłania datagramu do określonego gniazda identyfikowanego przez parametr lpSockAddr .SendTo is only used on a SOCK_DGRAM socket to send a datagram to a specific socket identified by the lpSockAddr parameter.

Aby wysłać emisję (tylko na SOCK_DGRAM), adres w parametrze lpSockAddr powinien być zbudowany przy użyciu specjalnego adresu IP INADDR_BROADCAST (zdefiniowanego w pliku nagłówkowym Windows Sockets Winsock. H) wraz z zamierzonym numerem portu.To send a broadcast (on a SOCK_DGRAM only), the address in the lpSockAddr parameter should be constructed using the special IP address INADDR_BROADCAST (defined in the Windows Sockets header file WINSOCK.H) together with the intended port number. Lub, jeśli parametr lpszHostAddress ma wartość null, gniazdo jest skonfigurowane do emisji.Or, if the lpszHostAddress parameter is NULL, the socket is configured for broadcast. Zwykle nie jest to zalecane, aby datagram rozgłaszał przekroczenie rozmiaru, w którym może wystąpić fragmentacja, co oznacza, że część danych datagramu (z wyjątkiem nagłówków) nie powinna przekraczać 512 bajtów.It is generally inadvisable for a broadcast datagram to exceed the size at which fragmentation can occur, which implies that the data portion of the datagram (excluding headers) should not exceed 512 bytes.

Aby obsłużyć adresy IPv6, należy użyć CAsyncSocket:: SendToEx.To handle IPv6 addresses, use CAsyncSocket::SendToEx.

CAsyncSocket:: SendToExCAsyncSocket::SendToEx

Wywołaj tę funkcję elementu członkowskiego, aby wysłać dane do określonego miejsca docelowego (obsługuje adresy IPv6).Call this member function to send data to a specific destination (handles IPv6 addresses).

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

ParametryParameters

lpBuflpBuf
Bufor zawierający dane, które mają zostać przesłane.A buffer containing the data to be transmitted.

nBufLennBufLen
Długość danych w lpBuf w bajtach.The length of the data in lpBuf in bytes.

nHostPortnHostPort
Port identyfikujący aplikację gniazda.The port identifying the socket application.

lpszHostAddresslpszHostAddress
Adres sieciowy gniazda, z którym jest połączony ten obiekt: Nazwa komputera, taka jak "ftp.microsoft.com", lub cyfra kropkowana, taka jak "128.56.22.8".The network address of the socket to which this object is connected: a machine name such as "ftp.microsoft.com," or a dotted number such as "128.56.22.8".

nFlagsnFlags
Określa sposób, w jaki nawiązywane jest wywołanie.Specifies the way in which the call is made. Semantyka tej funkcji jest określana przez opcje gniazda i parametr nFlags .The semantics of this function are determined by the socket options and the nFlags parameter. Ta ostatnia jest zbudowana przez połączenie następujących wartości z operatorem C++ lub :The latter is constructed by combining any of the following values with the C++ OR operator:

  • MSG_DONTROUTE Określa, że dane nie powinny podlegać routingu.MSG_DONTROUTE Specifies that the data should not be subject to routing. Dostawca Windows Sockets może wybrać ignorowanie tej flagi.A Windows Sockets supplier can choose to ignore this flag.

  • MSG_OOB Wysyłaj dane poza pasmem (tylko SOCK_STREAM).MSG_OOB Send out-of-band data (SOCK_STREAM only).

Wartość zwracanaReturn Value

Jeśli błąd nie wystąpi, SendToEx zwraca łączną liczbę wysłanych znaków.If no error occurs, SendToEx returns the total number of characters sent. (Należy pamiętać, że może to być mniejsze niż liczba wskazywana przez nBufLen). W przeciwnym razie zwracana jest wartość SOCKET_ERROR, a określony kod błędu można pobrać, wywołując wartość GetLastError.(Note that this can be less than the number indicated by nBufLen.) Otherwise, a value of SOCKET_ERROR is returned, and a specific error code can be retrieved by calling GetLastError. Następujące błędy dotyczą tej funkcji składowej:The following errors apply to this member function:

  • WSANOTINITIALISED pomyślne AfxSocketInit musi wystąpić przed użyciem tego interfejsu API.WSANOTINITIALISED A successful AfxSocketInit must occur before using this API.

  • WSAENETDOWN implementacja Windows Sockets wykryła, że podsystem sieci nie powiódł się.WSAENETDOWN The Windows Sockets implementation detected that the network subsystem failed.

  • WSAEACCES żądany adres jest adresem emisji, ale nie ustawiono odpowiedniej flagi.WSAEACCES The requested address is a broadcast address, but the appropriate flag was not set.

  • WSAEINPROGRESS blokuje operację blokowania Windows Sockets.WSAEINPROGRESS A blocking Windows Sockets operation is in progress.

  • WSAEFAULT parametry lpBuf lub lpSockAddr nie są częścią przestrzeni adresowej użytkownika lub argument lpSockAddr jest za mały (mniejszy niż rozmiar struktury SOCKADDR ).WSAEFAULT The lpBuf or lpSockAddr parameters are not part of the user address space, or the lpSockAddr argument is too small (less than the size of a SOCKADDR structure).

  • WSAEINVAL nazwa hosta jest nieprawidłowa.WSAEINVAL The host name is invalid.

  • WSAENETRESET połączenie musi zostać zresetowane, ponieważ jego implementacja została porzucona przez implementację Windows Sockets.WSAENETRESET The connection must be reset because the Windows Sockets implementation dropped it.

  • WSAENOBUFS implementacja Windows Sockets zgłasza zakleszczenie bufora.WSAENOBUFS The Windows Sockets implementation reports a buffer deadlock.

  • WSAENOTCONN gniazdo nie jest połączone (tylko SOCK_STREAM).WSAENOTCONN The socket is not connected (SOCK_STREAM only).

  • WSAENOTSOCK deskryptor nie jest gniazdem.WSAENOTSOCK The descriptor is not a socket.

  • WSAEOPNOTSUPP MSG_OOB został określony, ale gniazdo nie jest typu SOCK_STREAM.WSAEOPNOTSUPP MSG_OOB was specified, but the socket is not of type SOCK_STREAM.

  • WSAESHUTDOWN gniazdo zostało zamknięte; nie można wywołać SendToEx w gnieździe po ShutDown wywołaniu z Nhow ustawionym na 1 lub 2.WSAESHUTDOWN The socket has been shut down; it is not possible to call SendToEx on a socket after ShutDown has been invoked with nHow set to 1 or 2.

  • WSAEWOULDBLOCK gniazdo jest oznaczone jako nieblokowe i żądana operacja zostałaby zablokowana.WSAEWOULDBLOCK The socket is marked as nonblocking and the requested operation would block.

  • WSAEMSGSIZE gniazdo jest typu SOCK_DGRAM, a datagram jest większy niż maksymalny obsługiwany przez implementację Windows Sockets.WSAEMSGSIZE The socket is of type SOCK_DGRAM, and the datagram is larger than the maximum supported by the Windows Sockets implementation.

  • WSAECONNABORTED obwód wirtualny został przerwany z powodu przekroczenia limitu czasu lub innego błędu.WSAECONNABORTED The virtual circuit was aborted due to timeout or other failure.

  • WSAECONNRESET obwód wirtualny został zresetowany przez stronę zdalną.WSAECONNRESET The virtual circuit was reset by the remote side.

  • WSAEADDRNOTAVAIL określony adres nie jest dostępny na komputerze lokalnym.WSAEADDRNOTAVAIL The specified address is not available from the local machine.

  • Adresów WSAEAFNOSUPPORT w określonej rodzinie nie można używać w tym gnieździe.WSAEAFNOSUPPORT Addresses in the specified family cannot be used with this socket.

  • WSAEDESTADDRREQ jest wymagany adres docelowy.WSAEDESTADDRREQ A destination address is required.

  • WSAENETUNREACH w tej chwili nie można nawiązać połączenia z siecią.WSAENETUNREACH The network cannot be reached from this host at this time.

UwagiRemarks

Ta metoda jest taka sama jak CAsyncSocket:: SendTo , z tą różnicą, że obsługuje adresy IPv6 oraz starsze protokoły.This method is the same as CAsyncSocket::SendTo except that it handles IPv6 addresses as well as older protocols.

SendToEx jest używany w gnieździe lub gniazdach strumienia i jest używany do zapisywania wychodzących danych z gniazda.SendToEx is used on datagram or stream sockets and is used to write outgoing data on a socket. W przypadku gniazd datagramów należy zachować ostrożność, aby nie przekroczyć maksymalnego rozmiaru pakietów IP bazowych podsieci, które są podane przez iMaxUdpDg element w strukturze WSADATA wypełnionej przez AfxSocketInit.For datagram sockets, care must be taken not to exceed the maximum IP packet size of the underlying subnets, which is given by the iMaxUdpDg element in the WSADATA structure filled out by AfxSocketInit. Jeśli dane są zbyt długie, aby przekazać niepodzielność przez podstawowy protokół, zwracany jest błąd WSAEMSGSIZE i nie są przesyłane żadne dane.If the data is too long to pass atomically through the underlying protocol, the error WSAEMSGSIZE is returned, and no data is transmitted.

Należy zauważyć, że pomyślne zakończenie a nie SendToEx wskazuje, że dane zostały dostarczone pomyślnie.Note that the successful completion of a SendToEx does not indicate that the data was successfully delivered.

SendToEx jest używany tylko w gnieździe SOCK_DGRAM do wysyłania datagramu do określonego gniazda identyfikowanego przez parametr lpSockAddr .SendToEx is only used on a SOCK_DGRAM socket to send a datagram to a specific socket identified by the lpSockAddr parameter.

Aby wysłać emisję (tylko na SOCK_DGRAM), adres w parametrze lpSockAddr powinien być zbudowany przy użyciu specjalnego adresu IP INADDR_BROADCAST (zdefiniowanego w pliku nagłówkowym Windows Sockets Winsock. H) wraz z zamierzonym numerem portu.To send a broadcast (on a SOCK_DGRAM only), the address in the lpSockAddr parameter should be constructed using the special IP address INADDR_BROADCAST (defined in the Windows Sockets header file WINSOCK.H) together with the intended port number. Lub, jeśli parametr lpszHostAddress ma wartość null, gniazdo jest skonfigurowane do emisji.Or, if the lpszHostAddress parameter is NULL, the socket is configured for broadcast. Zwykle nie jest to zalecane, aby datagram rozgłaszał przekroczenie rozmiaru, w którym może wystąpić fragmentacja, co oznacza, że część danych datagramu (z wyjątkiem nagłówków) nie powinna przekraczać 512 bajtów.It is generally inadvisable for a broadcast datagram to exceed the size at which fragmentation can occur, which implies that the data portion of the datagram (excluding headers) should not exceed 512 bytes.

CAsyncSocket:: SetSockOptCAsyncSocket::SetSockOpt

Wywołaj tę funkcję elementu członkowskiego, aby ustawić opcję gniazda.Call this member function to set a socket option.

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

ParametryParameters

nOptionNamenOptionName
Opcja gniazda, dla której ma zostać ustawiona wartość.The socket option for which the value is to be set.

lpOptionValuelpOptionValue
Wskaźnik do buforu, w którym podano wartość dla wybranej opcji.A pointer to the buffer in which the value for the requested option is supplied.

nOptionLennOptionLen
Rozmiar buforu lpOptionValue w bajtach.The size of the lpOptionValue buffer in bytes.

nLevelnLevel
Poziom, na którym jest zdefiniowana opcja; Jedyne obsługiwane poziomy to SOL_SOCKET i IPPROTO_TCP.The level at which the option is defined; the only supported levels are SOL_SOCKET and IPPROTO_TCP.

Wartość zwracanaReturn Value

Niezerowe, jeśli funkcja się powiedzie; w przeciwnym razie 0, a określony kod błędu można pobrać, wywołując wartość GetLastError.Nonzero if the function is successful; otherwise 0, and a specific error code can be retrieved by calling GetLastError. Następujące błędy dotyczą tej funkcji składowej:The following errors apply to this member function:

  • WSANOTINITIALISED pomyślne AfxSocketInit musi wystąpić przed użyciem tego interfejsu API.WSANOTINITIALISED A successful AfxSocketInit must occur before using this API.

  • WSAENETDOWN implementacja Windows Sockets wykryła, że podsystem sieci nie powiódł się.WSAENETDOWN The Windows Sockets implementation detected that the network subsystem failed.

  • WSAEFAULT lpOptionValue nie znajduje się w prawidłowej części przestrzeni adresowej procesu.WSAEFAULT lpOptionValue is not in a valid part of the process address space.

  • WSAEINPROGRESS blokuje operację blokowania Windows Sockets.WSAEINPROGRESS A blocking Windows Sockets operation is in progress.

  • WSAEINVAL nLevel jest nieprawidłowa lub informacje w lpOptionValue są nieprawidłowe.WSAEINVAL nLevel is not valid, or the information in lpOptionValue is not valid.

  • Po ustawieniu SO_KEEPALIVE upłynął limit czasu połączenia z usługą WSAENETRESET.WSAENETRESET Connection has timed out when SO_KEEPALIVE is set.

  • WSAENOPROTOOPT opcja jest nieznana lub nieobsługiwana.WSAENOPROTOOPT The option is unknown or unsupported. W szczególności SO_BROADCAST nie jest obsługiwana w gniazdach typu SOCK_STREAM, podczas gdy SO_DONTLINGER, SO_KEEPALIVE, SO_LINGER i SO_OOBINLINE nie są obsługiwane w gniazdach typu SOCK_DGRAM.In particular, SO_BROADCAST is not supported on sockets of type SOCK_STREAM, while SO_DONTLINGER, SO_KEEPALIVE, SO_LINGER, and SO_OOBINLINE are not supported on sockets of type SOCK_DGRAM.

  • Połączenie WSAENOTCONN zostało zresetowane po ustawieniu SO_KEEPALIVE.WSAENOTCONN Connection has been reset when SO_KEEPALIVE is set.

  • WSAENOTSOCK deskryptor nie jest gniazdem.WSAENOTSOCK The descriptor is not a socket.

UwagiRemarks

SetSockOpt ustawia bieżącą wartość dla opcji gniazda skojarzonej z gniazdem dowolnego typu w dowolnym stanie.SetSockOpt sets the current value for a socket option associated with a socket of any type, in any state. Chociaż opcje mogą istnieć na wielu poziomach protokołu, Ta specyfikacja definiuje tylko opcje, które istnieją na najwyższym poziomie "gniazda".Although options can exist at multiple protocol levels, this specification only defines options that exist at the uppermost "socket" level. Opcje mają wpływ na operacje gniazda, takie jak to, czy przyspieszone dane są odbierane w normalnym strumieniu danych, czy komunikaty emisji można wysyłać w gnieździe itd.Options affect socket operations, such as whether expedited data is received in the normal data stream, whether broadcast messages can be sent on the socket, and so on.

Dostępne są dwa typy opcji gniazda: opcje logiczne, które włączają lub wyłączają funkcję lub zachowanie oraz opcje, które wymagają wartości całkowitej lub struktury.There are two types of socket options: Boolean options that enable or disable a feature or behavior, and options which require an integer value or structure. Aby włączyć opcję Boolean, lpOptionValue wskazuje niezerową liczbę całkowitą.To enable a Boolean option, lpOptionValue points to a nonzero integer. Aby wyłączyć opcję lpOptionValue wskazuje liczbę całkowitą równą zero.To disable the option lpOptionValue points to an integer equal to zero. nOptionLen powinna być taka sama jak sizeof(BOOL) w przypadku opcji logicznych.nOptionLen should be equal to sizeof(BOOL) for Boolean options. W przypadku innych opcji lpOptionValue wskazuje liczbę całkowitą lub strukturę, która zawiera pożądaną wartość dla opcji, a nOptionLen jest długością liczby całkowitej lub struktury.For other options, lpOptionValue points to the integer or structure that contains the desired value for the option, and nOptionLen is the length of the integer or structure.

SO_LINGER kontroluje akcję wykonywaną, gdy niewysłane dane są umieszczane w gnieździe, a Close Funkcja jest wywoływana, aby zamknąć gniazdo.SO_LINGER controls the action taken when unsent data is queued on a socket and the Close function is called to close the socket.

Domyślnie gniazdo nie może być powiązane (patrz bind) z adresem lokalnym, który jest już używany.By default, a socket cannot be bound (see Bind) to a local address which is already in use. Zdarza się jednak, że w ten sposób może być wskazane "ponowne użycie" adresu.On occasion, however, it may be desirable to "reuse" an address in this way. Ponieważ każde połączenie jest jednoznacznie identyfikowane przez kombinację adresów lokalnych i zdalnych, nie występuje problem z dwoma gniazdami związanymi z tym samym adresem lokalnym, o ile adresy zdalne są różne.Since every connection is uniquely identified by the combination of local and remote addresses, there is no problem with having two sockets bound to the same local address as long as the remote addresses are different.

Aby poinformować implementację Windows Sockets, że Bind wywołanie w gnieździe nie powinno być niedozwolone, ponieważ żądany adres jest już używany przez inne gniazdo, aplikacja powinna ustawić opcję SO_REUSEADDR Socket dla gniazda przed wystawieniem Bind wywołania.To inform the Windows Sockets implementation that a Bind call on a socket should not be disallowed because the desired address is already in use by another socket, the application should set the SO_REUSEADDR socket option for the socket before issuing the Bind call. Należy zauważyć, że opcja jest interpretowana tylko w czasie Bind wywołania: jest to niepotrzebne (ale nieszkodliwe), aby ustawić opcję w gnieździe, które nie ma być powiązane z istniejącym adresem, i ustawić lub zresetować opcję po Bind wywołaniu nie ma wpływu na to ani inne gniazdo.Note that the option is interpreted only at the time of the Bind call: it is therefore unnecessary (but harmless) to set the option on a socket which is not to be bound to an existing address, and setting or resetting the option after the Bind call has no effect on this or any other socket.

Aplikacja może zażądać, aby implementacja Windows Sockets umożliwiała korzystanie z pakietów "Keep-Alive" w połączeniach Transmission Control Protocol (TCP) przez włączenie opcji gniazda SO_KEEPALIVE.An application can request that the Windows Sockets implementation enable the use of "keep-alive" packets on Transmission Control Protocol (TCP) connections by turning on the SO_KEEPALIVE socket option. Implementacja Windows Sockets nie musi obsługiwać używania Keep-Alives: Jeśli tak, dokładna semantyka jest specyficzna dla implementacji, ale powinna być zgodna z sekcją 4.2.3.6 specyfikacji RFC 1122: "wymagania dotyczące hostów internetowych — warstwy komunikacji".A Windows Sockets implementation need not support the use of keep-alives: if it does, the precise semantics are implementation-specific but should conform to section 4.2.3.6 of RFC 1122: "Requirements for Internet Hosts — Communication Layers." Jeśli połączenie zostanie porzucone jako wynik "Keep-Alives", kod błędu WSAENETRESET jest zwracany do wszelkich wywołań w toku w gnieździe, a wszystkie kolejne wywołania zakończą się niepowodzeniem z WSAENOTCONN.If a connection is dropped as the result of "keep-alives" the error code WSAENETRESET is returned to any calls in progress on the socket, and any subsequent calls will fail with WSAENOTCONN.

Opcja TCP_NODELAY wyłącza algorytm nagle.The TCP_NODELAY option disables the Nagle algorithm. Algorytm nagle służy do zmniejszania liczby małych pakietów wysyłanych przez hosta przez buforowanie niepotwierdzonych danych wysyłanych do momentu wysłania pakietu o pełnym rozmiarze.The Nagle algorithm is used to reduce the number of small packets sent by a host by buffering unacknowledged send data until a full-size packet can be sent. Jednak w przypadku niektórych aplikacji ten algorytm może obsłużyć wydajność, a TCP_NODELAY można go wyłączyć.However, for some applications this algorithm can impede performance, and TCP_NODELAY can be used to turn it off. Autorzy aplikacji nie powinni ustawiać TCP_NODELAY, chyba że wpływ takiego działania jest dobrze zrozumiały i żądany, ponieważ ustawienie TCP_NODELAY może mieć znaczny negatywny wpływ na wydajność sieci.Application writers should not set TCP_NODELAY unless the impact of doing so is well-understood and desired, since setting TCP_NODELAY can have a significant negative impact on network performance. TCP_NODELAY jest jedyną obsługiwaną opcją gniazda, która używa poziomu IPPROTO_TCP; wszystkie inne opcje używają SOL_SOCKET poziomu.TCP_NODELAY is the only supported socket option which uses level IPPROTO_TCP; all other options use level SOL_SOCKET.

Niektóre implementacje programu Windows Sockets dostarczają informacji debugowania danych wyjściowych, jeśli opcja SO_DEBUG jest ustawiana przez aplikację.Some implementations of Windows Sockets supply output debug information if the SO_DEBUG option is set by an application.

W programie są obsługiwane następujące opcje SetSockOpt .The following options are supported for SetSockOpt. Typ identyfikuje typ danych rozmieszczonych przez lpOptionValue.The Type identifies the type of data addressed by lpOptionValue.

WartośćValue TypType ZnaczenieMeaning
SO_BROADCASTSO_BROADCAST LOGICZNABOOL Zezwalaj na przekazywanie komunikatów emisji w gnieździe.Allow transmission of broadcast messages on the socket.
SO_DEBUGSO_DEBUG LOGICZNABOOL Rejestruj informacje debugowania.Record debugging information.
SO_DONTLINGERSO_DONTLINGER LOGICZNABOOL Nie blokuj Close oczekiwania na wysłanie niewysłanych danych.Don't block Close waiting for unsent data to be sent. Ustawienie tej opcji jest równoznaczne z ustawieniem SO_LINGER z l_onoff ustawionym na zero.Setting this option is equivalent to setting SO_LINGER with l_onoff set to zero.
SO_DONTROUTESO_DONTROUTE LOGICZNABOOL Nie trasuj: Wyślij bezpośrednio do interfejsu.Don't route: send directly to interface.
SO_KEEPALIVESO_KEEPALIVE LOGICZNABOOL Wyślij utrzymywanie aktywności.Send keep-alives.
SO_LINGERSO_LINGER struct LINGER Pokutujący na Close obecność niewysłanych danych.Linger on Close if unsent data is present.
SO_OOBINLINESO_OOBINLINE LOGICZNABOOL Odbieraj dane poza pasmem w normalnym strumieniu danych.Receive out-of-band data in the normal data stream.
SO_RCVBUFSO_RCVBUF int Określ rozmiar buforu dla odbieranych.Specify buffer size for receives.
SO_REUSEADDRSO_REUSEADDR LOGICZNABOOL Zezwól na powiązanie gniazda z adresem, który jest już używany.Allow the socket to be bound to an address which is already in use. (Zobacz bind.)(See Bind.)
SO_SNDBUFSO_SNDBUF int Określ rozmiar buforu dla wysyłanych.Specify buffer size for sends.
TCP_NODELAYTCP_NODELAY LOGICZNABOOL Wyłącza algorytm nagle dla łączenia wysyłania.Disables the Nagle algorithm for send coalescing.

Opcje rozpowszechniania oprogramowania Berkeley (BSD) nie są obsługiwane w przypadku programu SetSockOpt :Berkeley Software Distribution (BSD) options not supported for SetSockOpt are:

WartośćValue TypType ZnaczenieMeaning
SO_ACCEPTCONNSO_ACCEPTCONN LOGICZNABOOL Gniazdo nasłuchujeSocket is listening
SO_ERRORSO_ERROR int Pobierz stan błędu i usuń zaznaczenie.Get error status and clear.
SO_RCVLOWATSO_RCVLOWAT int Odbierz znak wodny.Receive low water mark.
SO_RCVTIMEOSO_RCVTIMEO int Limit czasu odbieraniaReceive timeout
SO_SNDLOWATSO_SNDLOWAT int Wyślij znak wodny.Send low water mark.
SO_SNDTIMEOSO_SNDTIMEO int Limit czasu wysyłania.Send timeout.
SO_TYPESO_TYPE int Typ gniazda.Type of the socket.
IP_OPTIONSIP_OPTIONS Ustaw pole opcji w nagłówku adresu IP.Set options field in IP header.

CAsyncSocket:: ShutDownCAsyncSocket::ShutDown

Wywołaj tę funkcję elementu członkowskiego, aby wyłączyć wysyłanie, odbieranie lub oba w gnieździe.Call this member function to disable sends, receives, or both on the socket.

BOOL ShutDown(int nHow = sends);

ParametryParameters

nHownHow
Flaga opisująca, jakie typy operacji nie będą już dozwolone, przy użyciu następujących wartości wyliczanych:A flag that describes what types of operation will no longer be allowed, using the following enumerated values:

  • odebrane = 0receives = 0

  • wysyła = 1sends = 1

  • Oba = 2both = 2

Wartość zwracanaReturn Value

Niezerowe, jeśli funkcja się powiedzie; w przeciwnym razie 0, a określony kod błędu można pobrać, wywołując wartość GetLastError.Nonzero if the function is successful; otherwise 0, and a specific error code can be retrieved by calling GetLastError. Następujące błędy dotyczą tej funkcji składowej:The following errors apply to this member function:

  • WSANOTINITIALISED pomyślne AfxSocketInit musi wystąpić przed użyciem tego interfejsu API.WSANOTINITIALISED A successful AfxSocketInit must occur before using this API.

  • WSAENETDOWN implementacja Windows Sockets wykryła, że podsystem sieci nie powiódł się.WSAENETDOWN The Windows Sockets implementation detected that the network subsystem failed.

  • WSAEINVAL Nhow jest nieprawidłowy.WSAEINVAL nHow is not valid.

  • WSAEINPROGRESS blokuje operację blokowania Windows Sockets.WSAEINPROGRESS A blocking Windows Sockets operation is in progress.

  • WSAENOTCONN gniazdo nie jest połączone (tylko SOCK_STREAM).WSAENOTCONN The socket is not connected (SOCK_STREAM only).

  • WSAENOTSOCK deskryptor nie jest gniazdem.WSAENOTSOCK The descriptor is not a socket.

UwagiRemarks

ShutDown służy do wyłączania odbierania, transmisji lub obu typów gniazd.ShutDown is used on all types of sockets to disable reception, transmission, or both. Jeśli Nhow ma wartość 0, kolejne odbiory w gnieździe będą niedozwolone.If nHow is 0, subsequent receives on the socket will be disallowed. Nie ma to wpływu na niższe warstwy protokołu.This has no effect on the lower protocol layers.

W przypadku Transmission Control Protocol (TCP) okno protokołu TCP nie jest zmieniane, a przychodzące dane zostaną zaakceptowane (ale nie potwierdzone), dopóki okno nie zostanie wyczerpane.For Transmission Control Protocol (TCP), the TCP window is not changed and incoming data will be accepted (but not acknowledged) until the window is exhausted. W przypadku protokołu UDP (User Datagram Protocol) przychodzące datagramy są akceptowane i umieszczane w kolejce.For User Datagram Protocol (UDP), incoming datagrams are accepted and queued. W żadnym przypadku nie zostanie wygenerowany pakiet błędu protokołu ICMP.In no case will an ICMP error packet be generated. Jeśli Nhow wynosi 1, kolejne operacje wysyłania są niedozwolone.If nHow is 1, subsequent sends are disallowed. Dla gniazd TCP zostanie wysłane polecenie FIN.For TCP sockets, a FIN will be sent. Ustawienie Nhow na 2 powoduje wyłączenie obu wysyłanych i odbieranych danych zgodnie z powyższym opisem.Setting nHow to 2 disables both sends and receives as described above.

Należy pamiętać, że nie ShutDown zamyka gniazda, a zasoby dołączone do gniazda nie zostaną zwolnione do momentu Close wywołania.Note that ShutDown does not close the socket, and resources attached to the socket will not be freed until Close is called. Aplikacja nie powinna polegać na możliwości ponownego użycia gniazda po jego wyłączeniu.An application should not rely on being able to reuse a socket after it has been shut down. W szczególności implementacja Windows Sockets nie jest wymagana do obsługi tego Connect gniazda.In particular, a Windows Sockets implementation is not required to support the use of Connect on such a socket.

PrzykładExample

Zobacz przykład dla CAsyncSocket:: OnReceive.See the example for CAsyncSocket::OnReceive.

CASyncSocket:: SocketCASyncSocket::Socket

Przydziela obsługę gniazda.Allocates a socket handle.

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

ParametryParameters

nSocketTypenSocketType
Określa SOCK_STREAM lub SOCK_DGRAM .Specifies SOCK_STREAM or SOCK_DGRAM.

lEventlEvent
Maska bitów, która określa kombinację zdarzeń sieci, w których interesuje aplikacja.A bitmask that specifies a combination of network events in which the application is interested.

  • FD_READ: Chcesz otrzymywać powiadomienia o gotowości do odczytu.FD_READ: Want to receive notification of readiness for reading.

  • FD_WRITE: Chcesz otrzymywać powiadomienia o gotowości do zapisu.FD_WRITE: Want to receive notification of readiness for writing.

  • FD_OOB: Chcesz otrzymywać powiadomienia o nadejściu danych poza pasmem.FD_OOB: Want to receive notification of the arrival of out-of-band data.

  • FD_ACCEPT: Chcesz otrzymywać powiadomienia o połączeniach przychodzących.FD_ACCEPT: Want to receive notification of incoming connections.

  • FD_CONNECT: Chcesz otrzymywać powiadomienia o ukończonym połączeniu.FD_CONNECT: Want to receive notification of completed connection.

  • FD_CLOSE: Chcesz otrzymywać powiadomienia o zamknięciu gniazda.FD_CLOSE: Want to receive notification of socket closure.

nProtocolTypenProtocolType
Protokół, który ma być używany z gniazdem specyficznym dla wskazanej rodziny adresów.Protocol to be used with the socket that is specific to the indicated address family.

nAddressFormatnAddressFormat
Specyfikacja rodziny adresów.Address family specification.

Wartość zwracanaReturn Value

Zwraca TRUE po powodzeniu, FALSE w przypadku niepowodzenia.Returns TRUE on success, FALSE on failure.

UwagiRemarks

Ta metoda przydziela dojście gniazda.This method allocates a socket handle. Nie wywołuje CAsyncSocket:: bind , aby powiązać gniazdo z określonym adresem, dlatego należy wywołać go Bind później, aby powiązać gniazdo z określonym adresem.It does not call CAsyncSocket::Bind to bind the socket to a specified address, so you need to call Bind later to bind the socket to a specified address. Aby ustawić opcję gniazda przed powiązaniem, można użyć CAsyncSocket:: SetSockOpt .You can use CAsyncSocket::SetSockOpt to set the socket option before it is bound.

Zobacz teżSee also

Klasa CObjectCObject Class
Wykres hierarchiiHierarchy Chart
Klasa CSocketCSocket Class
Klasa CSocketFileCSocketFile Class