ノンブロッキングでrcv_socで受信サイズが0の場合
Posted: 2017年11月19日(日) 14:22
行いたいことはデータを受信した場合にcallback関数が呼ばれることです。
しかし、データを受信してもcallback関数が呼び出されません。
データを受信した場合にcallback関数が呼び出されるようにするにはどのようにすればよいでしょうか
受信をノンブロッキングで設定しております。
そして、送信した後にcallbackをあげるため空読みしています。
しかしcallbackが実行されません。
すでに受信していた場合にcallbackはあがらないのでしょうか。
以下のコードような想定で、送信の後にrcv_socを受信データサイズ0で指定しています。
rcv_soc関数の戻り値が0(切断)となってしまいます。
しかし、すぐあとにrcv_soc関数で受信データを0より大きい値にすると受信できます。
rcv_soc関数の受信データサイズを0にした場合には、0バイトを受信できたことを返す仕様でしょうか。
宜しくお願い致します。
===定義===
cfg_soc(SockId, SOC_CBK_HND, (VP)SockCallback);
cfg_soc(SockId, SOC_CBK_FLG, (VP)(EV_SOC_CON|EV_SOC_RCV|EV_SOC_CLS));
==========
===送信関数===
snd_soc(SockId, (char *)Buff, lSendSize);
char dummy[10];
rcvercd = rcv_soc(SockId, (VP)&dummy, 0);
==============
===SockCallback===
ER SockCallback(SID sid, UH event, ER ercd)
{
・・・省略・・・
if(event & EV_SOC_RCV)
{
iset_flg(ID_SOC_FLG, TCP_EVENT);
}
}
=================
===受信関数===
FLGPTN waiptn = TCP_EVENT;
twai_flg(ID_SOC_FLG, waiptn, TWF_ORW, &flgptn, TMO_FEVR);
rcv_soc(SockId, (VP)&rcvdata, 100);
=============
しかし、データを受信してもcallback関数が呼び出されません。
データを受信した場合にcallback関数が呼び出されるようにするにはどのようにすればよいでしょうか
受信をノンブロッキングで設定しております。
そして、送信した後にcallbackをあげるため空読みしています。
しかしcallbackが実行されません。
すでに受信していた場合にcallbackはあがらないのでしょうか。
以下のコードような想定で、送信の後にrcv_socを受信データサイズ0で指定しています。
rcv_soc関数の戻り値が0(切断)となってしまいます。
しかし、すぐあとにrcv_soc関数で受信データを0より大きい値にすると受信できます。
rcv_soc関数の受信データサイズを0にした場合には、0バイトを受信できたことを返す仕様でしょうか。
宜しくお願い致します。
===定義===
cfg_soc(SockId, SOC_CBK_HND, (VP)SockCallback);
cfg_soc(SockId, SOC_CBK_FLG, (VP)(EV_SOC_CON|EV_SOC_RCV|EV_SOC_CLS));
==========
===送信関数===
snd_soc(SockId, (char *)Buff, lSendSize);
char dummy[10];
rcvercd = rcv_soc(SockId, (VP)&dummy, 0);
==============
===SockCallback===
ER SockCallback(SID sid, UH event, ER ercd)
{
・・・省略・・・
if(event & EV_SOC_RCV)
{
iset_flg(ID_SOC_FLG, TCP_EVENT);
}
}
=================
===受信関数===
FLGPTN waiptn = TCP_EVENT;
twai_flg(ID_SOC_FLG, waiptn, TWF_ORW, &flgptn, TMO_FEVR);
rcv_soc(SockId, (VP)&rcvdata, 100);
=============