ネットワークプログラミング相談室 Port24
■ このスレッドは過去ログ倉庫に格納されています
0001lmtp
2009/07/07(火) 00:46:28Programming UNIX Socket FAQ (日本語訳)
http://www.kt.rim.or.jp/~ksk/sock-faq/indexj.html
Winsock Programmer's FAQ (日本語訳)
http://www.kt.rim.or.jp/~ksk/wskfaq-ja/
関連リンクは>>2-10辺り
足りなかったら適当に付け足してね
前スレ
ネットワークプログラミング相談室 Port23
http://pc12.2ch.net/test/read.cgi/tech/1230466044/
関連スレ
ネットワークプログラミング雑談
http://pc12.2ch.net/test/read.cgi/tech/1235800707/
Java ネットワークプログラミング 【教えて!】
http://pc11.2ch.net/test/read.cgi/tech/1086238859/
0136デフォルトの名無しさん
2009/07/29(水) 03:54:36んな訳あるかい
0137デフォルトの名無しさん
2009/07/29(水) 09:12:15フラグメントがどのレイヤで発生するのか、勉強し直せ。
0138デフォルトの名無しさん
2009/07/29(水) 10:14:200139デフォルトの名無しさん
2009/07/29(水) 19:41:39サーバ側マシン命令を送って(例えば move とか)
サーバ側マシン上においてOpenGLで描画されている3DCGを動かす
プログラムを作りたいと思っています。
この場合,サーバ側は,マルチスレッドにするしか方法はないのでしょうか?
クライアントから命令がくる→OpenGLに反映
はマルチスレッドじゃないとむりぽ!?
えろいひと、よろしくおねがいします。
0140デフォルトの名無しさん
2009/07/29(水) 19:49:25OpenGLをマルチスレッドで動かすほうが面倒じゃね?
0141デフォルトの名無しさん
2009/07/29(水) 20:00:35シングルプロセス/シングルスレッド構成でも実現できると思うが、
想定している言語(C/C++/Java/Ruby/ObjC)や
プラットフォーム(Win/Linux/MacOSX)を明記してくれないと
アドバイスのしようがない。
0142デフォルトの名無しさん
2009/07/29(水) 20:04:58早速のご回答ありがとうございます。
iPhone上のOpenGL ESで描いたCGを母艦マシン(MacOSX)から
操りたいと考えています。
そのため,仕様言語はObjective-Cになります。
スレッド・プロセスまわりの話しに詳しくないので
何が最適なのか戸惑っています。
もうしわけありませんが、ご教示いただければ幸いです。
0143デフォルトの名無しさん
2009/07/29(水) 20:05:25結局は何もつくれないに一票
0144デフォルトの名無しさん
2009/07/29(水) 20:18:56Rubyがお勧め。標準でdRuby(分散オブジェクト)があるし、
OpenGLはRuby-GNOME2で実装されている。
プロジェクトが構想段階なら検討してみては?
0145デフォルトの名無しさん
2009/07/29(水) 20:28:470147デフォルトの名無しさん
2009/07/29(水) 20:55:450148デフォルトの名無しさん
2009/07/29(水) 22:03:03iPhone向けの開発経験は無いけどReference Libraryを漁ってみた。
まずNSProx/NSConnectionで分散オブジェクトが簡単だろうと思ったが、
iPhoneOSのFoundation FrameworkにはNSConnectionクラスが見当たらない。
次にCFNetwork(Core Foundation)にはHTTP/FTP/Web Service向けのクラスは
存在するけど、どれもクライアント側のプロトコルしか実装されていない。
結論として、直にTCPソケット(CFStream)を操作して独自のプロトコルを
実装するしかないと判断する。(TCPコネクション確立はiPhone側から開始)
送受信メッセージのエンコーディングには、PropertyListを利用するのが
良いと思われる。(想定転送データ量によってバイナリ/XML形式の選択を決断)
で、最終的に質問のマルチスレッディングの要否についてだけど、
run loopにコールバック関数を登録する事で非同期I/Oが実現できるから、
結論として「マルチスレッディング無しで実装可能」と判断する。
iPhone Reference Libraryにある文書"CFNetwork Programming Guide"の
章"Preventing Blocking When Working with Streams"を参照してみてください。
実際に試した訳ではないので(すべて推測なので)、間違ってたらゴメソ
0150148
2009/07/29(水) 23:23:04MacをクライアントそしてiPhoneをOpenGL表示サーバと位置づけ、
メッセージの対話形態としては「要求/応答/通知」方式にするのが良いと思う。
具体的には、Mac上のアプリケーションが表示メソッドを呼び出すと、
要求メッセージが送信され、iPhone上の表示サーバで要求された描画処理が
完了すると応答メッセージを返信する。またiPhone側からアプリケーションへ
イベントを発行したい場合(たとえば処理中断ボタンがタップされた)には、
通知メッセージを送信する。
おそらくX-Window Systemのコアプロトコルが参考になる。
意外にもWikipediaの文書が充実しているので、一読を勧めます。
ttp://ja.wikipedia.org/wiki/X_Window_System_コアプロトコル
RPCと分散オブジェクトを(Foundation Framework無しに)自力で実装する
わけですから、もしも汎用的な「リモートOpenGL表示システム」の設計を
目指すとしたら、かなり大変な作業になると思います。
でも、がんばって挑戦してみてください!!
0151デフォルトの名無しさん
2009/07/30(木) 11:51:422chに書き込めない原因がわかりません。誰か手伝ってくれますか?
http://www1.axfc.net/uploader/Sc/so/22688.zip
0152デフォルトの名無しさん
2009/07/30(木) 12:36:020153デフォルトの名無しさん
2009/07/30(木) 12:45:04V~~''-山┴''''""~ ヾニニ彡| 手伝う・・・・・・!
/ 二ー―''二 ヾニニ┤ 手伝うが・・・
<'-.,  ̄ ̄ _,,,..-‐、 〉ニニ| 今回 まだ その時と場所の
/"''-ニ,‐l l`__ニ-‐'''""` /ニ二| 指定まではしていない
| ===、! `=====、 l =lべ=|
. | `ー゚‐'/ `ー‐゚―' l.=lへ|~| そのことを
|`ー‐/ `ー―― H<,〉|=| どうか諸君らも
| / 、 l|__ノー| 思い出していただきたい
. | /`ー ~ ′ \ .|ヾ.ニ|ヽ
|l 下王l王l王l王lヲ| | ヾ_,| \ つまり・・・・
. | ≡ | `l \__ 我々がその気になれば
!、 _,,..-'′ /l | ~''' そのzipを開くのが
‐''" ̄| `iー-..,,,_,,,,,....-‐'''" / | | 10年後 2chが無くなってからということも
-―| |\ / | | 可能だろう・・・・・・・・・・ということ・・・・!
0154デフォルトの名無しさん
2009/07/30(木) 12:52:010155デフォルトの名無しさん
2009/07/30(木) 12:55:12無かったね。218行目と357行目付近にWriteSz("\r\n");を追加。
0156デフォルトの名無しさん
2009/07/30(木) 13:30:43{
wsprintf(buf, "; %s=%s", it->first.c_str(),
url_escape(it->second).c_str());
WriteSz(buf);
}
これって cookie.end() にもデータはあるんだろ?
do
{
・・・処理・・・
}while(it != cookie.end()); じゃね?
0157デフォルトの名無しさん
2009/07/30(木) 13:37:09http://www.cplusplus.com/reference/stl/map/end/
0158デフォルトの名無しさん
2009/07/30(木) 13:40:090159デフォルトの名無しさん
2009/07/30(木) 14:32:190160デフォルトの名無しさん
2009/07/30(木) 14:34:070161デフォルトの名無しさん
2009/07/30(木) 14:35:190162デフォルトの名無しさん
2009/07/30(木) 16:06:02天邪鬼どもが
0163デフォルトの名無しさん
2009/07/30(木) 16:16:41アップしてくれ
0164デフォルトの名無しさん
2009/07/30(木) 16:23:550165デフォルトの名無しさん
2009/07/30(木) 16:25:02何でやねん、数行しか変わってないがな。
うまくいかんのならそう書けば。
そうそう、pc11.2ch.net を pc12.2ch.netに変えたりもしたけど。
0166デフォルトの名無しさん
2009/07/30(木) 16:43:230167デフォルトの名無しさん
2009/07/30(木) 23:04:220168デフォルトの名無しさん
2009/07/30(木) 23:15:36非同期系ではそういう幻想を持たないほうがいい。
0169デフォルトの名無しさん
2009/07/30(木) 23:20:34そうなんですか。あるんですか。。
デバッグ中にブロックされていないはずの recv() が WSAEWOULDBLOCK を
返すところを見ちゃった気がするのですが気のせいだと思ってました。 orz
0170デフォルトの名無しさん
2009/07/30(木) 23:45:35通常ありえないよ。
デバッガで止めてたからとか。
0171デフォルトの名無しさん
2009/07/31(金) 00:45:32戻りを確認するifを入れて実際に起きるかどうか確認すればいい。
0172デフォルトの名無しさん
2009/07/31(金) 11:25:21「ERROR:ブラウザを立ち上げなおしてみてください。」
て出てきてできなかった。
http://www1.axfc.net/uploader/Sc/so/23023.zip
0173デフォルトの名無しさん
2009/07/31(金) 22:26:18確かにデバッガで止めてはいたのですが。。
色々調べてみるとWin9x系では起きるがNT系では起きないとか
select()はブロックされない事を完全には保証しないとか。
サンプルプログラム等をみるとselect()は非ブロックキングソケットを
使うのが前提となっているみたいですな。
ブロッキングされないのが保証されるのならブロッキングソケットでも
問題ないはずですが。
0174デフォルトの名無しさん
2009/07/31(金) 22:32:30ブロックされないのが保証できないなら、インターネット動いてねーわ。
0175デフォルトの名無しさん
2009/08/01(土) 00:04:37ブロッキングの意味を間違えて理解してる気がする。
あと、
>select()はブロックされない事を完全には保証しないとか。
という一文についても、日本語の解釈が誤っているのでは?
これは、ソケットにデータが到着していないにもかかわらず、
selectが戻ることがある(=ブロッキングを保証できない)、
という意味だと思う。言い換えると、selectが戻っても
いざreceiveしてみると受信データ長=0になることも時にはあるから、
その場合はもう一度selectをかけておくれ、を期待しているのではないかな。
最後におせっかいを言うと、何かトラブルが発生したとき、
「....だから、問題ないはず」という思い込みは解決のさまたげになる。
「....だけど、どこかに問題があるはず」という発想でいこうよ。
0176デフォルトの名無しさん
2009/08/01(土) 00:20:24受信データ長=0はfinがきたってこと。
それでもう一度selectって処理は普通しない。
そうでなければTCP的に言えば受信データ長0ってのは
確認応答しかありえない。これは上位レイヤーに届くことはない。
と言ってみる。
0177デフォルトの名無しさん
2009/08/01(土) 00:28:02長さ1以上はデータ、0は通信の終了を意味する。
TCPがデータストリームの実装だという事を忘れている。
0178デフォルトの名無しさん
2009/08/01(土) 00:40:25では、
>いざreceiveしてみると受信データ長=0になることも時にはあるから、
の部分は、
>いざreceiveしてみるとエラー(EAGAIN or EWOULDBLOCK)になることも時にはあるから、
に訂正する。
0179デフォルトの名無しさん
2009/08/01(土) 12:10:552chへの書き込みができない。誰か助けて!
http://www1.axfc.net/uploader/Sc/so/23023.zip
0180デフォルトの名無しさん
2009/08/01(土) 13:02:00C/C++の宿題片付けます 129代目
http://pc12.2ch.net/test/read.cgi/tech/1242876647/
いろんな言語で宿題スレ
http://pc12.2ch.net/test/read.cgi/tech/1197620454/
C#,C#の宿題片付けます。
0181デフォルトの名無しさん
2009/08/01(土) 13:10:28ブロックすることあるよ」って書いてあるな。
0182デフォルトの名無しさん
2009/08/01(土) 13:25:00宿題スレに書けと? 宿題じゃないんだけど。
0183デフォルトの名無しさん
2009/08/01(土) 16:22:15これか・・・
http://www.linux.or.jp/JM/html/LDP_man-pages/man2/select.2.html
>データが到着したが、検査でチェックサム異常が見つかり廃棄された
>時などに起こりえる。
一体どこで検査してんだ
破棄したなら上に投げるなよw
明らかに違反してるだろ
時など、って他にもあるなら書けよ
省略すんなよ
0184デフォルトの名無しさん
2009/08/01(土) 18:40:57自分でネットの勉強ぐらいしろよ。
0185デフォルトの名無しさん
2009/08/01(土) 18:51:30http://pc12.2ch.net/test/read.cgi/tech/1224449899/
0187デフォルトの名無しさん
2009/08/02(日) 05:48:55Linux TCP/IPドライバの中の人を擁護してみると、
一般論としてselectを前提にしたAPI(ソケット/デバイス/ライブラリなど)の場合、
selectでREAD可能を返したのにread操作でデータ無しとなってしまう事態は、
どうしても避けることができないケースが存在しえることを理解してほしい。
今回のLinux TCP/IPドライバの場合、受信割り込みの延長でのチェックサム計算は
(システム全体の応答性能を劣化させるから)避けたかったのだろうと推測する。
だから最近のAPIでは(特にGUI向けAPIでは)、APIの内部でevent loop & selectを実行し
本当にデータが到着した場合にだけ(事前にアプリケーションが登録した)
call back関数を呼ぶという方式が増えているのだと思う。
この方式であれば今回のselectの問題だけでなく、このスレでたびたび話題となっている
受信メッセージの組み立て処理もAPI側で吸収できる(アプリケーションから隠蔽できる)
利点がある。
0188デフォルトの名無しさん
2009/08/02(日) 08:35:44> 今回のLinux TCP/IPドライバの場合、受信割り込みの延長でのチェックサム計算は
> (システム全体の応答性能を劣化させるから)避けたかったのだろうと推測する。
割り込み処理は, 読み込んだ物理層のフレームをソケットバッファにつないで
ソケットバッファ持ってるプロセス(スレッド)を起こすだけ.
IPヘッダやさらに上位の層のチェックサムはプロセスコンテキストで計算して
る
到着したセグメントを捨てた後, 再度新規セグメントの入力待ちに移行する方
法を選択しなかっただけ.
おそらく, 初期の腐りきったスタックの挙動と互換性を取る為だとおもわれる.
0189デフォルトの名無しさん
2009/08/02(日) 09:02:37TCP/IPのタイムアウトの設定なんかかなり古いもんを引きずっている気がする。
connect()なんてタイムアウトまで待ちきれなくて自分で切ってるし
TIME_WAITなんかも長く居座り過ぎだし。
今のギガビットのネットワークにはそぐわないな。
0190デフォルトの名無しさん
2009/08/02(日) 09:20:05> TIME_WAITなんかも長く居座り過ぎだし。
RFC で 2MSL と決まってる
0191187
2009/08/02(日) 09:28:17詳しい解説ありがとう。TCP/IPドライバの実装に詳しそうだから教えてほしいのだけど、
>割り込み処理は, 読み込んだ物理層のフレームをソケットバッファにつないで
>ソケットバッファ持ってるプロセス(スレッド)を起こすだけ.
とありますが、起こすのはシステムプロセス(システムスレッド)でいいのでしょうか?
もしアプリケーションプロセスだと、そのプロセスが監視(select or recv)していない時は
フレーム受信キューに溜まりっぱなしになってしまう訳だから。
ただ、そうだとすれば、チェックサム計算はシステムプロセスで実行して
エラーであれば破棄し、正常であれば(上位の)ソケット受信キューへつないで
アプリケーションプロセスを起こすように実装していれば、
(チェックサム計算エラーに限定すると)今回のselect問題は発生しなかったように思えます。
その辺が自分にはよく分からないのですよ。
0192デフォルトの名無しさん
2009/08/02(日) 10:07:53> とありますが、起こすのはシステムプロセス(システムスレッド)でいいのでしょうか?
そだよ.
> フレーム受信キューに溜まりっぱなしになってしまう訳だから。
どっちにしても, 受け取る奴がいないとたまりっぱなし
window size = 0 で ack 返して送信側がそれ以上送らないように制御する
UDP だと黙って捨てる
> エラーであれば破棄し、正常であれば(上位の)ソケット受信キューへつないで
> アプリケーションプロセスを起こすように実装していれば、
BSD 系の実装だとそうなってるし, Linux も 2.0 から 2.2 へ移行するときの
大幅にスタック書き換えたタイミングで, そうゆう実装をする選択枝も可能
だったはず.
ソース眺めても, そんなに大変な変更じゃないし………
結局は, 過去との互換性を取ったって事ではあるまいか?
0193デフォルトの名無しさん
2009/08/02(日) 10:14:350194187,191
2009/08/02(日) 10:21:39過去との互換性ですか。
もしTCP/IPスタックの実装を参考にしようと思ったら、
(Linuxではなく)BSD系のコードを追ったほうが良さげですね。
どちらにしてもスレから脱線した質問ですので、これで終わりにします。
レスありがとうございました。
0195デフォルトの名無しさん
2009/08/02(日) 11:54:18もっと続けて欲しい
0196デフォルトの名無しさん
2009/08/02(日) 12:26:02ネットで拾えるサンプルプログラムがDQNな実装(特に.Net系)だったりするので
挙動が分かってないと苦労しまするよ。
0197デフォルトの名無しさん
2009/08/02(日) 12:27:58> 受信割り込みの延長でのチェックサム計算は(システ
> ム全体の応答性能を劣化させるから)避けたかったの
> だろう
昔組み込み向けネットワークドライバを Linux でクロ
ス開発してて、テストとして Linux のパケットをルー
プバックデバイス経由で RAW ソケットで読んでもチェッ
クサムが合わなくてさぁ…。
FreeBSD でやったら一発で通って「なんじゃそら」って
なもんでしたよ。
0198デフォルトの名無しさん
2009/08/02(日) 12:32:200199デフォルトの名無しさん
2009/08/02(日) 12:35:21そうなん?
Linux鯖って結構稼動している気がするが。
0200デフォルトの名無しさん
2009/08/02(日) 15:15:26パケット生成時にチェックサム作るなんてことしない。
その辺考慮してないと197みたいなことになる。
0201デフォルトの名無しさん
2009/08/02(日) 15:57:39自分のルータのグローバルIPアドレスを外部鯖にHTTP接続して取得したいのだけど、
【IPのみ】をページ表示してくれる有名な鯖とかってある?
本当はホスト名を一発表示してくれるとこがいいけど、
まーAPIでなんとかなるんでとりあずIPで!
0202201
2009/08/02(日) 15:59:44IPのみというのは、IPアドレス以外の無駄な情報が無いってこと。
正規表現とかHTMLパーサーとか使うのが面倒なので・・・。
0203デフォルトの名無しさん
2009/08/02(日) 16:02:160204201
2009/08/02(日) 16:03:50汎用的な方法がしりたいんでつ
いろいろな場所で使いたいので、ルータ固有となるとちょっと・・
SNMPも一般向けのルータにはあまりないらしいので。
0205デフォルトの名無しさん
2009/08/02(日) 16:25:49汎用的な方法は、自分のルータのグローバルIPアドレスを
Dynamic DNSに登録して、その名前でIPアドレスを検索すること。
登録するドメインは自分で取得してもいいし、借りてもいい。
おそらく自宅鯖を外部からアクセスしたいんだとエスパーするけど、
汎用的な方法はこれしかない。
DNSへの登録が嫌で、なおかつ汎用的でなくても良ければ、
自分で安いレンタル鯖を借り、要求元のIPだけを返すCGIを置けばいい。
いずれにしても板違いの質問だよ。
自宅サーバ板/通信技術板/ネットサービス板へドーゾ。
0206デフォルトの名無しさん
2009/08/02(日) 16:27:38へぇ〜、そんなハードもあるんだ。。
一般のパソコンにも実装されてるの?
0207デフォルトの名無しさん
2009/08/02(日) 16:35:00そういうサーバを立てればいいだけじゃね?
0208デフォルトの名無しさん
2009/08/02(日) 16:38:38> いまどき、IPはもちろん、TCPチェックサムまでは、送信受信ともハードウェアの仕事でしょ。
> パケット生成時にチェックサム作るなんてことしない。
NAT とかどうすんのさ。仮想レイヤは? 一々ハードウェ
アレイヤまで落すのか? そもそも NIC 持ってないマシ
ンでの SLIP とかどうすんの?
0209デフォルトの名無しさん
2009/08/02(日) 16:42:49基本reject_hostに入れてる。
犬のTCP/IPスタック周りの挙動は怪しいよな。学習用のminix由来じゃしょうがないが。
0210デフォルトの名無しさん
2009/08/02(日) 16:48:04> 学習用のminix由来
Minix なめんな(w
http://www.minix3.org/
0211デフォルトの名無しさん
2009/08/02(日) 16:50:580212201
2009/08/02(日) 16:52:57板違いなのに答えてくれてサンクス
自分がだけが使うわけではないから、DynamicDNS登録もcgiもパスかな。
素直に診断君とか、適当な鯖にUDP送って取得することにする
どもでしたー
0213デフォルトの名無しさん
2009/08/02(日) 16:53:14おそらく以下の記事にある「TCPチェックサムオフロード」の事を
>>200は言っているのだと思う。
FreeBSD 10ギガビットネットワーク高速通信の秘密(2008/10/29)
[3] ハードウェアオフロードによる処理の高速化
http://journal.mycom.co.jp/articles/2008/10/29/bsdcon5/002.html
ただしサポートしているのは一部のサーバ向けハイエンドNICだけだったはず(?)だし、
ましてや>>197は「組み込み向けネットワークドライバ」と明記しているから、
>>200の言う「いまどき」が何を(or いつの時代)を指しているのかよくワカランwww
0214デフォルトの名無しさん
2009/08/02(日) 16:54:48shutdown(soc, SHUT_RDWR);
close(soc);
0215デフォルトの名無しさん
2009/08/02(日) 17:37:52何年前から来たんだよ。FEの時代は高級品だけだったけど、GbEならオンボだつて蟹だってついてる。>TOE
Windowsのハードウェアのプロパティにチェックサムオフロードの設定あるだろ。
オフロードが効いてるとWiresharkでチェックサムエラーになるから判る。
Linuxは、ドライバ設計が古くてTOE使えない時期が長かったけど、流石に今は対応してたはず。
0216デフォルトの名無しさん
2009/08/02(日) 17:44:54通信シーケンスに自信がないなら入れておくという程度。
sdの状態的にSHUT_RDWRを指定した時FINハンドシェークが起こるが、
closeをいきなり呼んでも暗黙的にこの処理は行なわれる。
半二重通信でもしない限り明示的なshutdownは必要ない。
ただし、能動通信側が送りっぱなしで突然閉じるようなことをすると、
shutdown無しの場合受動通信側のパケットを無駄に待ってしまったりと
sdが完全に無効になるまで時間が掛かる場合がある。
0217デフォルトの名無しさん
2009/08/02(日) 18:03:18shutdown(SHUT_WR)
recv() でゼロかエラーが帰ってくるまで待つ。
(どちらも帰って来ない場合もあるのでタイムアウト処理を入れる)
close()
こんな面倒くさい(お行儀の良い)処理をしなくて一方的に切断しても特に
問題ないって事ですか?
0218デフォルトの名無しさん
2009/08/02(日) 18:26:47>Linuxは、ドライバ設計が古くてTOE使えない時期が長かったけど、流石に今は対応してたはず。
いやデスクトップはいいんだけど、>>197の言う「組み込み向けLinuxボード」でも対応してますか?
>>206の質問にある、(チェックサムオフロードをサポートした)ハード(ボード)にも答えて下さいませ。
あなたは>>200のレスで、>>197に対して「いまどき」と発言しているんですが........。
一般的な事実(独り言)としては正しいのかもしれないけど、質問に対する返答になってない気がします。
0219デフォルトの名無しさん
2009/08/02(日) 18:52:09TOEってちゃんと動くか? 動かない条件のほうが多いと思うよ。
0220デフォルトの名無しさん
2009/08/02(日) 19:29:20>TOEってちゃんと動くか? 動かない条件のほうが多いと思うよ。
いや、>>215の住む世界だと、Linux/WindowsともGbEでさえあれば、
TOEが動くのが今時は当然な事らしい....。
0221デフォルトの名無しさん
2009/08/02(日) 20:00:40話をややこしくして済まないんだが、「クロス開発」で
あって別に Linux 向けの組み込みじゃなかったのよ。
ターゲットは OS から俺一人で書いた奴(RISC CPU で
メモリがバンク切り替えな環境)。
でもって開発環境だった Linux をネットワークドライ
バテストの対向ルーチンにしようとしてて、たとえば
UDP パケットを Linux 側で作ってループバックデバイ
ス通して RAW ソケットで読んで自前のドライバのテス
トケースに突っ込んで…ってなことをやってたわけ。
別にハードウェアで計算するならするでいいけどさ、そ
れなら仮想的なループバックデバイスを使う場合はそこ
で計算すべきじゃないかと思うんだ(計算しない理由は
パフォーマンスを稼ぎたいというのが正解で、コンパイ
ルオプションで計算が有効になるようになってたところ
までは調べた)。
因みにちょっと前にあった「NAT 通した時にチェックサ
ムおかしいんだけど…」なんていうバグはこの辺に起因
してる気がする。くわばらくわばら(w
0222デフォルトの名無しさん
2009/08/02(日) 20:20:07だからぁ、「一般的には問題ない。でも、ある特別なケースでは
問題となるかもしれない」と>>216はレスしている。
その可能性のあるケース(の一部)も>>216でレスされている。
それが>>217に当てはまるかどうかは、>>217が想定してる状況を
明記してくれないと、エスパーでもない限り誰にも返答できないよ。
横レス失礼
0223デフォルトの名無しさん
2009/08/02(日) 20:59:17>>216 は、
shutdown(SHUT_RDWR)
close()
と
close() #暗黙的にshutdown処理されるので
は同じだと言っている。
であればshutdown()は意味のないことに成る。
だったら、>>217 の処理はしなくて close() でいきなり
ソケットを閉じても問題ないってこと?
TIME_WAITで処理されるのでどんな切り方をしょようと
結局は皆同じってことでよいのかな??
0224デフォルトの名無しさん
2009/08/02(日) 21:23:380225デフォルトの名無しさん
2009/08/02(日) 21:33:51IPBANされるぞw
0226デフォルトの名無しさん
2009/08/02(日) 21:42:11(゚◇゚)ゞラジャ -
でも、shutdownしたら鯖の電源が落ちました〜
0227デフォルトの名無しさん
2009/08/02(日) 21:53:59実際はプロトコルによって変わるとしか言えない。
APIの呼び出し手順みたいな単純な話には置き換えられない。
0228デフォルトの名無しさん
2009/08/02(日) 22:01:16ハードウェアに用意してある場合が多い。
もっともエラータで使えなかったりするが。>microchipのやつ
0229222
2009/08/02(日) 22:17:58だから、「一般的」には
>だったら、>>217 の処理はしなくて close() でいきなり
>ソケットを閉じても問題ないってこと?
で問題ないと(>>216の先頭に)書いてあります。
>TIME_WAITで処理されるのでどんな切り方をしょようと
>結局は皆同じってことでよいのかな??
これも、「一般的」には同じと考えてかまいません。
でもね、数百、数千台のクライアントの相手をしなければならない
サーバ環境を想定してみてください。大量に残ってしまった
(カーネル空間内の)TIME_WAIT待ち状態が、システム性能に
深刻な悪影響を与えかねないという事は分かってもらえますか?
もしもそのようなシビアな状況を想定しているのであれば、
(>>216にある「送りっぱなしで突然閉じる」ようなことをせずに)
きちんと手順をふんでTCPコネクションを解法するよう実装すべきです。
でも、>>217,223の想定している状況がどれほどシビアなのかは
本人にしか知り得ないから、誰にも返答できないと>>222でレスしました。
0230デフォルトの名無しさん
2009/08/02(日) 22:33:24>サーバ環境を想定してみてください。大量に残ってしまった
>(カーネル空間内の)TIME_WAIT待ち状態が、システム性能に
>深刻な悪影響を与えかねないという事は分かってもらえますか?
どんな切り方をしようが先にshutdown()した方にTIME_WAIT状態の
セッションが2MSLは残るんじゃないの?
0231222
2009/08/02(日) 22:51:27失礼、>>229内にあるTIME_WAITは誤りで、FIN_WAITに訂正します。
(>>216にも、きちんと「FINハンドシェークが...」と書いてありました)
0232デフォルトの名無しさん
2009/08/02(日) 23:16:01FIN_WAITって鯖側のソケットをclose()しても残ったままになるの?
0234デフォルトの名無しさん
2009/08/02(日) 23:35:32世の中には一方通行通信で良い場合もあるし、一方通行
で構わないタイミング(たとえば、片方は言いたいこと
を全部言い終わったとか)もある。shutdown() で片方
閉じるってのは元々そういう用途だよ。
0235デフォルトの名無しさん
2009/08/02(日) 23:39:05RFC見ましたがソケット関数とtcp状態遷移の関係がわからない。。
首吊って人生やりなおしてきます。orz
0236デフォルトの名無しさん
2009/08/03(月) 00:15:25■ このスレッドは過去ログ倉庫に格納されています