次の方法で共有


CAsyncSocket::SendToEx

更新 : 2007 年 11 月

指定した宛先にデータを送信します。この関数は、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

参照

参照

CAsyncSocket クラス

階層図

CAsyncSocket::Create

CAsyncSocket::Receive

CAsyncSocket::ReceiveFrom

CAsyncSocket::Send

その他の技術情報

CAsyncSocket のメンバ