CPS_SocRead

構文

#include <nitroWiFi/cps.h>
u8 *CPS_SocRead(u32 *len);

引数

len 受信バッファ内のデータの長さ。

返り値

受信バッファ内のデータへのポインタ

説明

PING/UDP/TCPの受信を行います。
受信バッファ内のデータへのポインタと長さを返します。
TCP通信でバッファが空で接続が切断されている時は、lenに0が設定されます。
注意して欲しいのは、このポインタはrcvbufの中を指していると言うことです。CPS_SocRead()を実行しただけでは、データやデータポインタは変化しません。CPS_SocRead()を連続して実行すると、同じデータが返され続けます(長さは増加するかもしれない)。
次のデータに進むにはCPS_SocConsume()を実行します。CPS_SocConsume()では消費するデータ数を指定できるので、極端な話、1バイトづつCPS_SocConsume()すれば、CPS_SocRead()で1バイトづつ処理できます。CPS_SocGetChar()はまさしくそういう実装になっています。ただし、現在の実装ではCPS_SocConsume()は実際のmemmoveを伴うので、rcvbufのサイズが大きな場合、少量づつCPS_SocConsume()するのは効率が悪くなります。アプリケーション側で充分なバッファを用意し、CPS_SocRead()で返された長さ分だけ転送し、それらを全部CPS_SocConsume()するようにするのが望ましい利用方法です。
受信バッファが空でないならブロックしません。空ならブロックします。

参照

CPS_SocConsume, CPS_SocGetChar

履歴

2005/10/21 初版