Home > Archives > 2006年02月23日

2006年02月23日

non-blocking の send ではまる

socket でデータを送るときに send に MSG_DONTWAIT を指定して非ブロックにして送る.

int ret = ::send(sock, buf, len, MSG_DONTWAIT);

このとき,戻り値 ret は -1 ならエラー, 0 ならすべて送信キューに入った,正の値なら送信キューに入れられただけの長さ.とういことで,戻り値は送った長さではない.write と違うんじゃないのかとマニュアルに問いかけたい…

追記:

後日再び試すがちゃんと write と同じ結果になっている( send を再び).すべてキューに入った場合にもう一度0バイトを送信しにいってたのかもしれないなぁと思ってみたり.

Home > Archives > 2006年02月23日

Search
Feeds

Page Top