- 1 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 23:04: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辺り 足りなかったら適当に付け足してね 前スレ ネットワークプログラミング相談室 Port18 pc10.2ch.net/test/read.cgi/tech/1159692799/
- 2 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 23:05:58 ]
- 過去スレ:
Port17 pc8.2ch.net/test/read.cgi/tech/1148944560/ Port16 ttp://pc8.2ch.net/test/read.cgi/tech/1136005644/ Port15 ttp://pc8.2ch.net/test/read.cgi/tech/1128088448/ Port14 ttp://pc8.2ch.net/test/read.cgi/tech/1118469143/ Port13 ttp://pc8.2ch.net/test/read.cgi/tech/1109793931/ Port12 ttp://pc5.2ch.net/test/read.cgi/tech/1102427855/ Port11 ttp://pc5.2ch.net/test/read.cgi/tech/1096187183/ Port10 ttp://pc5.2ch.net/test/read.cgi/tech/1090385857/ Port9 ttp://pc5.2ch.net/test/read.cgi/tech/1080658835/ Port8 ttp://pc5.2ch.net/test/read.cgi/tech/1073560271/ Port7 ttp://pc5.2ch.net/test/read.cgi/tech/1063035045/ ★行方不明 Port6 ttp://pc5.2ch.net/tech/kako/1052/10521/1052106444.html Port5 ttp://pc2.2ch.net/tech/kako/1040/10402/1040220302.html Port4 ttp://pc3.2ch.net/tech/kako/1034/10342/1034236536.html Port3 ttp://pc3.2ch.net/tech/kako/1023/10233/1023359282.html Port2 ttp://pc.2ch.net/tech/kako/1006/10062/1006258198.html Port1 ttp://pc.2ch.net/tech/kako/970/970344582.html まとめ ttp://makimo.to/cgi-bin/search/search.cgi?q=%83l%83b%83g%83%8F%81%5B%83N%81%40%91%8A%92k%8E%BA&andor=AND&sf=0&H=ikenai&D=tech&shw=2000
- 3 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 23:07:20 ]
- 図書コーナー:
UNIXネットワークプログラミング〈Vol.1〉ネットワークAPI:ソケットとXTI www.amazon.co.jp/exec/obidos/ASIN/4894712059/ そのソースコード www.unpbook.com/src.html 詳解TCP/IP〈Vol.1〉プロトコル www.amazon.co.jp/exec/obidos/ASIN/4894713209/ 詳解TCP/IP〈Vol.2〉実装 www.amazon.co.jp/exec/obidos/ASIN/4894714957/ 詳解TCP/IP〈Vol.3〉トランザクションTCP, HTTP, NNTP, UNIXドメインプロトコル www.amazon.co.jp/exec/obidos/ASIN/4894716674/ TCP/IPによるネットワーク構築 〈Vol.1〉原理・プロトコル・アーキテクチャ www.amazon.co.jp/exec/obidos/ASIN/432012054X/ 〈Vol.3〉クライアント‐サーバプログラミングとアプリケーション www.amazon.co.jp/exec/obidos/ASIN/4320028007/ ?Linux/POSIXソケットバージョン www.amazon.co.jp/exec/obidos/ASIN/4320120841/ ?Windowsソケットバージョン www.amazon.co.jp/exec/obidos/ASIN/4320029992/
- 4 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 23:08:04 ]
- マスタリングTCP/IP RTP編
www.amazon.co.jp/exec/obidos/ASIN/4274065618/ Linuxソケットプログラミング?ネットワークプログラミングにおける実践技法 www.amazon.co.jp/exec/obidos/ASIN/4894714671/ Webプロトコル詳解?HTTP/1.1、Webキャッシング、トラフィック特性分析 www.amazon.co.jp/exec/obidos/ASIN/4894715414/ WinSock2.0プログラミング www.amazon.co.jp/exec/obidos/ASIN/4797306882/ 猫でもわかるネットワークプログラミング www.amazon.co.jp/exec/obidos/ASIN/4797323604/ IPv6ネットワークプログラミング www.amazon.co.jp/exec/obidos/ASIN/4756142362/ Visual Basicではじめるネットワークプログラミング超入門 www.amazon.co.jp/exec/obidos/ASIN/4839917523/
- 5 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 23:08:42 ]
- URL抜粋:
★規格 RFC 日本語版リスト www5d.biglobe.ne.jp/~stssk/rfcjlist.html JPNIC RFC関連リンク集 rfc-jp.nic.ad.jp/link/ RFC Editor www.rfc-editor.org/ HTMLなRFC (セクションを直に示すのに便利) www.freesoft.org/CIE/RFC/ RFC 2616 "Hypertext Transfer Protocol -- HTTP/1.1" 日本語訳 www.studyinghttp.net/rfc_ja/2616/rfc2616_ja.html IANA Well known port numbers www.iana.org/assignments/port-numbers ★プログラミング C10K ヘヴィーロードサーバ www.kegel.com/c10k.html MSDN msdn.microsoft.com/library/en-us/dnsitehelp/html/tochelp.asp Raw IP Networking FAQ www.whitefang.com/rin/ Java で packet capture netresearch.ics.uci.edu/kfujii/jpcap/doc/ Randomness Recommendations for Security www.faqs.org/rfcs/rfc1750.html BoostSocket www.crystalclearsoftware.com/cgi-bin/boost_wiki/wiki.pl?BoostSocket The Code Project - Internet & Network programming www.codeproject.com/internet/ ネットワークプログラミングの基礎知識 (問題ありのサイト?) X68000.q-e-d.net/~68user/net/
- 6 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 23:09:33 ]
- ★ツール類
ethereal - www.ethereal.com/ Wireshark - www.wireshark.org/ tcpdump - www.tcpdump.org/ Windump - netgroup-serv.polito.it/netgroup/tools.html WinPcap - www.winpcap.org/ pathchar - ftp://ftp.ee.lbl.gov/pathchar/ pchar - www.employees.org/~bmah/Software/pchar/ Packetyzer - www.networkchemistry.com/products/packetyzer/ libevent - www.monkey.org/~provos/libevent/ ★プロトコル TTCP www.sean.de/Solaris/ttcp.html www.kohala.com/start/ttcp.html UDP Hole Punching homepage3.nifty.com/toremoro/p2p/firewall.html ★IP, TCP実装 www.iti.fi/documentation/miniip.html www.sics.se/~adam/uip/ www.codeguru.com/Cpp/I-N/network/tcpip/article.php/c5447/ www.geocities.jp/bruce_teller/security/garakuta.htm
- 7 名前:1 mailto:sage [2007/02/09(金) 23:15:50 ]
- 前スレ >>990-1000
前スレと同じテンプレで立てさせてもらった。 次スレを立てる人へ >>5のRFC 2616 "Hypertext Transfer Protocol -- HTTP/1.1" 日本語訳のアドレスは www.studyinghttp.net/cgi-bin/rfc.cgi?2616 に変わっているから立てるときに変えてください。
- 8 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 00:02:51 ]
- チャンスを掴む入口⇒ luckygame.tv/
- 9 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 01:15:47 ]
- 関連かな?
Java ネットワークプログラミング 【教えて!】 pc10.2ch.net/test/read.cgi/tech/1086238859/
- 10 名前:デフォルトの名無しさん mailto:sage [2007/02/12(月) 00:35:11 ]
- 乙
- 11 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 14:15:40 ]
- 教えてください。
send/recvを使ってHTTP通信したいのですが、ブロックしてしまうのを回避するために ・send/recv前に毎回selectして調べる ・非同期でsend/recvしてh_errorを調べる の方法は適切ですか?
- 12 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 14:30:19 ]
- ・非ブロックソケットを使う
- 13 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 14:36:55 ]
- >>11
・無限ループのスレッドでずーっとread、メインはセマフォ待ちで待機。 ・改行の受信か相手側のクローズを検知したらセマフォを解放 これが正しいモデルだと思うけど、どうよ。
- 14 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 15:09:40 ]
- 無条件に正しいモデルなんてものはない。
- 15 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 15:57:44 ]
- 無限ループのrecvなんて、最悪だな。
- 16 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 16:04:37 ]
- read/recvはCPU負荷率が下がるので逆に推奨。
最悪なのはI/O待ちもsleepもない計算だけのループ。
- 17 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 16:23:51 ]
- I/O待ちだけでブロックしてるようなスレッド作ると、他所から
そのスレッドを綺麗に終了させる手段がないじゃん。 イベントとI/Oの両方を待機させるような作りにするのが定石じゃないの。
- 18 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 16:43:28 ]
- >>17
I/Oにイベントを流してやる
- 19 名前:11 mailto:sage [2007/02/17(土) 17:45:45 ]
- レスありがとうございます。
後出しになって申し訳ないのですが、実はApache + C++CGIとして動作させています。そのため、スレッドの生成は避けたいと思っています。 CGIの待機中プロセスが増えすぎてしまわないためにタイムアウトを設けたいと思って質問しました。 少なくとも毎回selectするくらいなら非ブロックモードにするべきのようですね。 非ブロックでsend/recvし、ソケットが閉じられるまでループさせる方法で試してみます。
- 20 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 18:34:48 ]
- > イベントとI/Oの両方を待機させるような作り
そうそう、 socketのイベントとpthread_cancelを同時に待つ方法が知りたい。
- 21 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 18:47:00 ]
- >>20
スレッドでソケットでセレクト
- 22 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 00:35:09 ]
- >>19
> 少なくとも毎回selectするくらいなら非ブロックモードにするべきのようですね。 なことはない
- 23 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 15:55:13 ]
- 何でRFCはあんなに読みにくいのかと。
- 24 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 08:43:58 ]
- 読みやすいよ。規格書としては抜群に。
ITU, IEEE, ISOに比べればね。
- 25 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 11:37:13 ]
- Can't Conceive Intelligent Thoughts Today
- 26 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 03:40:15 ]
- Content-Dispositionでさあ、IEってfilename="c:\abc\def.txt"
みたいに送ってくるけど、\はquoted-pairになるから、これって違法な 気がするんだが・・
- 27 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 11:07:40 ]
- プログラムとちょっと外れるけど
環境はWindowsXPです 名前解決を変更するのにHostsをいじればいいわけですが ドメインではなくて実際のIPにフィルターかけることって出来ますかね? 192.168.1.90 -> 192.168.1.100 90へのリクエストはすべて100へ行くようにしたいわけです ソケットフックするしかない?
- 28 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 22:38:18 ]
- static arpを登録すればいける気がする。
(IP->IPのマッピングじゃないけど。)
- 29 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 22:39:49 ]
- 書き込んでから気づいた。受け取り側がよっぽどアホでない限り、
自分のIP宛でないパケットが来たところで無視されるのがオチだな。
- 30 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 23:16:24 ]
- ・/28あたりでネットマスク切って、あとは自力構成したルータの
パケットフィルタで書き換える ・振り替えを実行したいマシン毎で、192.168.1.90に対して、192.168.1.100のMACを static ARPとして設定する。そのうえ、192.168.1.100のマシンで、ループバック インターフェースに、192.168.1.90/32を割り当てる。100のマシンのホストモデルが 「強力」なら「弱い」にしておく。 くらいしか思い浮かばないな。
- 31 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 23:18:53 ]
- というか、それがいわゆるNAT。
- 32 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 23:24:44 ]
- 宛先を書き換えるわけだから、逆NATでないの。まーどーでもいいけど。
- 33 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 16:18:26 ]
- ちなみに100のほうは変動するので
90内でだけで解決しないといけない
- 34 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 18:19:00 ]
- >>32
裏と表がひっくり返った50円玉やるよw
- 35 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 19:55:51 ]
- ジャイアン乙
- 36 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 23:55:52 ]
- >>27
リクエスト元が192.168.1.90、100と違うサブネットなら、境界のルータで NATかければいい。 同じサブネットなら、無理やりな方法になるけど>>30 かな? >>32 (NAPTじゃない)NAT、それも固定NATなら、対称なんだから逆も何もない。
- 37 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 11:48:19 ]
- 100のほうは正確にはグローバルIPになる
ローカルから接続する対象をリアルタイムで変更したいわけ ソフトによってはIP固定で通信してるからそれに対応したいということ NATってあて先変更できたっけ? 90のほうにNATソフトいれたら出来るんだっけ? そういう機能があるソフト知ってたら教えて下さい
- 38 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 14:37:41 ]
- とりあえず、>>6にある
UDP Hole Punching homepage3.nifty.com/toremoro/p2p/firewall.html の中のNATの説明読んでから出直してくれ。 そしてプログラミングに関連づけて質問し直してくれ。
- 39 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 17:08:33 ]
- 技術的に出来ることは十分わかってるんですが
ソケットをフックするよりドライバ書いてるほうがはるかに手間がかかるので NATの原理で出来るというアドバイスは愚の骨頂です 最初に書いた通り、こちらの最も望むものはフックするより手間の掛からない方法です
- 40 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 17:53:01 ]
- >>39=>>27なの?
馬鹿だなあ。 知識足りないんだから、大人しく教えを乞えばいいのに…
- 41 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 21:00:56 ]
- なんだなんだ、ネトゲの改造か何かか?
- 42 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 21:02:01 ]
- チートツールじゃないですよ。健全な目的です。
- 43 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 19:17:26 ]
- rtspとかmmsのパケットをキャプチャするプログラム作りに挑戦始めました。
ttp://www.jptm.net/memo/index.php?cmd=read&page=WinPcap%A4%F2%BB%C8%A4%C3%A4%BF%A5%D7%A5%ED%A5%B0%A5%E9%A5%DF%A5%F3%A5%B0&word=winpcap とりあえずこのページのサンプルを実行してみましたが、 いまいちよくわからず・・・ このサンプルではrtspとかmmsとかをキャプチャできるのでしょうか? というか全然知識が足りないので 読んだ方がよいページとかありましたら 紹介お願い致しますm(_ _)m
- 44 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 22:16:38 ]
- RFC 2326(rtsp)
www.ietf.org/rfc/rfc2326.txt mms、mmshはmplayer、xineとかのコードとかでしょうか。
- 45 名前:43 mailto:sage [2007/02/27(火) 07:27:19 ]
- ありがとうございます。
というかまだ全然プロトコル解析の段階にいってません・・・orz メディアプレイヤーで以下のアドレスを再生させると mms://wms.g2.cdn.bcast.co.jp/yahoo/ystream/kad/10193/kad1019300001100000b929.asf?session_id=b4d2575ccae7b6b454cece0e68ea0860&product_id= 取得パケットの中には 202.93.94.14 という外部アドレスだけが見つかりました。 ttp://www.cman.jp/network/support/ip.html で調べたところ、 wms.g2.cdn.bcast.co.jp というのは 202.93.94.16 というアドレスであると出たのですが 逆に 202.93.94.16 を調べたら wms06.g2.bbt.bcast.co.jp と出ていました。
- 46 名前:43 mailto:sage [2007/02/27(火) 07:28:53 ]
- 202.93.94.14
を調べたら wms04.g2.bbt.bcast.co.jp と出ていました。 でももう一度改めてパケット取得してみたら 202.93.94.15 というアドレスだけが見つかりました。 wms.g2.cdn.bcast.co.jpというドメイン名からは 正確なIPアドレスはわからないものなのでしょうか?
- 47 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 07:40:33 ]
- % dnsip wms.g2.cdn.bcast.co.jp
202.93.94.16 202.93.94.15 202.93.94.18 202.93.94.17 「正確なIPアドレス」の定義がよくわからんが、1つのDNS名が 複数のIPアドレスを持つのは、負荷分散的によくあること。
- 48 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 06:05:23 ]
- >>46
DNSラウンドロビンだのぉ。
- 49 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 07:12:46 ]
- マルチスレッドのスレからきました。
winsockのプログラミング勉強してます。 recv関数でよくselect使用して、タイムアウト処理すると思います。 同じようにして、accept関数のタイムアウト処理をしたいと思ってますが、 accept関数呼ぶ前に、select関数使えないんでしょうか。 FD_ZERO(&readfds); FD_SET(soc,&readfds); select(width,&readfds,NULL,NULL,&timeout) socは、きちんと渡せていたんですが、接続試しても select抜けられずに、全部タイムアウトになります。 accept呼んでからじゃないと、ソケットの読み取り可能か わからないのでしょうか。 やりたいこと伝わりませんでしたら、 補足させていただきます。
- 50 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 07:49:08 ]
- selectの最初の引数が気になるけど、それでOK.
- 51 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 09:32:35 ]
- >>50
WSAStartup->socket作成->bind->listen->accept->select呼んでrecv よくあるrecvのタイムアウトは、こんな順番だと思います。 accept関数もずっと待ち状態になるので、recvのときと同じように タイムアウトの機能を、追加できないかと考えてます。 WSAStartup->socket作成->bind->listen->select呼んでaccept->recv なぜか、クライアントから接続してもselectから、抜けられないんです。 タイムアウトだけでしか抜けられません。 ・acceptした後でないと、ソケットの読み取り可能かわからず select関数使え無い。ということがあるのかと思いましたが 気のせいでしょうか。 >selectの最初の引数が気になるけど、それでOK. selectにも、きちんと引数渡せてるようなので、 どこがおかしいのかわからないです。 もうちょっと、ポイントしぼれるようにがんばってみます。 レスありがとうございました。
- 52 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 10:04:44 ]
- 51です。
あれれ、ソースコード特にどこも変えた覚えないのですが、 listenのときのソケットディスクリプタと acceptの返すディスクリプタの値比べて、 同じ値が表示されてるの確認作業したりしていたら、 いつのまにかタイムアウトの処理できていました。 んー、ほんとにどこも変えた覚えは無いのですが・・・ 原因説明できなくて、すみません。 acceptもrecvとほぼ同じコードで、タイムアウト処理できました。 どうもお騒がせいたしました。 ありがとうございました。
- 53 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 10:19:20 ]
- acceptのタイムアウトが出来ると、
アプリの終了処理の時に使えますね。
- 54 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 11:58:52 ]
- poll( )なプログラムを、pollを持ってないWIN32環境にselect( )で移植しています。
selectを使ったpollの実装ってどこかに転がってたりしませんでしょうか? ぐぐったのですがいいのがなくて。 既出だったらスマソ
- 55 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 13:25:26 ]
- pollって1024以上オッケーだっけ?
- 56 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 16:07:36 ]
- >>54
WSAEventSelectで登録して、WaitForMultipleObjectsがWinSockの作法。 WaitForMultipleObjectsの上限に引っかかるぐらいのスケールなら、IoCompletionPort。
- 57 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 16:38:26 ]
- >>54
手抜き移植でソースをなるべく変えずにpoll()を使いたいってこと? cygwinは、WaitForMultipleObjects()を用いてselect(), poll()を エミュレートしてるはずなので、cygwinのソースを読むと良い。 つか、移植の手間を一切掛けたくないのなら、ぶっちゃけcygwinで コンパイルすればいいだけなのだが。cygwin1.dllには依存するけどな。 一から自分で書くなら、>>56の言うようにIOCPがWindowsではもっとも 効率がよく、しかも色々応用が利いて便利だ。NT系のOSでしか使えないが。
- 58 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 03:37:06 ]
- 書籍スレで聞くべきかも知れませんが、
中級ネットワークプログラミングみたいな本で お勧めの本はありませんか? 英語でも構いません。 amazon.co.jpや、お勧め書籍スレ/ページは色々見てみましたが 基礎的なソケットの使い方などの本が多いようです。 それなりに実用的なネットワークソフトの解説のようなものがあれば幸いです。 ソース嫁ってことになるのかも知れませんが、よろしくお願いします。
- 59 名前:デフォルトの名無しさん [2007/03/04(日) 18:32:12 ]
- 板違いなのですが、おそらくこちらのスレの方のほうが詳しいと思いますので、
質問させてください。 環境:Windows2000/XP 会社で営業部ドメイン(EIGYO)と、技術部(GIJYUTU)があります。 自分のPCは、GIJYUTUに属してます。 UNC(\\EIGYOU\フォルダ名の形式)を使って、営業部ドメインの 共有フォルダにアクセスする事は出来るのですが、 「マイネットワーク」を開いて、営業部ドメイン(EIGYO)にアクセスする事が 出来ません。営業部ドメイン(EIGYO)自体表示されない。 「マイネットワーク」に、自分が所属していないドメインを表示させる方法って ありますでしょうか。
- 60 名前: ◆Z4QrFDzwrY mailto:sage [2007/03/04(日) 20:53:07 ]
- >58
プロトコルをヘッダ込みで実装してみるとか メーラーを作ってみるとかするのがいいと思う プロトコルのコマンドやフォーマットはネットで探せるし Etherealを使えばアプリがやり取りしているパケットも見れる ドライバ、apacheなどのモジュールを作るのもいい 中級を目指すならこれから作るものを定めておいたほうがよいのでは などといってみる レベルが上がるにつれて道程は細分化していくから
- 61 名前:デフォルトの名無しさん mailto:sage [2007/03/05(月) 22:26:31 ]
- \\EIGYOU
- 62 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 12:21:29 ]
- 54です。
>>56 >>57 dクス 手抜き移植と言うか、今後のメンテを考えて、 unix/linux版とwin版でできるだけ統一ソースにしておきたいんですよねぇ... socketのラッパーみたいなのがあるといいなぁとオモタのですが、 自分で書くことにしますです。
- 63 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 12:28:21 ]
- $(GLIBC)/sysdeps/unix/bsd/poll.c じゃダメかい? > selectのpollラッパ
- 64 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 15:00:24 ]
- >>63
$(GLIBC)/sysdeps/unix/bsd/poll.c 使えそうですね。どもです。
- 65 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 16:38:00 ]
- >>57
cygwin.com/snapshots/cygwin-src-20070301.tar/cygwin-snapshot-20070301-1/winsup/cygwin/poll.cc にそのものずばりのselectをつかったpollの実装がありますた(・∀・) cygwin_selectを使っているのでこの部分をwin32sdkの_selectに移植する必要がありますがだいぶ参考になりそうです。
- 66 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 20:13:17 ]
- >>65
for (i = 0; i < nfds; ++i) { fds[i].revents = 0; if (!cygheap->fdtab.not_open (fds[i].fd)) { sysdeps/unix/bsd/poll.c ってこんな実装になってるんですね... 総当り(笑) やはり発想変えてpollになっているところをselectに直すほうがいいのかなぁ。 教えてエロイ人
- 67 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 20:15:50 ]
- 根本的にlibevent使って書くとか、
どこでも使えるselectにするとか するしかないんじゃないの。
- 68 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 11:11:56 ]
- BASIC認証について質問です。
サーバのあるディレクトリにアクセスすると、はじめの1回目の認証で ダイアログボックスが表示されますが、2回目以降はそのディレクトリ以下に アクセスしても表示されなくなります。 この機能は、サーバとクライアントどちらの機能で実現されているのでしょうか。 Basic認証では、ログインではなくて、毎回ID、PASSを送信しているということなので 「サーバの方では特に何もせずに、クライアントの方でアクセスしたURLのアドレスを記録しておいて、 2年目以降は、その下のディレクトリにアクセスするときは、初めからリクエストのヘッダに ”Authorization: Basic hogehogehoge”を付けるようにしている。」というふうに考えたんですけど、 どうなのでしょうか。 よろしくお願いします。
- 69 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 11:39:03 ]
- >>68
パケットモニタで調べてみますた。 クライアント側で毎回送ってますね。 Authorization: Basic hogehogehoge をつけないでGET/POSTすると、応答に HTTP/1.1 401 Authorization Required WWW-Authenticate: Basic realm="Login" みたいなのが帰ってきます。
- 70 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 12:03:29 ]
- >>69
調べていただいてありがとうございます。 BASIC認証で一回アクセスしたら、何らかの仕組みで、 ブラウザの方でそのアクセスしたURL(ディレクトリ)を覚えておいて、 2回目以降そのディレクトリ以下にアクセスするときは、自動的に ヘッダーにAuthorization: Basic hogehogehoge を付けてるんですね。 ふむふむ。それで、2回目以降はダイアログが出てこなくなると。 BASIC認証できるhttpサーバもどきを、勉強の課題で作ってますが、 サーバ側でなにか大掛かりな仕組みでもあるのかと、心配になりまして。 パケットモニタというのも、知らなかったので勉強になりました。 どうもありがとうございました。
- 71 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 13:28:19 ]
- >>70
そういう調査技能もあると便利だが HTTPに関してはRFC2616とかに全部定義されている
- 72 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 17:16:40 ]
- winsockの勉強中に疑問に思ったことの質問です。
sockB = accept(sockA, &addr, &size)のような形で子スレッドで 動かしていて、acceptでブロックされてます。アプリケーション終了時に 親スレッドでclosesocket(sockA)という風に処理していいのでしょうか?
- 73 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 17:30:20 ]
- >>72
「処理していいのでしょうか?」の意味が、 処理して正しく動作するのでしょうか? →知らん。試せばわかる。>>72が期待している動作(acceptを抜けるか/抜けないか、 抜けるときのsockBの値、GetLastErrorの値、etc) を知りようがないのに 正しい動作も何もない。 一般的にそのような処理をするものなのでしょうか? →マルチスレッドを真面目に考えたプログラムなら、イベント使って、 非同期Acceptをするので、このような状況に陥らない。
- 74 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 10:21:30 ]
- >>73
回答ありがとうございます。 もっとマルチスレッドやイベントについても勉強しないといけないようでした。
- 75 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 18:56:05 ]
- レジュームダウンロードについて教えてください。
サーバ側:ダウンロードしたファイル クライアント:ダウンロードの途中のファイル こういう状況だったとします。 1.接続しクライアントに途中のファイルがあるかどうかを確認。 2.クライアント:ファイルを読み込んでハッシュ値を出し、「ファイルの名前:読み込んだ文字列の長さ:ハッシュ値」を送信 3.サーバ:「ファイルの名前:読み込んだ文字列の長さ:ハッシュ値」を受信します。 4.サーバ:読み込んだ文字列の長さ分(Nとします)、ファイルから文字列を読み込んでハッシュ値を出し、クライアントからのハッシュ値を比較 5.ハッシュ値が一致した場合は、seek関数でファイルのポイントをN個移動して、そこから読み込んで順番にデータを送信 こういう感じでしょうか? 修正、追加する場所、その他気をつけることなどありましたら アドバイスよろしくお願いします。
- 76 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 22:26:23 ]
- なんでハッシュが出てくるのか分からん
- 77 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 22:57:35 ]
- Range:bytes=100-
- 78 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 00:05:40 ]
- REST 100
- 79 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 03:24:23 ]
- FTPの場合REST 100で100バイト目から取れる根拠は実はRFC959にはないけどな。
もっと新しいRFCがあるのか?
- 80 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 07:57:54 ]
- >>76
同じファイルか、確認のため比較する容量が大きいと転送が大変だと思いまして。 >>76 >Range:bytes=100- httpのヘッダー情報に、こういうのがあったとは。 でもブラウザは、途中からのものをダウンロードできても、 上書きだけみたいですね。 >>78 ttp://www2s.biglobe.ne.jp/~hig/tcpip/HostReq_Appl.html#HREQAPP_4_1_3_4 サーバ FTP は、データストリーム中の都合の良い箇所に再開マーカ <ssss> を付ける buf="hogehoge";を送信するとき、 "<ssss>hogehoge"を送信して、 ・サーバ側では、send()するとき、<ssss>をbufのどこか適当な位置に挿入して送信 ・クライアント側では、recv()するたびに、制御ファイルの(ssss,rrrr) を更新。 ・再開するときは、<ssss>を送信。 とリンク先見てこいうことかと想像してたんですが、実際の実装で 送られてくるクライアントに、送信される文字列bufって、どんな形なんでしょうか。 RFCでどこに書いてあるのか探してるんですが、よくわかりません。
- 81 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 09:01:48 ]
- 80です。
通信の中身は、パケットモニタで見るという方法がありました。
- 82 名前:デフォルトの名無しさん [2007/03/10(土) 09:15:33 ]
- >>80
> とリンク先見てこいうことかと想像してたんですが、実際の実装で > 送られてくるクライアントに、送信される文字列bufって、どんな形なんでしょうか。 > RFCでどこに書いてあるのか探してるんですが、よくわかりません。 とにかくRFCを読んで。 解説ページに惑わされないで。
- 83 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 11:18:57 ]
- >79
まだdraftだけど。 www.ietf.org/internet-drafts/draft-ietf-ftpext-mlst-16.txt
- 84 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 12:00:50 ]
- >>83
おお。5.1でSTREAMモードでの再開が規定されとる > Expiration Date: March 2003 が気になるけど
- 85 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 17:59:47 ]
- >>75
なにげに、この方法よいのかも?
- 86 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 18:03:11 ]
- 負荷おおすぎねえ?
- 87 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 18:51:57 ]
- >>86
確かに大きそう。まあSSL通信に比べれば そんなでも、ないかもしれないけど。
- 88 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 21:53:00 ]
- アホか
手順4見てみろ
- 89 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 23:56:01 ]
- DDoSされたら終わりだな
- 90 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 00:05:22 ]
- ハッシュ値持たせるならサーバ側はブロック単位で最初から持っとけよ
クライアント側で計算させて一致しないのだけやり直しが普通の発想だろ
- 91 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 03:00:14 ]
- >>88
w >>89-90 同意
- 92 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 05:51:09 ]
- 同じファイルかどうかなんてクライアントがETagでも覚えとけよそんくらい。
- 93 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 11:28:22 ]
- ブロック毎に32bitCRC値を持たせるとしたら、
ブロックの長さはどれぐらいが適当でしょうか。 仮に64kByte毎だと1MB辺り64Byteで済みますが、 これは冗長でしょうか。
- 94 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 12:06:46 ]
- 残りの長さの全部のハッシュを求めないで、
サーバとクライアントでそれぞれ2,3箇所ピックアップして、 ハッシュ求めれば十分じゃん。 あとダウンロードは、なんも処理しないでいいんだし。 ただ、これをいうと、ハッシュじゃなくてもいいんだよな。w どれだけ'同じファイルであるかの確かさ'を求めるかだ。 毎回なんか処理しながらダウンロードって、しないに越したことは無いでしょ。 突っ込みの嵐の予感。
- 95 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 13:37:08 ]
- >>94
> ただ、これをいうと、ハッシュじゃなくてもいいんだよな。w >>76
- 96 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 00:53:50 ]
- >>93
ブロック長が長くなるほど衝突が増える。 ブロック長が長くなるほど再送に無駄が増える。 後は自分で考えて。 >>94 普通、まずサイズや最終更新時間を調べるでしょ。 そんなわけでFTPだってSIZEとMDTMコマンドがある。
- 97 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 01:05:38 ]
- まあそれも>>83だけど
- 98 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 00:11:12 ]
- udpでメッセージを交換する簡単なプログラムを作っているのですが、
可変長文字列で詰まってしまいました。 struct message{ int size; char buf[1]; } struct message *p; p = (struct message *)malloc( sizeof(struct message) + strlen(input) ); 送信したい文字列をinputに格納して、その長さに合わせてこのmessage構造体をmallocしているのですが、 受信側ではなぜか文字列が途中で途切れてしまいます。 可変長を実装するにはこのやり方は間違っているのでしょうか?
- 99 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 00:31:48 ]
- MTUよりでかくなってないか?
- 100 名前:98 mailto:sage [2007/03/13(火) 01:03:07 ]
- MTUが1500で、送信サイズが20byte程度でしたので、MTUを越えてはいないと思います。
今色々デバッグしてみたところ、sendtoで送信できているサイズが、sizeof(struct message)と同じ値でした。きちんとmallocはしているはずなのですが…
|

|