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