

#include <nitroWiFi/soc.h>
int SOC_Close ( int s );
| s | クローズするソケット記述子。 |
| 0 | 成功。 |
SOC_EINPROGRESS |
クローズ処理が継続中です。 |
SOC_EINVAL |
ソケット記述子の値が不正です。( s < 0) |
SOC_ENETRESET |
ソケットライブラリが初期化されていません。 |
注意:追加のエラーが今後のライブラリリリースで生じたり返されることがあります。すべての負の返り値は汎用のエラーとして扱ってください。
ソケット記述子をクローズします。
現状では SOC_O_NONBLOCK フラグが設定されていても、設定されていなくても SOC_Close() は非同期のクローズ処理を行います。
なお、コマンドキューに空きがない場合はブロックします。また、ストリーム・ソケット ( TCP ) の場合は全てのデータを送信後、送信スレッドを終了させます。
ソケットが完全にクローズされ、メモリ領域が開放されたかどうか判定したい場合は、再度 SOC_Close() を呼び出してください。SOC_Close() は最初に呼び出されたときに
ソケットをクローズ処理状態に遷移させます。この遷移が成功したときに 0 を返します。そして、再度 SOC_Close() の呼び出したときには、現在のクローズ処理の進行状態を返します。
このとき SOC_EINPROGRESS が返るならソケットのクローズ処理を継続中を表し、また 0 が返るならクローズ処理が終了し領域が開放されていることを意味します。
ただし、再呼び出し時に、他のソケットがリソースを再利用している場合は SOC_Close() は誤ってリソースを解放します。
マルチスレッド環境下でSOCライブラリを利用している場合にクローズ処理の進行状態の確認するには SOC_IsReleased() の使用をお勧めします。
2008/06/26 クローズ処理の進行状態の確認にはSOC_Releasedを推薦
2008/05/13 返り値 SOC_EINVALを修正、説明を修正
2006/05/18 クローズ処理の終了の確認方法
2005/12/12 返り値の変更
2005/09/13 初版