recv - データの受信

------------------------------------------------------------------------------
typedef gboolean (*RecvUIFunc)	(SockInfo	*sock,
				 gint		 count,
				 gint		 read_bytes,
				 gpointer	 data);

データの受信に時間がかかる場合に定期的にユーザインタフェースを更新する
ためのコールバック関数の型です。

sock: SockInfo 構造体へのポインタ
count: 受信した行数
read_bytes: 受信したバイト数
data: ユーザデータ
戻り値: TRUE の場合受信を続行
        FALSE の場合キャンセル

------------------------------------------------------------------------------
gchar *recv_bytes		(SockInfo	*sock,
				 glong		 size);

ソケット sock からデータを size バイト受信します。
受信バッファの末尾はヌル文字で終端されます。
受信したデータが size バイトに満たない場合は NULL が返ります。

返った値は g_free() で解放する必要があります。

sock: SockInfo 構造体へのポインタ
size: 受信するデータのサイズ
戻り値: 受信したデータ
        エラーの場合 NULL

------------------------------------------------------------------------------
gint recv_write_to_file		(SockInfo	*sock,
				 const gchar	*filename);

ソケット sock からテキストデータを終端行("." + CR + LF)まで受信し、
ファイル filename に書き出します。
また、以下の変更が行われます。
  * 改行は LF に正規化されます。
  * 先頭が ".." で始まる行は最初の "." が削除されます。
  * 先頭が ">From " で始まる行は最初の ">" が削除されます。

sock: SockInfo 構造体へのポインタ
filename: 書き出すファイルのパス
戻り値: 成功した場合 0
        エラーの場合負の値
        -1: ファイル関連のエラーなど
        -2: ソケットの受信エラー

------------------------------------------------------------------------------
gint recv_bytes_write_to_file	(SockInfo	*sock,
				 glong		 size,
				 const gchar	*filename);

ソケット sock からデータを size バイト受信し、ファイル filename に
書き出します。その際、改行は LF に正規化されます。

sock: SockInfo 構造体へのポインタ
size: 受信するデータのサイズ
filename: 書き出すファイルのパス
戻り値: 成功した場合 0
        エラーの場合負の値
        -1: ファイル関連のエラーなど
        -2: ソケットの受信エラー

------------------------------------------------------------------------------
gint recv_write			(SockInfo	*sock,
				 FILE		*fp);

ソケット sock からテキストデータを終端行("." + CR + LF)まで受信し、
ファイルストリーム fp に書き出します。
また、以下の変更が行われます。
  * 改行は LF に正規化されます。
  * 先頭が ".." で始まる行は最初の "." が削除されます。
  * 先頭が ">From " で始まる行は最初の ">" が削除されます。

sock: SockInfo 構造体へのポインタ
fp: 書き出すファイルストリーム
戻り値: 成功した場合 0
        エラーの場合負の値
        -1: ファイル関連のエラーなど
        -2: ソケットの受信エラー

------------------------------------------------------------------------------
gint recv_bytes_write		(SockInfo	*sock,
				 glong		 size,
				 FILE		*fp);

ソケット sock からデータを size バイト受信し、ファイルストリーム fp に
書き出します。その際、改行は LF に正規化されます。

sock: SockInfo 構造体へのポインタ
size: 受信するデータのサイズ
fp: 書き出すファイルストリーム
戻り値: 成功した場合 0
        エラーの場合負の値
        -1: ファイル関連のエラーなど
        -2: ソケットの受信エラー

------------------------------------------------------------------------------
void recv_set_ui_func		(RecvUIFunc	 func,
				 gpointer	 data);

recv_write() または recv_write_to_file() で受信に時間がかかる場合に
定期的にユーザインタフェースを更新するためのコールバック関数を指定します。

func: RecvUIFunc 型のコールバック関数へのポインタ
data: func に渡されるユーザデータ
