SOC_Read
SOC_Recv
SOC_RecvFrom

構文

#include <nitroWiFi/soc.h>
int SOC_Read     ( int s, void* buf, int len );
int SOC_Recv     ( int s, void* buf, int len, int flags );
int SOC_RecvFrom ( int s, void* buf, int len, int flags, void* sockFrom );

引数

s ソケット記述子。
buf 受信バッファへのポインタ。
len 受信バッファの長さ(バイト)。
flags メッセージの受信状態を指定します。flagsは、0か以下の値の論理ORをとったものです。
SOC_MSG_PEEK 到達メッセージをピークします。データは未読込として扱われ、次のSOC_Recv()またはSOC_RecvFrom()は、このデータを返します。
SOC_MSG_DONTWAIT 非封鎖処理を行ないます。データがなければSOC_EWOULDBLOCKを返します。
sockFrom 通信相手の名前(アドレス)を取得するためのソケットアドレス構造体(SOCSockAddr,SOCSockAddrIn)へのポインタ。
ソケットアドレスのlenフィールドは適切に初期化してください。(例 sizeof(SOCSockAddrIn))

返り値

0以上 受信したメッセージのバイト数。
SOC_EINVAL ソケット記述子の値が不正です。( s < 0 か存在しないソケット)
あるいは、SSLソケットにSOC_MSG_DONTWAITフラグを指定した。(SSLは封鎖モードでサポートします)
あるいは、封鎖モードの呼び出しを割り込みハンドラ内で使用した。
SOC_ENETRESET ソケットライブラリが初期化されていません。
SOC_ENOTCONN 接続されていません。
SOC_EWOULDBLOCK 受信を待つデータもしくは帯域外データがありません。(sが非封鎖モードのソケットか、SOC_MSG_DONTWAITフラグが指定された場合)

注意:追加のエラーが今後のライブラリリリースで生じたり返されることがあります。すべての負の返り値は汎用のエラーとして扱ってください。

説明

SOC_Read(), SOC_Recv(), SOC_RecvFrom() は、ソケットの相手からlenバイトの読み込みを試みます。

SOC_Read()flags を設定しない以外は SOC_Recv() と同等です。

SOC_Read(), SOC_Recv(), SOC_RecvFrom() は、SOC_Fcntl() でソケット記述子を非封鎖モードに設定していない限り(もしくはSOC_MSG_DONTWAITフラグが指定されない限り)、ソケットの受信バッファにメッセージがなければメッセージが届くまでブロックします。

データグラム・ソケットでは、メッセージ全体が単一処理で読まれます。メッセージが buf で与えられたバッファに収まらなければ、超過したバイトは捨て去られます。ストリーム・ソケットでは、メッセージ境界は無視されます。この場合、データは利用可能になり次第ユーザーへ返ります。

注意:TCPコネクションがクローズされた後でも返り値は0となります。これはPOSIXに規定される仕様に準じています。

参照

SOCSockAddr, SOC_Fcntl

履歴

2008/05/13 返り値の修正
2005/12/12 説明の記述変更
2005/09/13 初版