libpq

・pqformat.c: pq_beginmessage()
initStringInfoでbufを初期化する
buf->cursorにmsgtypeをセット

・pqformat.c: pq_sendint()
送信バイト数で処理を振り分ける。
appendBinaryStringInfo()でbufに追加する。

・pqformat.c: pq_sendcountedtext()
pg_server_to_client()で文字コードを変換する。
変換された場合は(p != str),文字列の長さをstrlenで取得する。
pq_sendint()でbufにデータの長さを追加する。
appendBinaryStringInfo()でbufに文字列を追加する。
変換された場合は,pfree()で開放する。

・pqformat.c: pq_sendbytes()
appendBinaryStringInfo()でbufにバイナリデータを追加する。

・pqformat.c: pq_endmessage()
pq_putmessage()でbufを送信する。
buf->dataを開放する。

・pqcomm.c: pq_putmessage()
メッセージを送信する。
msgtypeが指定されたときは,internal_putbytes()でmsttypeを送信する。(1byte)
Protocolが3以上のときは,(データの長さ + 4)を,internal_putbytes()で
送信する。
internal_putbytes()でデータを送信する。
この関数の実行中は,PqCommBusyフラグをtrueにしている。

・pqcomm.c: internal_putbytes()
データを送信する。
PqSendPointerがPQ_BUFFER_SIZEに達したら,internal_flush()を実行して,
バッファをフラッシュする。
データをバッファにmemcpyする。
このときバッファを越えないように,amount変数を計算している。

・pqcomm.c: internal_flush()
PqSendBufferのデータを送信する。
secure_write()を実行する。

・be-secure.c: secure_write()
SSLのときは,SSL_write()でデータを送信する。
SSLでないときは,普通にsend()でデータを送信する。