1 名前:デフォルトの名無しさん mailto:sage [2010/12/25(土) 22:46:56 ] 主にソケットに関しての質疑応答スレッドです。 Programming UNIX Socket FAQ (日本語訳) www.kt.rim.or.jp/~ksk/sock-faq/indexj.html Winsock Programmer's FAQ (日本語訳) www.kt.rim.or.jp/~ksk/wskfaq-ja/ 関連リンクは>>2-10 辺り 足りなかったら適当に付け足してね 前スレ ネットワークプログラミング相談室 Port26 hibari.2ch.net/test/read.cgi/tech/1269343909/ 関連スレ ネットワークプログラミング雑談 hibari.2ch.net/test/read.cgi/tech/1235800707/ Java ネットワークプログラミング 【教えて!】 hibari.2ch.net/test/read.cgi/tech/1086238859/
159 名前:デフォルトの名無しさん mailto:sage [2011/03/17(木) 14:18:43.99 ] setsockoptでTCPの再送間隔と再送回数を制御したいんだけど なにをいじるんだっけか
160 名前:デフォルトの名無しさん [2011/03/17(木) 14:18:52.60 ] おっぱい!
161 名前:デフォルトの名無しさん mailto:sage [2011/03/17(木) 17:32:18.42 ] >>159 OSは? *BSD なら sysctl で設定 Linux なら /proc で設定 Windows はしらん その他の Unix なら man よめ
162 名前:デフォルトの名無しさん mailto:sage [2011/03/18(金) 14:08:08.96 ] >>161 setsockoptで制御したいんです。
163 名前:デフォルトの名無しさん mailto:sage [2011/03/18(金) 17:12:57.19 ] >>161 ワロタ、setsockoptで言っているのに いつもトンチンカンなことをして周りに迷惑かけてるんじゃないか
164 名前:デフォルトの名無しさん mailto:sage [2011/03/19(土) 14:50:47.28 ] >>163 sockopt インターフェースは, カーネルのソース読むとないな, *BSDとLinux
165 名前:デフォルトの名無しさん mailto:sage [2011/03/19(土) 15:02:58.74 ] Windowsだってソケットごとには設定できないよ
166 名前:デフォルトの名無しさん mailto:sage [2011/03/19(土) 15:22:20.24 ] >>163 ここはボケないと
167 名前:デフォルトの名無しさん mailto:sage [2011/03/22(火) 11:19:33.73 ] >>161 Linuxだけどさ、どこで設定するのよ そんな設定箇所無いよ 憶測でモノを言っているの?
168 名前:デフォルトの名無しさん mailto:sage [2011/03/22(火) 17:14:46.99 ] 教えてください。 もしスレチでしたら誘導をお願いします。 以下のようなことをしたいとお勉強中です。 ・snmp を使用してネットワーク上の機器の状態を管理する ・状態の取得には snmp の trap を使用する ・ネットワーク上には snmp のバージョン v1 と v2c の機器が存在していて両方に対応したい ・当人はソケットを使用したプログラムは経験があるものの、ネットワークそのものは初心者 で、質問です。 ・v1 trap の PDU には Enterprise などがありますが、v2c には存在しません。 これは v2c では取得できないということでしょうか。データ部に存在するのでしょうか。 ※できれば v1 と v2c の実処理を行なう箇所を同じ処理で統一したいため同じデータを取得できたら便利だな、と ・v2c trap の PDU は v2 のものと構成が同じであり、 Comunity の部分だけが v1 と同等であるとの認識は正しいでしょうか よろしくお願いします。
169 名前:デフォルトの名無しさん mailto:sage [2011/03/22(火) 23:24:39.15 ] 誰かツイッターapiについて詳しい人いませんか? api制限で150回までに制限されてしまうのは仕方ないのでしょうか? でもtweenとかは常に最新の状態に更新出来ている気がするのですが。。 あれはどうやっているのでしょうか?
170 名前:デフォルトの名無しさん mailto:sage [2011/03/23(水) 10:49:22.40 ] >>169 APIを使わなくても見れる情報なら、APIを使わなければよい
171 名前:デフォルトの名無しさん mailto:sage [2011/03/24(木) 00:32:35.57 ] >>169 >api制限で150回までに制限されてしまうのは仕方ないのでしょうか? いいえ。 個別に交渉すれば、割と簡単に制限を緩めてもらえるみたいです。
172 名前:デフォルトの名無しさん mailto:sage [2011/03/24(木) 12:15:07.27 ] >>170-171 API使わなくても見れる情報というのは例えばどんなものでしょう? 個別に交渉するということはどういうことですか?
173 名前:デフォルトの名無しさん mailto:sage [2011/03/24(木) 13:41:55.22 ] >>172 ブラウザ使ってツイッタ見た事ないのか? html 取得すればよい。鯖負荷は・・・・。
174 名前:デフォルトの名無しさん mailto:sage [2011/03/24(木) 19:32:59.58 ] やはりその方法でしたか。 鯖負荷ってどれぐらいのアクセス数なら大丈夫でしょうか? 一秒1アクセスはやっぱきついですかね?
175 名前:デフォルトの名無しさん mailto:sage [2011/03/24(木) 20:34:01.37 ] >>174 WEBアクセスでも認証なしで同一IPから何度もアクセスしてるとAPIと同じようにブロックされるよ
176 名前:デフォルトの名無しさん mailto:sage [2011/03/24(木) 22:29:35.14 ] 1アクセス/1秒は、偽計業務妨害の疑いで逮捕、20日間勾留されるくらい、悪質な行為。
177 名前:デフォルトの名無しさん mailto:sage [2011/03/25(金) 11:38:58.02 ] 逮捕されるところでした・・ ありがとうございました・・
178 名前:デフォルトの名無しさん mailto:sage [2011/03/25(金) 17:59:51.89 ] ブチこまれた前例つくっちゃってるからな 前例がある事は容赦なく捕まえるぞ警察は
179 名前:デフォルトの名無しさん mailto:sage [2011/03/25(金) 20:48:52.41 ] >>176 無罪になったんだから別によくね? 拘留期間中の分お金もらえるし
180 名前:デフォルトの名無しさん mailto:sage [2011/03/25(金) 21:19:42.91 ] 不起訴処分と無罪はまったく別物だぞ
181 名前:デフォルトの名無しさん mailto:sage [2011/03/25(金) 21:45:30.86 ] 有罪だが罰はほぼ勘弁してやった、という結果だったよな
182 名前:デフォルトの名無しさん mailto:sage [2011/03/26(土) 23:32:01.24 ] 懲りずにやる奴が出て売ると、有罪+実刑になるパターン
183 名前:デフォルトの名無しさん mailto:sage [2011/03/26(土) 23:32:10.35 ] 毎秒ごとに株価とか為替採りたいと思ってた所だったw 前例有るのかw
184 名前:デフォルトの名無しさん mailto:sage [2011/03/26(土) 23:36:53.11 ] 岡崎図書館 岡崎市立図書館 で検索してみ
185 名前:デフォルトの名無しさん mailto:sage [2011/03/26(土) 23:41:36.56 ] ネットワークプログラミングをやってる人間であれば、知っておかなければ恥だ
186 名前:デフォルトの名無しさん mailto:sage [2011/03/26(土) 23:43:10.39 ] 恥で済めばいいが、人生終了しかねないからな
187 名前:デフォルトの名無しさん [2011/03/26(土) 23:48:55.16 ] ネットワークプログラミングの勉強中で、以下のようなプログラムを作成しています。 1.ソケットを3つ開き、selectで待ちます。 (a_fd、b_fd、c_fdとする。) 2.受信したデータはソケットごとに保持。 (a_fdで"HELLO"、b_fdで"SeeYou"、c_fdで"Hi"というデータを受信したら a_fd:HELLO b_fd:SeeYou c_fd:Hiという風に ) 3.新しいデータを受信したら上書きする (a_fdで"Bye"を受信したらHELLOを上書き) 4.各fdから1分間何も受信しなければそのfdのデータを削除する。 (a_fdから1分間受信しなければa_fd: b_fd: SeeYou c_fd:Hiとなる) 1〜3までは作成できますが、4のアルゴリズムが分かりません。 selectのタイムアウトを1分にするのかと思いましたが、それだと各fdではなく全てのfdから1分間受信しなかった場合しか 判断できないですよね? どのようにすれば各fdの時間を判断できますか? よろしくお願いします。
188 名前:デフォルトの名無しさん mailto:sage [2011/03/27(日) 01:04:06.59 ] 各fd毎に最終受信時刻を記録しておき、selectに入る前にチェックする。
189 名前:デフォルトの名無しさん mailto:sage [2011/03/27(日) 02:00:52.73 ] >>188 なるほど〜 ありがとうございます。
190 名前:デフォルトの名無しさん mailto:sage [2011/03/27(日) 13:56:27.64 ] 今、Winsockの勉強でパケットキャプチャを作成しているのですが パケットがどのアプリケーション宛に送られて来たものなのかを 特定する方法はあるのでしょうか? よろしくお願いします。
191 名前:デフォルトの名無しさん mailto:sage [2011/03/27(日) 14:33:41.81 ] >>190 「netstat -b」で「リッスン ポートの作成に使われた実行ファイルを表示」できる。 (手元のWindows 7で確認した) これをパケットと付き合わせればよいかと。
192 名前:デフォルトの名無しさん mailto:sage [2011/03/27(日) 14:56:25.99 ] >>191 こちらはXPですがその方法でやれそうです。 ありがとうございます。
193 名前:デフォルトの名無しさん mailto:sage [2011/03/27(日) 15:35:19.92 ] おおっすげーと思ったが、 これ/etc/services参照してるだけだろw
194 名前:デフォルトの名無しさん mailto:sage [2011/03/27(日) 16:22:43.45 ] ほほう、linuxだと netstat -p でできるようだ。 いいこと聞いたありがとう
195 名前:デフォルトの名無しさん mailto:sage [2011/03/27(日) 16:48:45.76 ] >>168 そもそも 「v1 と v2c の実処理を行なう箇所を同じ処理で統一したい」を 「同じデータを取得」で実現するなら最小公倍数の項目で やるしかないからこの場合は無理。だいいち Enterprise=ベンダが勝手に定義して勝手に使うところだろ。 SNMPバージョンどころかベンダとか、最悪機器ごとに 処理変わるじゃん。アホか。 SNMPには落とし穴がいっぱいあるから (例えば32ビット数は5バイトで表現されるから気をつけろ) 目的や対象機器を具体的にせまく絞って始めないと苦労するぞ。 大した目的がないならトライ&エラーで勝手にガンガレ
196 名前:デフォルトの名無しさん [2011/03/27(日) 20:32:46.13 ] こんばんは。 ソケット、プロセス間通信でポインタを含む構造体を送受信したいのですが、どうやればいいですか? ポインタをそのまま送るのはNGだと聞きましたが。。。
197 名前:デフォルトの名無しさん mailto:sage [2011/03/27(日) 20:57:24.98 ] 送り側がデータをftpサーバにアップして 受け取り側はftpサーバからダウンロードしたほうが簡単だと思う
198 名前:デフォルトの名無しさん mailto:sage [2011/03/27(日) 21:01:46.73 ] >>196 > ポインタをそのまま送るのはNGだと聞きましたが。。。 同じアドレス空間で動いていないから、ポインターのさす先を別途送りつけるしかない その先にポインターがあったらさらにもう一回… … …
199 名前:196 mailto:sage [2011/03/27(日) 21:06:19.64 ] >>197 ソケットを使うことが条件なので。。。 >>198 構造体をポインタがない構造体にしてから送るしかないですよね。。。 ありがとうございました。
200 名前:196 mailto:sage [2011/03/27(日) 21:25:36.74 ] >>198 何度もすいません。 構造体が線形リストの場合(データが何件あるかわからない場合)、 どのように展開すればいいですか?
201 名前:デフォルトの名無しさん mailto:sage [2011/03/27(日) 21:29:01.45 ] 最初にデータの件数を数えてその個数を送るか 1件送るたびに次がまだあるか無いかを示すフラグを送るか
202 名前:196 mailto:sage [2011/03/27(日) 21:30:50.90 ] >>201 なるほど。。。すごいなぁ。 ありがとうございました。助かります
203 名前:デフォルトの名無しさん mailto:sage [2011/03/27(日) 21:31:14.54 ] やっぱりftpで送ったほうがいいと思う (まだわかんねえかな〜)
204 名前:デフォルトの名無しさん mailto:sage [2011/03/27(日) 21:33:28.76 ] ポインタ受け取ったら実体を要求すればいい。
205 名前:196 mailto:sage [2011/03/27(日) 21:39:35.27 ] >>203 すいません。 ftpで送るってどういうことですか? ソケットとは違いますよね?
206 名前:デフォルトの名無しさん mailto:sage [2011/03/28(月) 06:35:07.15 ] ソケットは手段 ftpは通信規約
207 名前:デフォルトの名無しさん mailto:sage [2011/03/28(月) 14:06:31.93 ] >>195 レス、hx 言われることはもっともなんだけれど、そういう風に要求されてしまったので可能なのだろうかと調べていたところで。 数値の扱いなども言われるとおりでちょっと苦戦していました。 ※その後、もともとのプログラムが v2c に対応していないことが判明しました。w もうちょっとがんばってみるです。 ありがとうございました。
208 名前:デフォルトの名無しさん mailto:sage [2011/03/28(月) 17:37:16.69 ] SNMP廻り全部自前で書くの? 結構難しいよ。ただただ面倒だし。 出回っているライブラリーのソース読めば その辺のことは大体分かると思う。
209 名前:デフォルトの名無しさん mailto:sage [2011/03/29(火) 22:10:44.64 ] ポインタを含むデータ構造通信の件、おいら大好物。 ゆっくりでよければ教えるよ 問題なのは、最近のOSではメモリが確保される具体アドレスは マシンごとに違うから、単にメモリアドレス値を渡しても 普通うまくいかんっつーことだな。 レアなやりかたで、メモリが確保されるアドレスをそろえてしまう ってのもある。 オイラが好きなのは、データパケットの先頭をゼロとして ポインタ値をオフセット値に変換して通信、 受信側はオフセットをポインタ値に戻す、ってやつ。 "シリアライズ"で検索するといろいろでるよ。 あと、.Net等で同一マシン内の違う言語で構造体データ渡すのにも 似たテクを使うんだが、それは検索キーワード"マーシャリング"だ
210 名前:デフォルトの名無しさん mailto:sage [2011/03/29(火) 22:37:03.78 ] > レアなやりかたで、メモリが確保されるアドレスをそろえてしまう どうやって? 相手のマシンが同じアーキテクチャである保証はない ましてや同じOSである保証はさらにない > データパケットの先頭をゼロとして > ポインタ値をオフセット値に変換して通信、 同一オブジェクトへのオフセットは, 当然, 考慮されてるんだよな こっちでは a -> x, b -> x あっちでは a -> x, b -> y だったら洒落にならないんだが…
211 名前:デフォルトの名無しさん mailto:sage [2011/03/29(火) 22:51:14.57 ] すまん、根本の話がすっとんでた。順番に書くと (1)マシンが別ならメモリアドレス値は別になるから アドレス値渡しても意味無し。 (2)マシンAでポインタを含むデータ構造を持ってて、 それをマシンBで再現できればいいのであって、 具体的なアドレスは変わっててもいい。 (3)マシンAにてパケットで表現できる形式に変換して、 マシンBに渡して、マシンBでメモリ上に再現する てのが基本。 (4)パケット表現は、テキストやバイナリがある。 テキストで有名なのはXML、JSON。 バイナリも古くからいろいろあって、 固定長好き派の NDR(IBM HP MSのRPC)やら XDR(Sun RPC)やら、 タグ・長さ・値 派のBER(SNMP)やら。 あと、いろいろ環境ツールも含めて GoogleのProtocol Buffersやら FacebookのThriftやら MessagePackやら もある。 俺が言った、「アドレス値をオフセットに〜」っていうのは バイナリパケット形式の、独自方式を自分で実装する って話。 201は多分べつの物知りさんだな、 いまocn規制できつい、ゆっくり頼むが 同一の固定OSでないと固定addrは無理だろ
212 名前:デフォルトの名無しさん mailto:sage [2011/03/30(水) 00:20:45.86 ] 浅い話を長々書くな
213 名前:デフォルトの名無しさん [2011/03/30(水) 10:07:58.23 ] >>211 > ポインタを含むデータ構造通信の件、おいら大好物。 > ゆっくりでよければ教えるよ と宣言したんだから、>>200 も考慮してきっちり教えてやれ。w
214 名前:デフォルトの名無しさん mailto:sage [2011/03/30(水) 14:01:33.18 ] なんかフォールトレランスシステムで、同じシステム上で同じアプリが複数動いてるのを前提にしてそうな環境だな。 お互いにポインタで参照し合って相互に確認しながら、動作するプログラムが組めそう。
215 名前:デフォルトの名無しさん mailto:sage [2011/03/30(水) 15:10:11.16 ] インデックスなら
216 名前:デフォルトの名無しさん [2011/03/30(水) 16:47:20.77 ] ちょっと質問いいですか。 ここの掲示板でaurasoul.mb2.jp/_shk/ 書き込むと名前の横にIDが自動的につくのですが、 このIDを変える事はできませんか?プロバイダーが変わっても串を刺してもクッキー消しても変えられない。手軽に変える方法は無いですか?
217 名前:デフォルトの名無しさん mailto:sage [2011/03/30(水) 19:22:16.64 ] ,. ' ´  ̄ ̄ ̄ ̄ ̄ `ヽ、 / / \ / / \ / /―――――――――イノ / /: : : : : : : : : : : :| | ,' ,∠ __________/ | | <__:.:.イ:.`メ、/|:/ |:./\レ:.:.〈 | ノ! |/リレ',ィrそド"´ レ ィチxV:.!:.V} /| /!:.:.! 〈. トzリ トzリ }:!::Nリ / /ソ:.:.i xx`¨´ , `¨x{:从 } / //|:.:.込、 /:.|.ハ∧ なんかわたし / /厶|:.:.|\ ヽ、 r つ ,. く:.:.:! ∧ ヽ 呼ばれた気がするんだよ? / / |:.:.|::::::> ミ 、 <} |::.:| ヽ. } /i 〃 レ‐‐く\  ̄´ /::! !:.:<フ二ヽリ ./ // / /⌒く:\ イ:::::| |:. 厶--、 } / / ( /,. ┤:::::ヽ /::::::| |:.厶--、 /
218 名前:デフォルトの名無しさん mailto:sage [2011/03/31(木) 00:24:27.59 ] どんなパケット形式を使うにしても、 (a)循環参照をどうするのか (b)同一値のエントリが2個以上あるのか とか、 そのシステムではどうなのかちゃんと 調べて設計の前提条件にしないとダメよ。 ーーーー リンクリストは後にして、まず文字列のポインタで例だそう。 1エントリに 固定長サイズの部分と可変長サイズの部分があるとするだろ。 struct Hoge { uint32_t num1; uint32_t num2; char *str1; char *str2; } したら、俺ならこの1エントリに対して例えば
219 名前:デフォルトの名無しさん mailto:sage [2011/03/31(木) 00:26:08.56 ] |----+----+----+----| |entrySize-------| //パケット独自項目 |num1------------| //ここから固定長部分 |num2------------| |str1Offset------| //データとパケットで違う項目 |str2Offset------| //データとパケットで違う項目 |str1の中身........| //ここから可変長部分 |.....文字列おわりnull| |str2の中身........| |.....文字列おわりnull、4バイト切りいいところまでnull| とかの形でパケット化するんだわ。 受信側は、 entrySize分のメモリを用意して、 num1〜str2の中身をコピーして、 str1Offsetとstr2Offsetの値を書き換えてやれば struct Hoge のできあがりと。 これは例だからもちろん他のやりかたでもよし。
220 名前:デフォルトの名無しさん mailto:sage [2011/03/31(木) 00:28:53.06 ] で、循環参照や重複エントリはないシステムだとして、 双方向リンクリストだったら、 エントリ->前,次 と書くとして e1 -> null, e2 e2 -> e1, e3 e3 -> e2, null をパケットで表現したければ、パケットにはアタマから ヘッダ(エントリ個数3、とか) e1 e2 e3 とならべる。 それぞれのポインタを指すフィールドには、パケット先頭からの e1,e2,e3先頭のオフセットを格納しておけばよい。 ヘッダがあるからnull値と先頭エントリの区別はつく。 つたわるかな?
221 名前:デフォルトの名無しさん mailto:sage [2011/03/31(木) 00:29:27.02 ] >>219 offsetって何?
222 名前:デフォルトの名無しさん mailto:sage [2011/03/31(木) 00:37:22.68 ] offset くらいググろうよ(;-;) 昨日の書き込み見てもわからん? どんなシステムでも使えてかつ高速な、夢の方法はない。 どんなシステムでも使いたきゃ 実行コスト払ってXMLなりJSON使う。 [アドレス固定]の話は...man shmat 参照。 でも使える場面はかなり限定されるよ。
223 名前:デフォルトの名無しさん mailto:sage [2011/03/31(木) 00:41:36.98 ] >>222 ごめん、質問が悪かった。offsetを何に使うのか。 データさえわかってしまえば、送り先のメモリアドレスな んて必要ないと思っただけ(offsetってそういう意味じゃない?)。 json,xmlならそんなことしないから使い道が気になっただけ。
224 名前:デフォルトの名無しさん mailto:sage [2011/03/31(木) 00:42:51.63 ] ごめ、「送り元」のアドレスだったorz
225 名前:デフォルトの名無しさん mailto:sage [2011/03/31(木) 00:42:56.74 ] 循環やら重複エントリを扱いたかったら、まずはその元データについて 全エントリを重複無くたどるアルゴリスムを考えてみれ。 ソコまでできればあとは楽勝だろ。
226 名前:デフォルトの名無しさん mailto:sage [2011/03/31(木) 00:52:36.29 ] 受信したマシン上で、struct Hoge を再現するんだろ。パケットではoffset を入れてるところに、受信マシンがアドレス値を上書きして、struct Hoge * として読むんだよ。 C言語はわかってるんだよな?
227 名前:デフォルトの名無しさん mailto:sage [2011/03/31(木) 01:00:19.13 ] あああ、疑問点わかった。 ウム、文字列途中にnull が入らないことが確定なら確かに値だけでも 問題なく伝わるね。 それでもイイヨ。受信データと再現データを完全に別にするなら。
228 名前:デフォルトの名無しさん mailto:sage [2011/03/31(木) 01:09:57.65 ] あああ、意味分かった。 num1からstr2をまるごとコピーして、各offsetに コピーしたstr1, str2のアドレスいれれば再現可能って訳ね。 で、可変の場合は各エントリのoffsetをたどって同じこと 繰り返す、と。失礼した。
229 名前:デフォルトの名無しさん mailto:sage [2011/03/31(木) 10:28:01.02 ] 教えてください。 linux の snmptrap や snmpinform などのコマンドで、data binding 部のデータの型を i:整数、s:文字列 みたいに指定するのだけど、Opeque や NsapAddress を指定することは可能でしょうか。 ↓コマンドで指定できる型を参考にした場所(表3) www.itmedia.co.jp/enterprise/articles/0705/31/news042_4.html ↓snmp で指定できる tag の型を参考にした場所(表2) www.netwatcher.jp/snmp/snmp_main.html あと、inform は要求を受信した後に返す応答の送信先は 要求を送信してきた側の IP アドレスとポート番号でいいのでしょうか。 snmpinform で要求を投げて、以下の場所に返してみたのだけどタイムアウトになってしまいます。 ・受信したUDPソケット (当然?送信できずににエラーとなる) ・新規に作成したUDPソケットで要求を送信してきた側の IP アドレスとポート番号 ・新規に作成したUDPソケットで要求を送信してきた側の IP アドレスとSNMPの既定ポート(162) お願いします。
230 名前:デフォルトの名無しさん mailto:sage [2011/03/31(木) 10:39:19.10 ] net-snmpの場合、usage:にOpaqueで扱える型が出力される。 NETSNMP_WITH_OPAQUE_SPECIAL_TYPES定義でコンパイルされていれば。
231 名前:デフォルトの名無しさん mailto:sage [2011/03/31(木) 13:01:53.84 ] >>230 ありがとうございます。 usage に見当たらないので、、、残念。 inform の返信先についても、分かる方がいらっしゃったら教えてください。
232 名前:デフォルトの名無しさん mailto:sage [2011/04/12(火) 22:48:34.55 ] WinSockでUDPのプログラムを組んでるんですけど、 ポートはbindしてて、INADDR_ANYでsendtoしたときに、 実際にrecvする側で送信元として受け取るアドレスは、 送信元のどのアドレスなのでしょう? 「どの」っていうのは、送信元のマシンにはエイリアスで アドレスが複数追加されているので・・・ INADDR_ANYで送信するときって、送信元として入るアドレス選択に きまりはあるのでしょうか?
233 名前:デフォルトの名無しさん mailto:sage [2011/04/12(火) 22:53:17.51 ] bindしてれば、そのアドレス してなければ、出て行ったインターフェースのアドレス ただWinSockはいろいろ斜めを行くから…
234 名前:デフォルトの名無しさん mailto:sage [2011/04/13(水) 12:32:56.36 ] >>232 >INADDR_ANYで送信するときって、送信元として入るアドレス選択に >きまりはあるのでしょうか? ホストのルーティングテーブルでネクストポップを決定して、 そのネクストポップと同じサブネットのアドレス。 >>233 >してなければ、出て行ったインタフェースのアドレス 232が聞いてるのは一つのインターフェイスに複数のIPアドレス振ってる時の話でしょ。
235 名前:デフォルトの名無しさん mailto:sage [2011/04/13(水) 12:38:44.84 ] 同じNICに二つのIPアドレス振ってるときは 出て行くのはプライマリのIPアドレスからになる
236 名前:デフォルトの名無しさん mailto:sage [2011/04/13(水) 18:19:07.72 ] >>235 んなわけあるかい。 「プライマリの」なんて概念が前時代的。
237 名前:232 [2011/04/14(木) 00:35:43.37 ] >>233-235 ありがとうございます。 >>234 さんの指摘のように、1つのインタフェースに複数のアドレスが定義されている場合です。 >>234 > ホストのルーティングテーブルでネクストポップを決定して、 > そのネクストポップと同じサブネットのアドレス。 浅学ですみません。。。定義した複数アドレスが、同一ネットワークの場合はどうなるでしょうか? 基本的な質問で恐縮なのですが、なぜこういう質問をしているか、 >>232 の話をもう少し具体的に言うと @ サーバ : アドレス 192.168.0.20/24 さらに同じNICに対して、エイリアスで 192.168.0.1/24 を定義している A クライアント : アドレス 192.168.0.10/24 この状態で@→Aへ送信します。送信方法は>>232 に書いたように、UDPで、ポートは固定で指定、 ホストアドレスは INADDR_ANY で作ってバインドしてあります。 @でsendtoしてAでrecvfromしたとき、Aで受信したときの送信元(@)のアドレスがどうなるか?なのです。 というのも、@がWindowsXPの場合は、送信元アドレスが 192.168.0.20 となったのですが、 Windows7の場合は、192.168.0.1 となるのです・・・ >>234 さんの指摘をもらって、route print してみると、 確かに WindowsXP では、192.168.0.0/24 の interface が 192.168.0.20 となっているのですが(>>235 さんの言うプライマリですね) Windows7の場合は、192.168.0.0/24 の interface は 192.168.0.1 となっています。 Windows7の場合、アドレスが小さいものが interface に優先されてしまう?と疑問を持った次第です。 これまでXPで使っていたプログラムで、Windows7へ持っていくと動作が変わるので、 これをなんとかしたい、というのが背景です。
238 名前:デフォルトの名無しさん mailto:sage [2011/04/14(木) 06:30:29.12 ] INADDR_ANYをやめる
239 名前:デフォルトの名無しさん mailto:sega [2011/04/14(木) 15:29:36.22 ] Linuxのソケットで まだreadしてないたまっているバッファをすべて破棄するには どうするのが一番スマートで速くて格好いいデスか?
240 名前:デフォルトの名無しさん mailto:sage [2011/04/14(木) 15:43:31.87 ] select, readループ
241 名前:デフォルトの名無しさん mailto:sage [2011/04/14(木) 15:53:11.93 ] >>240 空読みが許されるのは童貞までだよねー
242 名前:232 [2011/04/14(木) 18:19:21.77 ] 自己解決しました。 結論から言うと、OSの仕様でした。(無印Win7しか確認していませんが) support.microsoft.com/kb/2386184 ↑のKBの修正Hotfixを当ててから、 netsh で skipassource=true にしてエイリアスのIPアドレスを 同一NICに追加してやると、プライマリ相当のアドレスで返ってくるようになりました。 またこのとき、route print すると Gateway と Interface がプライマリ相当のアドレスになることが確認できました。 >>236 さんの言うようにプライマリという概念がそもそもなくなってるともいえますし、 OSの動作が、XP/2003Server → Win7/2008R2 で変わったともいえると思います。 まあプログラム側がOSの仕様を決め打ちした動きになってるのが悪いんですが・・・w とりあえずOSのアップデートか、>>238 さんの言うようにプログラム側で対処するか、 どちらかで検討します。 お騒がせしました。
243 名前:デフォルトの名無しさん mailto:sage [2011/04/14(木) 19:55:54.78 ] くっそ ソケットに対してlseekするとエラーになるんじゃん!
244 名前:デフォルトの名無しさん mailto:sage [2011/04/14(木) 19:59:14.69 ] いやいやいやいや 常識的に考えて出来るはずなかろう?
245 名前:デフォルトの名無しさん mailto:sage [2011/04/14(木) 20:01:50.14 ] 向こうが shutdown で閉じてれば あるいわ… ってTCP限定の話になっちゃうか soket 閉じて開きなおすのはマズイのだろうか と戯言
246 名前:デフォルトの名無しさん mailto:sage [2011/04/14(木) 21:36:35.72 ] shutdownマナーはFAQです。よく読んでください。
247 名前:デフォルトの名無しさん mailto:sage [2011/04/14(木) 21:43:05.47 ] >>244 lseek を実装して、現在あるバッファを読み飛ばす(捨てる)だけは可 にすればいいんだがまぁ、対称性に著しく書けるインターフェースだわな
248 名前:196 mailto:sage [2011/04/14(木) 21:52:01.14 ] ソケットでのプロセス間通信について質問です。 AとBのプログラムで通信する場合ですが、こういう認識で合ってますか? プログラムA プログラムB ↑ ↑ ユーザランド -----|-----------------|--------- プログラムAの プログラムBの ソケット←ーーーー→ソケット カーネル
249 名前:デフォルトの名無しさん mailto:sage [2011/04/14(木) 21:52:44.84 ] ↑ 名前の196は関係ないです。 すいません。
250 名前:デフォルトの名無しさん mailto:sage [2011/04/14(木) 22:10:21.58 ] >>248 ええ。 まあ環境によるんですけど。
251 名前:デフォルトの名無しさん mailto:sage [2011/04/14(木) 22:13:46.39 ] >>250 例外もあるんですか?
252 名前:デフォルトの名無しさん mailto:sage [2011/04/14(木) 22:27:29.18 ] プロトコルスタックがカーネルにある必要は無いし、 逆に、インカーネルなhttpdとかありうるし。
253 名前:デフォルトの名無しさん mailto:sage [2011/04/14(木) 22:52:12.25 ] NFSサーバとかカーネル内にある。
254 名前:デフォルトの名無しさん [2011/04/15(金) 00:08:01.48 ] インターフェースがupされた直後に いくつかのソケットでconnectし始めるプログラムを実行すると 一番最初のconnectはつながるまで約3秒かかるのに ほぼ同時ながら別のスレッドでconnect呼ぶところではほぼ即座につながる ってことが起こるんですが、何が原因でしょう? あと、一発のconnectの待ちを短くしてやるにはどうすればいいでしょう?
255 名前:デフォルトの名無しさん mailto:sage [2011/04/15(金) 00:13:37.91 ] DHCPとかDNS引いてるんじゃない?
256 名前:デフォルトの名無しさん mailto:sage [2011/04/15(金) 00:18:31.32 ] ああすいません インターフェースは固定IPでupさせてます あと、接続もIPアドレス直です 1回目のconnectと2回目のconnectは同一ホストへの接続で ポート番号が1個違うだけなのに2回目の方が先につながるのが納得いかない。。
257 名前:デフォルトの名無しさん mailto:sage [2011/04/15(金) 00:27:05.93 ] ARPが必要だけど、そんな時間かからない。 OSは何?
258 名前:デフォルトの名無しさん mailto:sage [2011/04/15(金) 00:31:52.32 ] linuxです ひょっとしてarpテーブル見に行って該当無かったら arp投げて3秒後synリトライしているとか?
259 名前:デフォルトの名無しさん mailto:sage [2011/04/15(金) 00:35:34.94 ] ARP終わらなければパケット投げられません。 リトライになるはずないです。 ルーティング設定も手動ですか? DNSの逆引きが行われてませんか?