home ホーム search 検索 -  login ログイン  | reload edit datainfo version cmd icon diff delete  | help ヘルプ

日記/2009/05/10/UNIX-C言語でのTCPのechoサーバのサンプル

日記/2009/05/10/UNIX-C言語でのTCPのechoサーバのサンプル

日記 / 2009 / 05 / 10 / UNIX-C言語でのTCPのechoサーバのサンプル
id: 386 所有者: msakamoto-sf    作成日: 2009-05-10 22:40:57
カテゴリ: BSD C言語 Linux UNIX ネットワーク 

UNIX上でのC言語による、TCP/IPソケットを使った"echo"サーバ/クライアントのサンプル実装をcodereposに登録しました。

http://coderepos.org/share/browser/lang/c/echo_samples

2013-07-28 : msakamoto-sfが著作権を持っているコードのみ、GitHubにコピーしました。以降はこちらを更新します。
https://github.com/msakamoto-sf/toybox/tree/master/tcp_echo_sample/c

詳細はREADME_ja.txtを参照して下さい。
http://coderepos.org/share/browser/lang/c/echo_samples/README_ja.txt

元々、「サーバ側でどうにかして"接続タイムアウト"をクライアント側に発生させられないかな」と思い、select + acceptの間にsleepかませたらどうかとか考えていたのですが、下記リンクの「TCP/IP エラー処理 connect編」で普通に「マシンが居ないIPアドレスに接続」で普通にクライアント側で発生させることが出来たので、そこまでは作りませんでした。
というか、最後にソケット系の関数を弄くったのが1年以上昔で、思い出して普通のブロッキングバージョンのechoサーバ/クライアント作るだけで土日終わってしまいました・・・。
ギリギリで、connect()前にソケットを非ブロッキングモードにしておき、EINPROGRESSで戻ったらタイムアウト秒数指定のselect()で任意のタイムアウト秒数を設定できるサンプルが出来ました。

そもそもSYN+ACKを返したりするのはOSのTCPスタック内部の処理なので、ユーザーランドからはそこまで制御できないのでは?と思ったり・・・。SOCK_RAW使ったら出来るかな?

また来週末位に、気力が残っていたらサーバ側で select() + accept() するパターンを実験してみようと思います。

以下は参考にしたリンクです。


プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2013-07-28 18:30:22
md5:015ef60f297ffdc5445c0de1e7c61504
sha1:255a8549f62b6ea52fab7b1ecc1d71fe6f04ea84
コメント
コメントを投稿するにはログインして下さい。