network データ収集用C++ class library
(©2006-2007 Hirofumi Fujii, KEK Online-electronics group)
(Revised: 05-Mar-2007)
はじめに
この文書は、著者が製作した network データ収集用C++ class library について
述べたものである。
一般に network application program では「network の
入出力をしながら、、」という style になることが多い。これを実現する手法として
multi-thread programming を行うと便利であることが多い。また、データの
送受信等では TCP による stream 型の入出力を行うことが多い。そこで、ここでは
- Multi-thread programming を支援するための class
- TCP stream を扱うための class
を中心に作成した。なお
については上記別ページに用意した。
配布パッケージ
マニュアル等
変更履歴
- 2007年3月5日、kol001g.tar.gz、及び Win32 版 Eclipse/CDT project 付きをリリース。
- KolSocket で一箇所、unsigned と singned の比較をしているところがあったので修正。
- 2006年11月16日、kol001f.tar.gz をリリース。
- TcpServer で backlog の個数を与えられるようにした。
- TcpClient で connect の前、あるいは TcpServer で bind の前に setsockopt を
利用したい場合に備えて、TcpBuffer, TcpClient, TcpServer の各 class に Socket を引数とする
constructor を付け加えた。
先に Socket object を生成し、setsockopt で設定した後、その object を引数にして
TcpClient や TcpServer を呼び出せる。
- 仲吉氏の指摘により、TcpServer(int port [, int backlog]) では内部で bind の前に
setsockopt の SO_REUSEADDR を設定することとする。はずしたい場合、あるいは別の option を
設定したい場合には TcpSocket を生成し、それを引数とする constructor を呼び出せばよい。
- 2006年8月17日、kol001e.tar.gz をリリース。TcpBuffer に ignore を付け加えた。
- 2006年6月27日、kol001b.tar.gz をリリース。shutdown を付け加えた。
- 2006年6月13日、kol001a.tar.gz をリリース。
- TCPClient で gethostbyname() を使用していたが、thread-safe でないので、
getaddrinfo()とfreeaddrinfo() を使うようにした。
- 例題 exam07.cxx が、動作しない可能性があるので書き換えた。
- 2006年6月8日、kol001.tar.gz に含まれている kolthread.h の先頭行に
スペルの誤りがあり、二重 include の防止が効いてなかった(仲吉さんの指摘)。
修正した。
- 2006年5月16日、Windows 版を作ってみた。compile/link option として
/MT /GX /DWIN32 ... ws2_32.lib、少なくとも例題は動いた。リリースは Linux 版を
整備し直す時にする予定。
- 2006年5月9日、TcpBuffer class のI/O系の一部の関数の戻り値を標準I/O stream に
合わせるように変更(全部変更する予定)。
- 2006年5月8日現在次の class を用意した。用意してあるのはソースのみ。
用意した class
- Thread
- Mutex
- Socket
- SocketException
- TcpBuffer
- TcpClient
- TcpServer
- TcpSocket
すべての class は namespace kekonline に属している。
ファイル名はとりあえず
- kolthread.h, kolthread.cxx (Thread,Mutex)
- kolsocket.h, kolsocket.cxx (Socket,SocketException)
- koltcp.h, koltcp.cxx (TcpClient, TcpServer, TcpSocket)
としてある。()内は定義されている class 名である。
ファイル名を、こうせずにフォルダを用意して例えば "kekonl/thread.h"
のようにする方法も考えられる。どうするかは一般配布までに
決める必要がある。また、今後
- Thread class に関しては、抽象 class にする可能性が高い(今はしていない)。
- TcpClinet, TcpServer, TcpSocket の class は標準 iostream または
標準 streambuf から派生させる
可能性が高い(今はしていない)。
C++ の規格については
でJIS検索して
閲覧できる。
ただし閲覧のみ。C++ の JIS番号は
2006年5月16日現在 JIS X 3014:2003(ISO/IEC 14882:2003)である。