次の方法で共有


CAsyncSocket::Send

更新 : 2007 年 11 月

接続されたソケットにデータを送信します。

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

パラメータ

  • lpBuf
    転送するデータを保持するバッファ。

  • nBufLen
    lpBuf 内のバイト単位のデータ長。

  • nFlags
    呼び出し方法を指定します。この関数の意味は、ソケット オプションとパラメータ nFlags によって決まります。パラメータには C++ の OR 演算子を使って次の値の任意の組み合わせを指定できます。

    • MSG_DONTROUTE   データがルーティングに依存しないことを指定します。Windows ソケットの提供者は、このフラグを無視することもできます。

    • MSG_OOB   帯域外データを送信します (SOCK_STREAM 型のみ)。

戻り値

エラーが発生しなかった場合、Send は送信した文字数を返します。この値は、nBufLen で指定した値よりも小さくなることもあります。それ以外の場合は SOCKET_ERROR 値を返します。固有のエラー コードは GetLastError を呼び出して取得できます。このメンバ関数では、次のエラーが発生します。

  • WSANOTINITIALISED   この API を使う前に AfxSocketInit の呼び出しが正常終了していることが必要です。

  • WSAENETDOWN   Windows ソケットの実装が、ネットワーク サブシステムの異常を検出しました。

  • WSAEACCES   要求したアドレスはブロードキャスト アドレスですが、適切なフラグが設定されていませんでした。

  • WSAEINPROGRESS   実行中の Windows ソケット呼び出しがブロッキングされています。

  • WSAEFAULT   引数 lpBuf がユーザー アドレス空間の有効な部分を指していません。

  • WSAENETRESET   Windows ソケットの実装が接続をドロップしたので、接続をリセットする必要があります。

  • WSAENOBUFS   Windows ソケットの実装が、バッファのデッドロックをレポートしています。

  • WSAENOTCONN   ソケットが接続されていません。

  • WSAENOTSOCK   記述子がソケットではありません。

  • WSAEOPNOTSUPP   MSG_OOB が指定されましたが、SOCK_STREAM 型のソケットではありません。

  • WSAESHUTDOWN   ソケットはシャット ダウンしています。nHow に 1 または 2 を指定して ShutDown を起動した後では、ソケットで Send を呼び出すことはできません。

  • WSAEWOULDBLOCK   ソケットは非ブロッキングになっていて、要求した操作がブロックされました。

  • WSAEMSGSIZE   ソケットが SOCK_DGRAM 型で、Windows ソケットの実装でサポートされている最大長よりもデータグラムが長すぎます。

  • WSAEINVAL   ソケットが Bind を使用してバインドされていません。

  • WSAECONNABORTED   タイムアウトまたはその他の障害により、仮想回路はアボートされました。

  • WSAECONNRESET   リモート側から仮想回路がリセットされました。

解説

Send は、接続されたストリーム ソケット、またはデータグラム ソケットに出力データを書き込むために使います。データグラム ソケットが、サブネットの最大 IP パケット サイズを超えないように注意してください。データグラム ソケットのサイズは、AfxSocketInit が返す WSADATA 構造体の要素 iMaxUdpDg で指定されます。データが長すぎると、プロトコルにそのまま渡されるため、GetLastError から WSAEMSGSIZE エラーが返され、データは送信されません。

データグラム ソケットでは、Send が正常終了しても、データの受け渡しが成功したことを示しているわけではないことに注意してください。

SOCK_STREAM 型の CAsyncSocket オブジェクトでは、書き込んだバイト数は 1 から要求した長さまでの値になります。バイト数の値は、ローカル ホストとほかのホストの両方で利用できるバッファ サイズによって異なります。

使用例

CAsyncSocket::OnSend」の例を参照してください。

必要条件

ヘッダー : afxsock.h

参照

参照

CAsyncSocket クラス

階層図

CAsyncSocket::Create

CAsyncSocket::Receive

CAsyncSocket::ReceiveFrom

CAsyncSocket::SendTo

その他の技術情報

CAsyncSocket のメンバ