このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。
いよいよ FTP サーバの実装に入る
プログラミング環境は色々と迷ったが、
オーソドックスに C/C++ にすることにした。
すぐにでもソケットの処理に入ってもいいが、
ここは趣味。最大限悪い癖を発揮して、
意味も無く外堀のクラス化を進めていこう。
ソケットを扱うサーバプログラミングの場合、
マルチスレッドになることが多い。
Thread 周りのクラスを作成しよう。
// API の例外
struct WindowsException : public std::runtime_error {
// 省略
};
// HANDLE のラッパ
class Handle {
public:
Handle(HANDLE handle) throw();
virtual HANDLE GetHandle(void) const throw();
};
// WaitForSingleObject で待機可能なハンドル
class WaitableHandle : public Handle {
public:
WaitableHandle(HANDLE handle) throw();
virtual DWORD Wait(DWORD timeout) const throw(WindowsException) {
};
// スレッド。継承して threadMain をオーバーライド
class Thread : public WaitableHandle {
public:
virtual void Shutdown() throw (WindowsException);
protected:
Thread(void) throw (WindowsException);
virtual DWORD threadMain(void);
};
こんなとこかな。