Condividi tramite


CAsyncSocket::SendToEx

Chiamare la funzione membro per inviare i dati a una destinazione specifica (indirizzi IPv6 di handle).

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

Parametri

  • lpBuf
    Un buffer che contiene i dati per trasmettere.

  • nBufLen
    Lunghezza dei dati in lpBuf in byte.

  • nHostPort
    La porta che identifica l'applicazione di socket.

  • lpszHostAddress
    L'indirizzo di rete di socket a cui è connesso: un nome del computer come "ftp.microsoft.com", o un numero tratteggiato come "128.56.22.8".

  • nFlags
    Specifica la modalità in cui la chiamata viene eseguita.La semantica di questa funzione viene determinata dalle opzioni di socket e dal parametro nFlags.L'ultimo viene costruito combinando uno dei seguenti valori con l'operatore C++ OR :

    • MSG_DONTROUTE specifica che i dati non devono essere conforme al routing.Un fornitore di Windows Sockets possibile ignorare questo flag.

    • MSG_OOB invia i dati fuori bandaSOCK_STREAM (solo).

Valore restituito

Se non si verificano errori, SendToEx restituisce il numero totale di caratteri inviati.Notare che questo può essere meno che il valore indicato da nBufLen). In caso contrario, un valore SOCKET_ERROR viene restituito e un codice di errore specifico può essere recuperato chiamando GetLastError.Gli errori seguenti si applicano a questa funzione membro:

  • WSANOTINITIALISED Al AfxSocketInit deve verificarsi prima di utilizzare questa API.

  • WSAENETDOWN che l'implementazione di Windows Sockets ha rilevato che il sottosistema di rete non è riuscita.

  • WSAEACCES l'indirizzo è richiesto un indirizzo broadcast, ma il flag appropriato non è stato impostato.

  • WSAEINPROGRESS che blocca l'operazione di Windows Sockets è in corso.

  • WSAEFAULT i parametri lpSockAddr o lpBuf non fa parte dello spazio degli indirizzi dell'utente, o argomento lpSockAddr è troppo piccolo (minore della dimensione di una struttura SOCKADDR ).

  • WSAEINVAL il nome host non è valido.

  • WSAENETRESET la connessione deve essere reimpostato poiché l'implementazione di Windows Sockets è stata rilasciata.

  • WSAENOBUFS i rapporti di implementazione Windows Sockets un deadlock del buffer.

  • IlWSAENOTCONN socket non è connessoSOCK_STREAM (solo).

  • WSAENOTSOCK il descrittore non è un socket.

  • WSAEOPNOTSUPP   MSG_OOB è stato specificato, ma il socket non è di tipo SOCK_STREAM.

  • IlWSAESHUTDOWN socket è stato interrotto; non è possibile chiamare SendToEx su un socket dopo ShutDown è stato richiamato con nHow impostato su 1 o 2.

  • IlWSAEWOULDBLOCK socket è contrassegnato come non bloccante e l'operazione richiesta blocca.

  • IlWSAEMSGSIZE socket è di tipo SOCK_DGRAMe il datagram è superiore al massimo supportato dall'implementazione Windows Sockets.

  • IlWSAECONNABORTED circuito virtuale è stato interrotto a causa dell'intervallo o di altro tipo.

  • IlWSAECONNRESET circuito virtuale è stato reimpostato sul lato remoto.

  • WSAEADDRNOTAVAIL l'indirizzo specificato non è disponibile nel computer locale.

  • Gli indirizzi diWSAEAFNOSUPPORT la famiglia specificata non possono essere utilizzati con questo socket.

  • L'indirizzo di destinazione diWSAEDESTADDRREQ A è obbligatorio.

  • WSAENETUNREACH la rete non può essere raggiunto da questo host attualmente.

Note

Questo metodo è lo stesso CAsyncSocket::SendTo con la differenza che gestisce gli indirizzi IPv6 e protocolli più recenti.

SendToEx viene utilizzato in datagram o su socket di flusso e viene utilizzato per scrivere i dati in uscita a un socket.Per i socket di datagramma, la visualizzazione deve essere effettuata per non superare la dimensione massima di pacchetto IP della subnet sottostanti, che venga fornita dall'elemento iMaxUdpDg nella struttura WSADATA compilata da AfxSocketInit.Se i dati sono troppo lunghi per passare atomico con il protocollo sottostante, l'errore WSAEMSGSIZE viene restituito e non vengono trasmesse.

Si noti che il completamento SendToEx non indica che i dati correttamente sono stati resi.

SendToEx viene utilizzato solo su un socket SOCK_DGRAM per inviare un datagram a un socket specifico identificato dal parametro lpSockAddr.

Per inviare una trasmissione su SOCK_DGRAM (solo), l'indirizzo nel parametro lpSockAddr deve essere costruito utilizzando l'indirizzo IP speciale INADDR_BROADCAST (definito nel file di intestazione Windows Sockets WINSOCK.H) insieme al numero di porta desiderato.In alternativa, se il parametro lpszHostAddress è NULL, il socket è configurato per la trasmissione.Per un datagram in genere è sconsigliabile superare la dimensione della frammentazione può verificarsi, che implica che la parte di dati datagram (a esclusione delle intestazioni) non deve superare i 512 byte.

Requisiti

Header: afxsock.h

Vedere anche

Riferimenti

Classe di CAsyncSocket

Grafico della gerarchia

CAsyncSocket::Create

CAsyncSocket::Receive

CAsyncSocket::ReceiveFrom

CAsyncSocket::Send