CAsyncSocket::SendToEx
指定した宛先にデータを送信します。この関数は、IPv6 アドレスを処理します。
int SendToEx(
const void* lpBuf,
int nBufLen,
UINT nHostPort,
LPCTSTR lpszHostAddress = NULL,
int nFlags = 0
);
パラメーター
lpBuf
転送するデータを保持するバッファー。nBufLen
lpBuf 内のバイト単位のデータ長。nHostPort
ソケット アプリケーションを識別するポート。lpszHostAddress
このオブジェクトが接続されているソケットのネットワーク アドレス:"ftp.microsoft.com、"ドット区切り番号「128.56.22.8」などのマシン名。nFlags
呼び出し方法を指定します。 この関数の意味は、ソケット オプションとパラメーター nFlags によって決まります。 パラメーターには C++ の OR 演算子を使って次の値の任意の組み合わせを指定できます。MSG_DONTROUTE データがルーティングに依存しないことを指定します。 Windows ソケットの提供者は、このフラグを無視することもできます。
MSG_OOB 帯域外データを送信します (SOCK_STREAM 型のみ)。
戻り値
エラーが発生しなかった場合、SendToEx は送信した文字総数を返します。 この値は、nBufLen で指定した値よりも小さくなることもあります。それ以外の場合は SOCKET_ERROR 値を返します。固有のエラー コードは GetLastError を呼び出して取得できます。 このメンバー関数では、次のエラーが発生します。
WSANOTINITIALISED この API を使う前に AfxSocketInit の呼び出しが正常終了していることが必要です。
WSAENETDOWN Windows ソケットの実装が、ネットワーク サブシステムの異常を検出しました。
WSAEACCES 要求したアドレスはブロードキャスト アドレスですが、適切なフラグが設定されていませんでした。
WSAEINPROGRESS 実行中の Windows ソケット呼び出しがブロッキングされています。
WSAEFAULT パラメーター lpBuf または lpSockAddr がユーザー アドレス空間の有効な部分を指していません。または、引数 lpSockAddr が小さすぎます。SOCKADDR 構造体のサイズより小さくなっています。
WSAEINVAL ホスト名が無効です。
WSAENETRESET Windows ソケットの実装が接続をドロップしたので、接続をリセットする必要があります。
WSAENOBUFS Windows ソケットの実装が、バッファーのデッドロックをレポートしています。
WSAENOTCONN ソケットが接続されていません (SOCK_STREAM 型だけ)。
WSAENOTSOCK 記述子がソケットではありません。
WSAEOPNOTSUPP MSG_OOB が指定されましたが、SOCK_STREAM 型のソケットではありません。
WSAESHUTDOWN ソケットはシャットダウンしています。nHow に 1 または 2 を指定して ShutDown を起動した後では、ソケットで SendToEx を呼び出すことはできません。
WSAEWOULDBLOCK ソケットは非ブロッキングになっていて、要求した操作がブロックされました。
WSAEMSGSIZE ソケットが SOCK_DGRAM 型で、Windows ソケットの実装でサポートされている最大長よりもデータグラムが長すぎます。
WSAECONNABORTED タイムアウトまたはその他の障害により、仮想回路はアボートされました。
WSAECONNRESET リモート側から仮想回路がリセットされました。
WSAEADDRNOTAVAIL 指定したアドレスはローカル コンピューターからは利用できません。
WSAEAFNOSUPPORT 指定したファミリのアドレスはこのソケットでは使用できません。
WSAEDESTADDRREQ 宛先アドレスが必要です。
WSAENETUNREACH 現時点では、このホストからネットワークに到達できません。
解説
このメソッドは、従来のプロトコルだけでなく IPv6 アドレスを処理します。それ以外は CAsyncSocket::SendTo と同じです。
SendToEx は、データグラム ソケットまたはストリーム ソケットに出力データを書き込むために使います。 データグラム ソケットが、サブネットの最大 IP パケット サイズを超えないように注意してください。データグラム ソケットのサイズは、AfxSocketInit が設定する WSADATA 構造体の要素 iMaxUdpDg で指定されます。 データが長すぎると、プロトコルにそのまま渡されるため、WSAEMSGSIZE エラーが返され、データは送信されません。
SendToEx が正常終了しても、データの受け渡しが成功したことを示しているわけではないことに注意してください。
SendToEx は、パラメーター lpSockAddr で指定した特定のソケットにデータグラムを送信するために、SOCK_DGRAM ソケットだけで使います。
ブロードキャスト送信するには (SOCK_DGRAM のみ)、パラメーター lpSockAddr 内のアドレスをポート番号と共に、特別な IP アドレス INADDR_BROADCAST (Windows ソケットのヘッダー ファイル WINSOCK.H で定義されています) を使って構築します。 また、パラメーター lpszHostAddress が NULL のときは、ソケットはブロードキャストとして構成されます。 一般的に、断片化を発生させるサイズを超えるブロードキャスト データグラムはお勧めできません。データグラムのデータ部 (ヘッダーを除いた部分) が 512 バイトを超えないことをお勧めします。
必要条件
**ヘッダー:**afxsock.h