ネットワークプログラミング相談室 Port26
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2010/03/23(火) 20:31:49Programming 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辺り
足りなかったら適当に付け足してね
前スレ
ネットワークプログラミング相談室 Port25
http://pc12.2ch.net/test/read.cgi/tech/1255459388/
関連スレ
ネットワークプログラミング雑談
http://pc12.2ch.net/test/read.cgi/tech/1235800707/
Java ネットワークプログラミング 【教えて!】
http://pc12.2ch.net/test/read.cgi/tech/1086238859/
0002デフォルトの名無しさん
2010/03/23(火) 20:32:30Port25 ttp://pc12.2ch.net/test/read.cgi/tech/1255459388/
Port24 ttp://pc12.2ch.net/test/read.cgi/tech/1246895188/
Port23 ttp://pc12.2ch.net/test/read.cgi/tech/1230466044/
Port22 ttp://pc11.2ch.net/test/read.cgi/tech/1222603744/
Port21 ttp://pc11.2ch.net/test/read.cgi/tech/1204287577/
Port20 ttp://pc11.2ch.net/test/read.cgi/tech/1186418855/
Port19 ttp://pc10.2ch.net/test/read.cgi/tech/1159692799/
Port18 ttp://pc11.2ch.net/test/read.cgi/tech/1171029896/
Port17 ttp://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 http://pc5.2ch.net/tech/kako/1052/10521/1052106444.html
Port5 http://pc2.2ch.net/tech/kako/1040/10402/1040220302.html
Port4 http://pc3.2ch.net/tech/kako/1034/10342/1034236536.html
Port3 http://pc3.2ch.net/tech/kako/1023/10233/1023359282.html
Port2 http://pc.2ch.net/tech/kako/1006/10062/1006258198.html
Port1 http://pc.2ch.net/tech/kako/970/970344582.html
0003デフォルトの名無しさん
2010/03/23(火) 20:33:15UNIXネットワークプログラミング〈Vol.1〉ネットワークAPI:ソケットとXTI
http://www.amazon.co.jp/exec/obidos/ASIN/4894712059/
そのソースコード
http://www.unpbook.com/src.html
詳解TCP/IP〈Vol.1〉プロトコル
http://www.amazon.co.jp/exec/obidos/ASIN/4894713209/
詳解TCP/IP〈Vol.2〉実装
http://www.amazon.co.jp/exec/obidos/ASIN/4894714957/
詳解TCP/IP〈Vol.3〉トランザクションTCP, HTTP, NNTP, UNIXドメインプロトコル
http://www.amazon.co.jp/exec/obidos/ASIN/4894716674/
TCP/IPによるネットワーク構築
〈Vol.1〉原理・プロトコル・アーキテクチャ
http://www.amazon.co.jp/exec/obidos/ASIN/432012054X/
〈Vol.3〉クライアント‐サーバプログラミングとアプリケーション
http://www.amazon.co.jp/exec/obidos/ASIN/4320028007/
Linux/POSIXソケットバージョン
http://www.amazon.co.jp/exec/obidos/ASIN/4320120841/
Windowsソケットバージョン
http://www.amazon.co.jp/exec/obidos/ASIN/4320029992/
0004デフォルトの名無しさん
2010/03/23(火) 20:34:04http://www.amazon.co.jp/exec/obidos/ASIN/4274065618/
Linuxソケットプログラミング?ネットワークプログラミングにおける実践技法
http://www.amazon.co.jp/exec/obidos/ASIN/4894714671/
Webプロトコル詳解?HTTP/1.1、Webキャッシング、トラフィック特性分析
http://www.amazon.co.jp/exec/obidos/ASIN/4894715414/
WinSock2.0プログラミング
http://www.amazon.co.jp/exec/obidos/ASIN/4797306882/
猫でもわかるネットワークプログラミング
http://www.amazon.co.jp/exec/obidos/ASIN/4797323604/
IPv6ネットワークプログラミング
http://www.amazon.co.jp/exec/obidos/ASIN/4756142362/
Visual Basicではじめるネットワークプログラミング超入門
http://www.amazon.co.jp/exec/obidos/ASIN/4839917523/
0005デフォルトの名無しさん
2010/03/23(火) 20:34:44★規格
RFC 日本語版リスト
http://www5d.biglobe.ne.jp/~stssk/rfcjlist.html
JPNIC RFC関連リンク集
http://rfc-jp.nic.ad.jp/link/
RFC Editor
http://www.rfc-editor.org/
HTMLなRFC (セクションを直に示すのに便利)
http://www.freesoft.org/CIE/RFC/
RFC 2616 "Hypertext Transfer Protocol -- HTTP/1.1" 日本語訳
http://www.studyinghttp.net/cgi-bin/rfc.cgi?2616
IANA Well known port numbers
http://www.iana.org/assignments/port-numbers
0006デフォルトの名無しさん
2010/03/23(火) 20:36:22C10K ヘヴィーロードサーバ
http://www.kegel.com/c10k.html
C10K ヘヴィーロードサーバ(日本語訳)
http://www.hyuki.com/yukiwiki/wiki.cgi?TheC10kProblem
MSDN
http://msdn.microsoft.com/library/en-us/dnsitehelp/html/tochelp.asp
Raw IP Networking FAQ
http://www.whitefang.com/rin/
Java で packet capture
http://netresearch.ics.uci.edu/kfujii/jpcap/doc/
Randomness Recommendations for Security
http://www.faqs.org/rfcs/rfc1750.html
BoostSocket
http://www.crystalclearsoftware.com/cgi-bin/boost_wiki/wiki.pl?BoostSocket
The Code Project - Internet & Network programming
http://www.codeproject.com/internet/
ネットワークプログラミングの基礎知識 (問題ありのサイト?)
http://X68000.q-e-d.net/~68user/net/
0007デフォルトの名無しさん
2010/03/23(火) 20:42:11ethereal - http://www.ethereal.com/
Wireshark - http://www.wireshark.org/
tcpdump - http://www.tcpdump.org/
Windump - http://netgroup-serv.polito.it/netgroup/tools.html
WinPcap - http://www.winpcap.org/
pathchar - ftp://ftp.ee.lbl.gov/pathchar/
pchar - http://www.employees.org/~bmah/Software/pchar/
Packetyzer - http://www.networkchemistry.com/products/packetyzer/
libevent - http://www.monkey.org/~provos/libevent/
★プロトコル
TTCP
http://www.sean.de/Solaris/ttcp.html
http://www.kohala.com/start/ttcp.html
UDP Hole Punching
http://homepage3.nifty.com/toremoro/p2p/firewall.html
★IP, TCP実装
http://www.iti.fi/documentation/miniip.html
http://www.sics.se/~adam/uip/
http://www.codeguru.com/Cpp/I-N/network/tcpip/article.php/c5447/
http://www.geocities.jp/bruce_teller/security/garakuta.htm
0008デフォルトの名無しさん
2010/03/23(火) 21:41:100009デフォルトの名無しさん
2010/03/23(火) 22:18:420010デフォルトの名無しさん
2010/03/23(火) 22:28:130011デフォルトの名無しさん
2010/03/23(火) 22:35:350012デフォルトの名無しさん
2010/03/23(火) 23:05:280013デフォルトの名無しさん
2010/03/24(水) 00:08:280014デフォルトの名無しさん
2010/03/24(水) 01:06:06いちいちリンク確認してる暇なかったんだわ
次スレではよろしく
0015デフォルトの名無しさん
2010/03/24(水) 03:04:43/ // /| r'7\ ,.ヘ‐'"´iヾ、/\ニ''ー- 、., / /
/ / | |::|ァ'⌒',ヽ:::ヽrヘ_,,.!-‐-'、二7-ァ'´|、__
`'ー-‐''" ヽ、_'´ `| |:::::|'" 二.,_> ,.へ_
/ //__// / / / `ヽ7::/
か っ も | / // メ,/_,,. /./ /| i Y //
ァ て う. |'´/ ∠. -‐'ァ'"´'`iヽ.// メ、,_ハ , |〉
| 約 ク ヽ! O .|/。〈ハ、 rリ '´ ,ァ=;、`| ,ハ |、 /
| 束 ソ > o ゜,,´ ̄ . ト i 〉.レ'i iヽ|ヽ、.,____
| し ス / ハ | u ,.--- 、 `' ゜o O/、.,___,,..-‐'"´
| た レ | / ハ, / 〉 "从 ヽ! /
| じ は |,.イ,.!-‐'-'、,ヘ. !、_ _,/ ,.イヘ. ` ヽ.
ッ .ゃ .立 |/ ヽ!7>rァ''7´| / ', 〉`ヽ〉
! ! な て .', `Y_,/、レ'ヘ/レ' レ'
い .な ヽ、_ !:::::ハiヽ. // /
で い ./‐r'、.,_,.イ\/_」ヽ ', / /
す / `/:::::::/ /,」:::iン、 / /
〈 ,,..-‐''"´ ̄ ̄77ー--、_\.,__ /
,.:'⌒ヽ ´ | | , i |ノ `ヾr-、
0016デフォルトの名無しさん
2010/03/25(木) 03:32:11★プログラミング
MSDN
http://msdn.microsoft.com/library/en-us/dnsitehelp/html/tochelp.asp
Raw IP Networking FAQ
http://www.whitefang.com/rin/
The Code Project - Internet & Network programming
http://www.codeproject.com/internet/
★ツール類
Windump - http://netgroup-serv.polito.it/netgroup/tools.html
pchar - http://www.employees.org/~bmah/Software/pchar/
Packetyzer - http://www.networkchemistry.com/products/packetyzer/
★IP, TCP実装
http://www.iti.fi/documentation/miniip.html
http://www.sics.se/~adam/uip/
http://www.geocities.jp/bruce_teller/security/garakuta.htm
0017デフォルトの名無しさん
2010/03/25(木) 03:58:19これはだいじょうぶ
0018デフォルトの名無しさん
2010/03/27(土) 20:09:290019デフォルトの名無しさん
2010/03/27(土) 20:28:020020デフォルトの名無しさん
2010/03/27(土) 20:32:16http://ruffnex.oc.to/kenji/text/fire_a/
0021デフォルトの名無しさん
2010/03/27(土) 20:51:40個人の技術力うんぬんでなくその本でファイアウォールを作るだけの知識が
つくか聞いたんだす。
>>20
windows持ってないんです。。
どうやら上記の本だけでは無理っぽいですね。
パケット単位での取扱いはAPIじゃ難しいと某巨大掲示板に書いてありました。
とりあえずサーバをプログラムで作って、その後、勉強しようと思います。
0022デフォルトの名無しさん
2010/03/28(日) 00:18:00接続時のタイムアウトはどうやればいいの?
ioctlsocket + selectだとタイムアウトするまでメッセージ処理が止まっちゃうし
0023デフォルトの名無しさん
2010/03/28(日) 02:28:42http://pc12.2ch.net/test/read.cgi/tech/1263738929/
VB.NET質問スレ(Part33)
http://pc12.2ch.net/test/read.cgi/tech/1267775473/
【初心者歓迎】C/C++室 Ver.72【環境依存OK】
http://pc12.2ch.net/test/read.cgi/tech/1269517734/
C言語なら俺に聞け(入門編)Part 62
http://pc12.2ch.net/test/read.cgi/tech/1269438098/
C/C++の宿題片付けます 135代目
http://pc12.2ch.net/test/read.cgi/tech/1268699491/
スレ立てるまでもない質問はここで 105匹目
0024デフォルトの名無しさん
2010/04/02(金) 17:59:11ここにちょっかいを出してネットワークを切断したいと思います。
いい方法はありますか?
0025デフォルトの名無しさん
2010/04/03(土) 14:26:270026デフォルトの名無しさん
2010/04/04(日) 04:20:30ソケットの場合は/proc/<pid>/fdは単にsocket[<inode番号>]
という文字列を含むシンボリックリンクであり、参照的な機能しか
無いようだ。
ls -l /proc/21853/fd
total 0
lrwx------ 1 root root 64 Apr 3 15:14 0 -> /dev/pts/16
lrwx------ 1 root root 64 Apr 3 15:14 1 -> /dev/pts/16
lrwx------ 1 root root 64 Apr 3 15:14 2 -> /dev/pts/16
lrwx------ 1 root root 64 Apr 3 15:14 3 -> socket:[27284825]
# file /proc/21853/fd/3
/proc/21853/fd/3: broken symbolic link to `socket:[27284825]'
# whoami
root
# rm -f /proc/21853/fd/3
rm: cannot remove `/proc/21853/fd/3': Operation not permitted
0027デフォルトの名無しさん
2010/04/07(水) 00:13:12http://www.amazon.co.jp/exec/obidos/ASIN/4274065618/
って入門編読んだぐらいの知識でも理解できそうですか?
0028デフォルトの名無しさん
2010/04/07(水) 00:15:080029デフォルトの名無しさん
2010/04/07(水) 00:28:280030デフォルトの名無しさん
2010/04/07(水) 00:41:280031デフォルトの名無しさん
2010/04/07(水) 01:51:360032デフォルトの名無しさん
2010/04/07(水) 02:55:210033デフォルトの名無しさん
2010/04/08(木) 22:07:13リモートのIPアドレスからコンピューター名を得る方法ありますか?
自分も相手もWindows(XP以降)です
正しくはコンピューター名じゃなくてUNC名ですが
0034デフォルトの名無しさん
2010/04/08(木) 22:19:340035デフォルトの名無しさん
2010/04/08(木) 22:44:23教える気がないんだったら煽ってないで黙ってろよ。
0036デフォルトの名無しさん
2010/04/08(木) 22:44:450037デフォルトの名無しさん
2010/04/08(木) 23:14:210038デフォルトの名無しさん
2010/04/08(木) 23:21:38他の奴、答えろ。
0039デフォルトの名無しさん
2010/04/08(木) 23:23:130040デフォルトの名無しさん
2010/04/08(木) 23:23:420041デフォルトの名無しさん
2010/04/09(金) 23:04:31(1クライアントは 10sec 毎に1回要求送信)
し、DB検索後、応答を最大 100ms 内に返す時の、サーバーの
I/O 戦略 (下記 url 参照) は、一般的に、どのような形になるでしょうか?
なお、その他の処理に DB 更新処理があります。
参考:
Winsock Programmer's FAQ: Articles: Which I/O Strategy Should I Use?
http://www.kt.rim.or.jp/~ksk/wskfaq-ja/articles/io-strategies.html
まず、C# で beginread() (上のページの非同期型ソケット?)を使用して
作っていましたが、その他の DB 更新に時間がかる等、高負荷時に、
要求を受信しても、beginread() が起動しない (スニファで受信確認)、
という事象があり、応答が 100ms を超えてしまいます。
コンテキストスイッチが原因と思われたので、socket.select() で、
受信後、DB 検索を threadpool を利用し、別スレッドで実行し、
受信スレッドは、常に受信を続ける等を検討していますが、
正しいのでしょうか?
応答上限 100ms は、馬鹿げていると思いますが、仕様なので、
なんともなりません・・・
環境:
サーバ:Win2008 server 32bit sp1, Xeon5500 x 2, 4Gb
クライアント:WinXP sp3, Core 2 Duo 7400, 2GB
開発環境:VS2008 .net FW 3.5 sp1
0042デフォルトの名無しさん
2010/04/09(金) 23:06:31そいつはできるから仕様にしたんだろ
0043デフォルトの名無しさん
2010/04/09(金) 23:14:13他社システムは 100ms 内になっているため、
苦しんでおります・・・
0044デフォルトの名無しさん
2010/04/09(金) 23:19:22客先にソースあんだろ?
0045デフォルトの名無しさん
2010/04/09(金) 23:25:030046デフォルトの名無しさん
2010/04/09(金) 23:25:410047デフォルトの名無しさん
2010/04/10(土) 02:18:350048デフォルトの名無しさん
2010/04/10(土) 03:59:460049デフォルトの名無しさん
2010/04/10(土) 09:37:42それがきつく感じるのは>>46にもあるけどDB操作があるからだろ。
通信周りをどうこう考える前に、DB操作が、せめて80ms以内にできなきゃ話にならん。
DB操作が並列処理で高速化できるなら通信まわりも並列化だろうが、
DB操作が並列操作でもスループットあがらない処理なら、通信周りだけ並列化しても意味が無い。
0050デフォルトの名無しさん
2010/04/10(土) 10:11:52同期じゃなくて良いなら、要求をキューイングしておいて、別プロセスとかで処理すれば?
0051デフォルトの名無しさん
2010/04/10(土) 10:22:16まさかね
0052デフォルトの名無しさん
2010/04/10(土) 10:34:46>>51あるいはDBの設計が致命的にヘボい。
0053デフォルトの名無しさん
2010/04/10(土) 10:36:300054デフォルトの名無しさん
2010/04/10(土) 15:24:39>サーバで、100クライアントからの要求を 100ms 毎に 1回受信
>(1クライアントは 10sec 毎に1回要求送信)
速攻クビにしたいレベル。
0055デフォルトの名無しさん
2010/04/10(土) 15:34:59検索用にスレッドを作っておいて検索内容を受信したら投げてseteventでもして起こす。
そういうのにすれば良さそう。
0056デフォルトの名無しさん
2010/04/11(日) 02:39:31遅いシステムしか組めない所はイラネ。
0057デフォルトの名無しさん
2010/04/11(日) 09:10:58サーバー側でacceptで停止している場合はどうしたらいいのでしょうか?
クライアント側を再起動すると直るのですが。
サーバー側でどうにかしたいのですが、accept内部で待ちに入ってしまったら
どうしようもないのですか?
0058デフォルトの名無しさん
2010/04/11(日) 09:13:290059デフォルトの名無しさん
2010/04/11(日) 09:34:32一つのソケットでsendとrecvやってはまずいでしょうか?
0060デフォルトの名無しさん
2010/04/11(日) 14:22:30タスクを分けられるなら分けたほうがいい
0061デフォルトの名無しさん
2010/04/11(日) 15:32:450062デフォルトの名無しさん
2010/04/11(日) 16:10:310063デフォルトの名無しさん
2010/04/11(日) 16:34:50二つのソケットつくるということです。タスクを別にして。
メリットってなんかあるのでしょうか?
設定の簡略化?
0064デフォルトの名無しさん
2010/04/11(日) 17:04:20それサーバ側とクライアント側でどう二つのコネクションを確立するつもり?
0065デフォルトの名無しさん
2010/04/11(日) 17:16:440066デフォルトの名無しさん
2010/04/11(日) 19:42:310067デフォルトの名無しさん
2010/04/11(日) 19:57:59ひとつでrawつかってるせいか。
0068デフォルトの名無しさん
2010/04/11(日) 22:34:01例えば、
while{
send
recv}
でループするような処理の場合、recvを抜けたあとに大量にデータが送られてきて、
sendをしようとするも、送信するはずのデータが受信データがはいってきたことによって
送信できなくなるということはあるのでしょうか?
バッファとはソケットレイヤにあるものと考えて
0069デフォルトの名無しさん
2010/04/11(日) 22:40:320070デフォルトの名無しさん
2010/04/11(日) 22:54:480071デフォルトの名無しさん
2010/04/11(日) 22:56:16unixが受け取るにはどうしてるの?unixのtcp/ipでもないやつとか
0072デフォルトの名無しさん
2010/04/11(日) 23:10:39あとは判るな?
0073デフォルトの名無しさん
2010/04/11(日) 23:56:410074デフォルトの名無しさん
2010/04/12(月) 00:44:42ポート番号とプロトコル種別含めて、別々のプロトコルと区別するのでしょうか?
そうした場合、別のプロトコル同士としてドライバレベルで認識してしまうのでしょうか
0075デフォルトの名無しさん
2010/04/12(月) 01:01:35recvの扱い方が違うのでしょうか?
0076デフォルトの名無しさん
2010/04/12(月) 01:30:26意味不明。まずは質問できる程度の知識をつけてから出直そう
0077デフォルトの名無しさん
2010/04/12(月) 03:17:17AがBにチャットを申し込むとAとBのスレッドを別々に作成し、お互いのスレッド内のみでチャットするという動作(希望)をします。
両者のスレッドでは自分のソケット宛にrecvをしていて
仮にクライアントAがBにデータを送ろうとするとA側のスレッドのプログラムだけを通ってデータが行くのか、
それともB側のスレッドのプログラムも通って行くのかが気になり
(A側のスレッドでBのソケットディスクリプタにデータを送る際、B側のスレッドでBのソケットディスクリプタでrecvをしているため。)
下記プログラムを作って試してみました。
(main関数ではほぼaccpetしてスレッド作るだけなので省略します)
続く
0078デフォルトの名無しさん
2010/04/12(月) 03:18:43int recvSocket,sendSocket,bufLen;
char buffer[100];
FILE *fp;
struct socket *abbr = (struct socket *)socketer;
//Aが既にコネクションを確保していて、Bが確保すると抜ける
while(abbr -> flag == 0){
sleep(1);
}
//Aはabbr -> flag == 1の括弧内、Bは == 2の括弧ないの処理をする。
if(abbr -> flag == 1){
abbr -> flag++;
recvSocket = abbr -> socket1; //Aのソケット
sendSocket = abbr -> socket2; //Bのソケット
}else if(abbr -> flag == 2){
recvSocket = abbr -> socket2; //Bのソケット
sendSocket = abbr -> socket1; //Aのソケット
}
while(1){
bufLen = recv(recvSocket,buffer,sizeof(buffer),0);
buffer[bufLen] = '\0';
sleep(5); //Bを経由しているか確認するため。
printf("%d--%d--%s--%ld\n",recvSocket,sendSocket,buffer,(unsigned long int)pthread_self());
send(sendSocket,buffer,bufLen,0);
sleep(1);
}
}
続く
0079デフォルトの名無しさん
2010/04/12(月) 03:20:43クライアントAがデータ送信→スレッドAで受信、Bのソケットに送信→スレッドBで受信、Aのソケットに送信→無限ループ
経由しないなら
クライアントAがデータ送信→スレッドAで受信、Bのソケットに送信→クライアントBに届いて終了
となるはずでした。
結果的にBは経由せずにデータが送られるということがわかったのですが
(A側のスレッドでsleep(5)が終了後、クライアント側にデータが送信されたため)
なぜか、下記のように無限ループが起きてしまいます。
5--4--abc---1225315472
4--5-----1216922768
5--4-----1225315472
4--5-----1216922768
5--4-----1225315472.....
クライアント側は送信側はデータを送信した時点で、受信側は受信した時点で終了しているのでデータは何も送信していません。
また、最初の送信以降はデータabcが消えています。なぜこのような動作をするのでしょうか。
長々とすみません。よろしくお願いします。
0080デフォルトの名無しさん
2010/04/12(月) 03:23:230081デフォルトの名無しさん
2010/04/12(月) 07:28:40httpプロトコルとか、トランスポート層より上にあるプロトコルの場合、
どうデータを処理しているのでしょうか。
0082デフォルトの名無しさん
2010/04/12(月) 17:32:070083デフォルトの名無しさん
2010/04/12(月) 18:30:12まず現象を説明します。
クライアントはWindowsのゲームアプリケーションで、2本スレッドが走っています。
片方は、連続的に映像を描画しています。
もう片方は通信を担当しており、ノンブロッキングモードのSOCKETを監視しています。
秒間60回程度「recv()を監視し、受信バイト数をデバッグウインドウに出力」するスレッドです。
サーバーからデータをsend()すると、クライアントのデバッグウインドウにすぐさま何バイト受け取ったかが表示されます。
(1回のrecvで受信しきれるとは限らないのはもちろんですが)
問題は「映像の描画」の負荷が重くなった時に起きます。
サーバーがsend()してから、受信されるまでの間隔が5秒〜20秒くらいとものすごく遅延するのです。
最初は、描画負荷によって、通信監視スレッドが止まってしまっているのかとも思いました。
ですがループ自体は軽快にまわっています。(0バイト受信というメッセージが、秒間60回吐かれ続けています)
質問は
・これは良くある現象であり、プログラムが間違っているわけではないのかどうか
・解決する方法はあるのか(一応映像の描画は、フレームスキップやらSleep(1)を毎ループ挟んだりやらしたのですが改善せず)
です。
アドバイスよろしくお願いします。
0084デフォルトの名無しさん
2010/04/12(月) 18:44:48ちゃんと秒間60回吐かれ続けてるの?
ここでログとって時間調べた方がよくね?
あと、念のためマジで受信してるかパケットログ取ろうぜ
0085デフォルトの名無しさん
2010/04/12(月) 18:51:19はい、60回については通し番号やWindows時間とともに吐かせて確認したので、ループ自体は正常にまわっているようです。
すいません「パケットログ」というのが分からないので、よろしければ教えていただけますでしょうか。
低レベル層でパケットの受信が行われたかを、ツールか何かで見る。ということでしょうか?
教えていただけると幸いです。
余談です。
勝手な素人考えでは
「パケット自体はもちろんすぐ受信されているのだけど、
CPUパワーを食いすぎており、
アプリケーション層に渡すまでの処理が超時間かかってしまている」
のかなと。
でも、そこまですさまじく重い(Windows全体がカクつく)ほどではない状態でもなるです
0086デフォルトの名無しさん
2010/04/12(月) 19:02:270087デフォルトの名無しさん
2010/04/12(月) 20:09:17>send()してから、受信されるまでの間隔が5秒〜20秒くらいとものすごく遅延
これは明らかに何かが破綻しているね。
単純に時間当たりの通信量がシステム能力に対して多すぎて
間に合ってないってことは?
そうでなければ多分受信スレッドのバグだね。
パケットログはWireSharkをインストールする。通信系のソフト作る場合
パケットログをいつでも採れるようにしておくのは必須事項。
0088デフォルトの名無しさん
2010/04/12(月) 21:02:300090デフォルトの名無しさん
2010/04/12(月) 23:26:190091デフォルトの名無しさん
2010/04/12(月) 23:38:430092デフォルトの名無しさん
2010/04/12(月) 23:41:500093デフォルトの名無しさん
2010/04/13(火) 00:02:54一般的にはバッファというのはカーネル内での制限値の様な物。 必要があったら
配分して溜め、規定値を超えたら残りは状況に応じた処理をする。 受信側と送信側は
全く別。
recv側:
udp 捨てる
tcp 窓を0にして送信側をブロックする
send側
sendのコールがブロックされる(バッファに空きが出来るまでコールが終了しない)
nonblockingという場合はもうちょっと複雑。
バッファの容量はシステム設定やソケットのオプションで変更出来る。
0094デフォルトの名無しさん
2010/04/13(火) 00:02:54setsockopt
SO_RCVBUF int Specifies the total per-socket buffer space reserved for receives. This is unrelated to SO_MAX_MSG_SIZE and does not necessarily correspond to the size of the TCP receive window.
SO_SNDBUF int Specifies the total per-socket buffer space reserved for sends. This is unrelated to SO_MAX_MSG_SIZE and does not necessarily correspond to the size of a TCP send window..
0095デフォルトの名無しさん
2010/04/13(火) 01:37:01pthreadじゃ出来ないんですか?
ソケットじゃなくてpthreadの方の問題ならスレチになってしまいますが。
0096デフォルトの名無しさん
2010/04/13(火) 07:22:45UDPの場合、
sendやrecvをコールすることによって、バッファの中をとっていくわけですよ。
逆にコールしないと、recvではデータが上書きされていくような感じなのでしょうか?
sendはバッファに空きが出るまでコールが終了しないということですが、
その間、他の処理はできないというわけでしょうか?
だとしたら、sendのタイムアウト値みたいなものはないのでしょうか。
また、sendのバッファを一度クリアしてから、sendをコールするということはできますか?
0097デフォルトの名無しさん
2010/04/13(火) 08:04:180098デフォルトの名無しさん
2010/04/13(火) 08:22:190099デフォルトの名無しさん
2010/04/13(火) 10:33:41ソケットごとにな!
0100デフォルトの名無しさん
2010/04/13(火) 13:12:04これって単に無視されてるだけ?
0101デフォルトの名無しさん
2010/04/13(火) 14:34:050102デフォルトの名無しさん
2010/04/13(火) 14:35:190103デフォルトの名無しさん
2010/04/13(火) 16:01:54>>82=>>100=俺です。
そんなに変な質問だったかな。
0104デフォルトの名無しさん
2010/04/13(火) 18:34:220105デフォルトの名無しさん
2010/04/13(火) 21:26:500106デフォルトの名無しさん
2010/04/13(火) 22:03:21以下のページのように、小さいデータをやり取りしたときに、
アプリケーションから send() した後、OS でバッファリング
されて一定時間送信されないということは他にもあるのでしょうか?
現在作成中のサーバー・クライアントシステムで、クライアントの
send() 後、サーバの非ブロッキング受信の発生が 200ms 程度、
遅れることがあり、困っています。
rcvbuf サイズを小さくしたところ、大分、ましになったのですが、
rcvbuf サイズは、受信の遅延に関係するものなのでしょうか?
設計上の問題 - Winsock と TCP 経由で小さなデータ セグメントを送信する
http://support.microsoft.com/kb/214397/ja
0107デフォルトの名無しさん
2010/04/14(水) 04:49:160108デフォルトの名無しさん
2010/04/14(水) 05:44:490109デフォルトの名無しさん
2010/04/14(水) 06:33:420110デフォルトの名無しさん
2010/04/14(水) 09:27:00ないんじゃね?200msもドンピシャだし。
0111デフォルトの名無しさん
2010/04/14(水) 09:51:26Delayed ack (rfc2581)。 Nagelの方は標準のソケットオプションTCP_NODELAYで停められるけど
delayed ackは無いので停められない。 一度どうしても必要があったのでTCP_NODELACKという
オプションをLinuxカーネルに作り込んでむりやりdelayed ackを解除した。
011285
2010/04/14(水) 10:40:39返事が遅れてすいません。
通信しているデータは10バイトとかそんなレベルです。
遅れて届くという言い方が曖昧でした。
例えば5秒間隔で3回通信すると、概ねクライアントには5秒間隔で3度にわけて届きますよね。
(通信データが十分小さければ)
これが、私の「非常に重い環境で起こるおかしな挙動」状態だと、10秒程度何も届かず、
その後5秒間隔で3回届くのです。
通信スレッドの仕組みですが、非常に簡単で
while(true)
{
Sleep(16);
recv(buffer);
output(timeGetTime(), buffer);
}
こんな感じです。(正確性は今回の実験では関係ないので、単にSleepです)
WireShark ありがとうございます。
こちらを使ってもテストしてみます
0113デフォルトの名無しさん
2010/04/14(水) 11:18:44TCP_QUICKACKじゃだめ?
0114デフォルトの名無しさん
2010/04/14(水) 11:29:120115111
2010/04/14(水) 11:51:38man tcp(7)の説明だとそういうふうに誤解しちゃうね。 自分も最初はそう思ったのだが
ここの説明で理解した。
http://articles.techrepublic.com.com/5100-10878_11-1050771.html
要約すると、ソケットが作られた時にはTCP_QUICKACKは1に設定されているが、
最初のACKが行われるとすぐにこれが0になる。 これはクライアントの場合は
connectしたとき、帰って来たSYN ACKを直ぐにACKする(送るデータを待たない)。
しかしクライアントが直ぐにデータを送るという状況だったらこのpayload無しの
ACKは無駄になる。 そこでソケットを作った時にTCP_QUICKACKを0に設定すると
SYN ACKは直ぐにACKされない。 しかし次にデータを送るとそのdatagramで
SYN ACKがACKされ、パケットが1個節約出来る。
0116デフォルトの名無しさん
2010/04/14(水) 13:23:12無効にできるでしょ。
ただ「rcvbuf サイズを小さくしたところ、大分、ましになった」
ってあるので遅延ACK問題じゃないような気がするけど。
いずれにせよ、こういうのはパケットログを取れば原因は大抵分かる。
0117106
2010/04/14(水) 21:13:40ありがとうございます。
遅延 ACK は、TcpAckFrequency のことだと思います。
とりあえず修正はしています。
ところで、アプリでデータ受信イベントが起こるのは、
受信後、送信側へ ACK を送信してからなのでしょうか?
0118デフォルトの名無しさん
2010/04/14(水) 21:16:35そうです
0119デフォルトの名無しさん
2010/04/14(水) 21:45:260120106
2010/04/14(水) 23:17:13理由がわからないので、解説サイト等があれば、
教えて頂けないでしょうか?
0121デフォルトの名無しさん
2010/04/15(木) 00:02:080122デフォルトの名無しさん
2010/04/15(木) 06:59:06(他から絶えずデータが送られて来ている中で)
稀に送信が一瞬とまり、再開後の最初のパケットの中をみると特定の所だけデータがおかしくなっています。
定期的に送信している中、データの送信が一瞬とまる原因って何か考えられますでしょうか?
0123デフォルトの名無しさん
2010/04/15(木) 07:06:080124デフォルトの名無しさん
2010/04/15(木) 07:06:150125デフォルトの名無しさん
2010/04/15(木) 07:09:36UDPだからというわけではない
0126デフォルトの名無しさん
2010/04/15(木) 07:10:570127デフォルトの名無しさん
2010/04/15(木) 07:13:310128デフォルトの名無しさん
2010/04/15(木) 12:09:300129デフォルトの名無しさん
2010/04/15(木) 18:02:08本当です
0130デフォルトの名無しさん
2010/04/15(木) 18:09:18合ってるが、ACKはすぐに送信するかは判らない。
こちらの送信データが揃うまで待つかもしれない。
ただし届いた分のデータについてはアプリに渡してしまっても良い。
異常ケースとしてACKを送信しても相手に届かない場合もあるが、
それでもACKまでのデータは確定しているから、
その場合起こる再送信でもACK以前のデータは読み捨てられる。
0131デフォルトの名無しさん
2010/04/15(木) 18:25:05タイムアウトか受信ウィンドウサイズの限界まで待つかもしれない。
TCP通信においてレスポンスを重視する場合、アプリケーション側で
定期的に相互にデータを送り続けてスタック上のバッファを吐き出させる
戦略を取った方が良い。
片方が無言だったりするとスタックのアルゴリズムまかせになる。
0132デフォルトの名無しさん
2010/04/15(木) 20:28:58「届いた分のデータについてはアプリに渡してしまっても良い」
筈なのに、(というか渡すべきでしょ?)WinSockではACKを送信
した後になってはじめてアプリに渡すと>>118は言ってると思うのだが。
これは信じ難いので。。。
本当にそんな馬鹿な作りになってるのか試したいんだけど今試せない。。。
0133デフォルトの名無しさん
2010/04/15(木) 21:05:30いつまでも待ってやるから
試してからまた来い
0134デフォルトの名無しさん
2010/04/15(木) 23:20:53それは前後しても構わないし、「後か先か」に意味がまったく無い。
ACKが相手に届くかどうかなんて知ったこっちゃないので。
0135デフォルトの名無しさん
2010/04/15(木) 23:29:10周期的に送ってるのに稀に数回分も連続してとまるのでしょうか?
また復帰するのも謎です
送受信のバッファが別なら受信ならともかく送信までいかないのが気にかかります
0136デフォルトの名無しさん
2010/04/15(木) 23:33:370137デフォルトの名無しさん
2010/04/15(木) 23:45:35ネットワークプログラミングで重要なのは問題の切り分け。 結局wiresharkは使い始めたの?
0138132
2010/04/15(木) 23:53:04はい。試しましたよ。
WindowsXP SP3でシステムのデフォルトの遅延ACKの設定にし、
クライアント側から1秒周期でパケットを送り、サーバ側で
パケット受信毎にミリ秒単位の受信時刻を表示するようにし
て、Wiresharkのログと付き合わせましたが、アプリには
ちゃんとデータパケット受信時に渡っていますよ。
遅延ACK送信時じゃなく。
そうじゃない環境(Windowsのバージョン?)があるんですか?
0139デフォルトの名無しさん
2010/04/15(木) 23:54:40TCPを使いなはれ
0140デフォルトの名無しさん
2010/04/16(金) 00:20:38基本より深い問題なきがしないこともないですが、
UDPだとソケット自体がおかしくなることもあるってことでしょうか?
0141デフォルトの名無しさん
2010/04/16(金) 00:21:08ありまくりやがります
0142デフォルトの名無しさん
2010/04/16(金) 07:17:58スタック部分が途中でおかしくなったら、ソケット再起動してもかわらないですよね
0143デフォルトの名無しさん
2010/04/16(金) 08:05:260144デフォルトの名無しさん
2010/04/16(金) 08:12:460145デフォルトの名無しさん
2010/04/16(金) 08:31:23する癖がついている奴がいるな。ソケットが壊れるってw
0146デフォルトの名無しさん
2010/04/16(金) 08:38:480147デフォルトの名無しさん
2010/04/16(金) 13:18:25壊れるのはパケット
0148デフォルトの名無しさん
2010/04/16(金) 20:47:59>>141が壊れるよと言うもんだから
0149デフォルトの名無しさん
2010/04/16(金) 20:58:55知識として持っててあたりまえのことを質問する馬鹿が増えた
0150デフォルトの名無しさん
2010/04/16(金) 21:44:32コピペ化する予定ですか?
0151デフォルトの名無しさん
2010/04/16(金) 23:54:050152デフォルトの名無しさん
2010/04/17(土) 01:18:25それは実装依存
プロトコルに違反しないならなんでもOK
0153デフォルトの名無しさん
2010/04/17(土) 06:14:38普通はsocketが壊れるより先にまずpingが折れると思う
0154デフォルトの名無しさん
2010/04/17(土) 07:21:380155デフォルトの名無しさん
2010/04/17(土) 07:38:46pinとpingをかけたか、素で間違えているか
0156デフォルトの名無しさん
2010/04/17(土) 09:06:35シリアル通信くらいしたことないとな
0157デフォルトの名無しさん
2010/04/17(土) 09:10:060158デフォルトの名無しさん
2010/04/17(土) 17:25:140159デフォルトの名無しさん
2010/04/18(日) 01:24:01kwsk
0160デフォルトの名無しさん
2010/04/18(日) 01:46:540161デフォルトの名無しさん
2010/04/18(日) 02:04:230162デフォルトの名無しさん
2010/04/18(日) 12:29:02相手のサーバによっては拒否される?
0163デフォルトの名無しさん
2010/04/18(日) 12:33:10クライアントによっては拒否される
が正しいと思う
0164デフォルトの名無しさん
2010/04/21(水) 06:24:240165デフォルトの名無しさん
2010/04/21(水) 14:01:09WSAIoctlで取得した関数ポインタで呼び出すことが推奨されていると以下のページで書かれています。
ttp://eternalwindows.jp/network/winsock/winsock06c.html
実際にAcceptExを直接呼び出しても表面上は特に問題なく動作しているように思えますが、
どのような問題が発生する可能性があるのでしょうか?
御存知の方は教えて頂けると幸いです。
0166デフォルトの名無しさん
2010/04/21(水) 14:16:05差し換わるかもしれんじゃん。
0167デフォルトの名無しさん
2010/04/21(水) 14:30:55レス有り難うございます。
差し換わるというのは、コンパイル時に直接記述されたAcceptExのアドレスが、
mswsock.dllの変更やバージョン違いによってアドレスが変わってしまうという解釈で宜しいのでしょうか?
dllに関しての知識が不足してるので、見当違いでしたら申し訳無いです。
0168デフォルトの名無しさん
2010/04/21(水) 14:32:26>>167 >>166
0169デフォルトの名無しさん
2010/04/21(水) 14:48:10mswsock.dllじゃなくなるかも。という事だろう。
0170デフォルトの名無しさん
2010/04/21(水) 15:18:30そういうことでしたか。
教えてくださった方どうも有り難うございました。
0171デフォルトの名無しさん
2010/04/21(水) 19:56:30デバイスドライバへの割り込みがきたあとに、recvfromをすることによって
データをとれるのでしょうか?
デバイスドライバへの割り込みを禁止してしまうと、データはrecvfromでとれないということ?
0172デフォルトの名無しさん
2010/04/21(水) 20:01:010173デフォルトの名無しさん
2010/04/24(土) 02:39:32127.0.0.1でないIPを取得する方法はありますか?
0174デフォルトの名無しさん
2010/04/24(土) 02:52:22アクセプトしているなら接続元のIPを取得できる
0175デフォルトの名無しさん
2010/04/24(土) 11:29:51getsockname
0176デフォルトの名無しさん
2010/04/24(土) 12:32:450177デフォルトの名無しさん
2010/04/24(土) 16:44:22っ□
0178デフォルトの名無しさん
2010/04/24(土) 20:24:540179デフォルトの名無しさん
2010/04/29(木) 20:51:590180デフォルトの名無しさん
2010/04/30(金) 16:02:08はずかしがったらいかん
0181デフォルトの名無しさん
2010/04/30(金) 19:33:45WinSockとかWinPcapとか使えば可能でしょうか?
0182デフォルトの名無しさん
2010/04/30(金) 19:47:310184デフォルトの名無しさん
2010/04/30(金) 20:30:060185181
2010/04/30(金) 21:25:22winsock.dllのラッパーを作れば良さそうですね。
ありがとうございました。
0186デフォルトの名無しさん
2010/04/30(金) 21:26:570187デフォルトの名無しさん
2010/05/02(日) 10:25:54WinSockで自分のPCのグローバルIPアドレスを取得するには
どうすればいいでしょうか?
0188デフォルトの名無しさん
2010/05/02(日) 10:41:130189デフォルトの名無しさん
2010/05/02(日) 11:52:21一般的には、UPnPを使うことになると思います。
winsockでゴリゴリ書いてももちろんかまわないのですが、COMインターフェースが
用意されているので使ってみてはどうでしょうか?
0190デフォルトの名無しさん
2010/05/03(月) 09:25:03NAT後に利用している送信元ポート番号を知る方法ない?
通信相手に教えてもらう以外で。
あったら教えてください。
0191デフォルトの名無しさん
2010/05/03(月) 10:03:190192デフォルトの名無しさん
2010/05/03(月) 10:11:05プロトコルから外れた標準外の方法でもいいんだけど。
まぁ確かにライブラリを使うってだけの話じゃないから、
難しいってのはわかるよ。
0193デフォルトの名無しさん
2010/05/03(月) 10:46:14クラッカーとかはどうか知らんけど・・
0194デフォルトの名無しさん
2010/05/03(月) 12:30:20それのソース見て勉強しなさい
0195デフォルトの名無しさん
2010/05/03(月) 20:48:35ソケットエラーが返ってきた場合でもclosesocket()は必要でしたっけ?
0196デフォルトの名無しさん
2010/05/03(月) 21:23:21ソケット作成時以外なら要るだろう。
0197デフォルトの名無しさん
2010/05/04(火) 02:28:16ありがとうございました。
0198デフォルトの名無しさん
2010/05/04(火) 07:57:06知られちゃダメなNATの意味ってなんだよ。UPnPなんか許せない死ねという主張か?
0199デフォルトの名無しさん
2010/05/04(火) 21:21:47NATトラバーサルとかそういうこと?
0200デフォルトの名無しさん
2010/05/06(木) 19:01:45皆さんの力をお貸しください。
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1440449509
0201デフォルトの名無しさん
2010/05/06(木) 19:28:45普通に共有フォルダでいいだろw
0202デフォルトの名無しさん
2010/05/06(木) 21:01:01>それが、パソコン2台を接続してハードディスクなどを共有することです。
どこの国の人だよ
0203デフォルトの名無しさん
2010/05/06(木) 21:57:30パソコンの中、つまり仮想世界なんです
仮想世界の高校での文化祭で展示したいものがあります。
それが、パソコン2台を接続してハードディスクなどを共有することです。
パソコン2台とは1台は仮想世界のパソコンでもう一台は現実世界のパソコンです
0204デフォルトの名無しさん
2010/05/06(木) 22:25:18死んでるように見えますが、仮想世界では生きてます
0205デフォルトの名無しさん
2010/05/06(木) 22:40:13君が現実と思っている世界は実は仮想世界なんだ
神の創った仮想世界、それが君達の世界なのだよ
0206デフォルトの名無しさん
2010/05/06(木) 22:40:17最近チェックしてないからよく分からん。
0207デフォルトの名無しさん
2010/05/07(金) 00:20:08,r'⌒ `ヽ ) じ じ は (
( ( ,. ┴─ . ( た ぬ 丿
ゝ ´ / \ ) く (
「 厂ッヘ ̄\ ', ( な )
リ ./ ,==≧v ,ィ} ノ い /
/ { 〃 j 「`'} \ ノ
/ .| r--、_ イ } ゝ─っ .-─'′
,イ | 彳 ̄` ‐.マ}ノ --==彡 '
r'´ :l \ .| {_,,_ //
_/ ゝ. \\ `´/
/ ̄ ミ≧rrrイ
/ ヾツ\
/ \ \
/ \ ノ. \
. / .-‐===キミ、_____∠彡=≧
. ' / ̄ヽ ∨://///V///// /  ̄\
/ | / ̄ ̄ ̄∨////////// / \
/ | / r──-く^V://///// // ヘ
0208デフォルトの名無しさん
2010/05/07(金) 10:40:10WSAAsync
は何の略なのでしょうか?
WSはWinSockな気がしますが、AAsyncとは…?
syncはsynchronizeでしょうが、それならAASyncとなりそうなもの。
そもそもAAって?
0209デフォルトの名無しさん
2010/05/07(金) 10:51:590210デフォルトの名無しさん
2010/05/07(金) 10:54:070211デフォルトの名無しさん
2010/05/07(金) 10:55:570212デフォルトの名無しさん
2010/05/07(金) 13:07:020213デフォルトの名無しさん
2010/05/07(金) 13:22:25非同期っつー意味
0214デフォルトの名無しさん
2010/05/07(金) 13:50:430215デフォルトの名無しさん
2010/05/07(金) 13:59:300216デフォルトの名無しさん
2010/05/07(金) 14:21:140217デフォルトの名無しさん
2010/05/07(金) 14:22:20の事か?
0218デフォルトの名無しさん
2010/05/07(金) 15:18:27gethostbynameは即座に処理が返ってくるとは限らないので、なるべく
WSAAsyncGetHostByName を使った方が良い。
ということだったので使ってみているのですが、
実験として「名前解決に数秒かかる」状態を試してみたいと考えています。
どのようなアドレスを指定すれば、そのような挙動になるでしょうか?
・存在しないアドレスを指定してみる
・LANケーブルをひっこぬいた上で、存在するアドレスを指定してみる
・LANケーブルをひっこぬいた上で、存在しないアドレスを指定してみる
と試してみましたが、どれも1秒もたたないうちに「失敗」となりました。
0219デフォルトの名無しさん
2010/05/07(金) 15:32:390220デフォルトの名無しさん
2010/05/07(金) 15:38:35存在しないLAN外のアドレスを指定するといいよ
0221デフォルトの名無しさん
2010/05/07(金) 15:47:37となると、自前でDNSサーバーを立てなければなりませんね。
仕組みは知っているものの、気軽に立てられるものなのかなどはサッパリです。今ぐぐって勉強し始めました
>>220
存在しないアドレス(LAN外です)を指定してみたのですが、1秒立たずに失敗で返ってきました。
私自身も、仕組み上長い間さまよってくれると期待していたのですが・・・。
試してみたアドレスは以下の通りです。キーボードをめちゃくちゃに打ったものです。
www.fadbiouhfewrw.com
プログラムの間違いも考え、試しにブラウザでも開いてみようとしましたが、こちらも1秒立たずに
「存在しないサーバーです」となりました。
0222デフォルトの名無しさん
2010/05/07(金) 15:49:51実験するPCのファイアウォール設定でTCP53行きパケットを破棄しておいて実行する
(REJECTじゃなくてDROPね)
0223デフォルトの名無しさん
2010/05/07(金) 15:54:220224デフォルトの名無しさん
2010/05/07(金) 15:58:4910秒くらい稼げるね
0225デフォルトの名無しさん
2010/05/07(金) 16:08:34アイデアありがとうございます。
>>223
こちらの手法で試したところ、10秒程度の時間無反応にすることができました。
ありがとうございます。
他の人がやる時のために記述しておきます。WindowsXPです。
・コンパネで「ネットワーク接続」
・「ローカルエリア接続」を選択して開く(接続の仕方によって、多分名前違うでしょう)
・プロパティ
・インターネットプロトコル(TCP/IP)を選択し、プロパティ
・「次のDNSサーバーのアドレスを使う」をONにし、優先DNSサーバーに存在しないローカルIPアドレスを割り振って「OK」ボタン
・ウインドウが1つ閉じるので、あらためてこちらも「OK」ボタンを押す(押さないとまだ設定が反映されていませんでした)
この状態で実験。
0226デフォルトの名無しさん
2010/05/07(金) 16:24:440227デフォルトの名無しさん
2010/05/07(金) 17:02:57dummynet
0228デフォルトの名無しさん
2010/05/07(金) 17:06:08fcs壊すようなL2エラーとか、ワイヤレート欲しいとかなら専用ハードになるけど。
0229デフォルトの名無しさん
2010/05/07(金) 17:47:270230デフォルトの名無しさん
2010/05/07(金) 17:59:43netemやdummynetは遅延出来るよ.
0231デフォルトの名無しさん
2010/05/07(金) 18:31:390232デフォルトの名無しさん
2010/05/07(金) 18:33:330233デフォルトの名無しさん
2010/05/07(金) 18:41:390234デフォルトの名無しさん
2010/05/07(金) 18:44:150235デフォルトの名無しさん
2010/05/07(金) 20:56:51gethostbynameに相当する関数は、
・gehostbyname
・getaddrinfo
・WSAAsyncGetHostByName
の3つだと思うのですが、少し悩んでいます。
と言いますのも
SOCKET SocketConnect(address, port, timeout);
こんな感じの関数を作りたいのですが、上記3つはどれもタイムアウトを設定する術が無さそうなのです。
connectは
::WSAEventSelect(socket, hEvent, FD_CONNECT);
こうすることで、タイムアウト付きで呼び出せているのですが…。
何か良い方法はありますでしょうか?
(WSAAsyncを使うのが正道だとは思うのですが…)
0236デフォルトの名無しさん
2010/05/07(金) 22:28:58http://msdn.microsoft.com/en-us/library/ms741522(VS.85).aspx
Note The WSAAsyncGetHostByName function is not designed to provide parallel
resolution of several names. Therefore, applications that issue several requests
should not expect them to be executed concurrently. Alternatively, applications
can start another thread and use the getaddrinfo function to resolve names in an
IP-version agnostic manner. Developers creating Windows Sockets 2 applications are
urged to use the getaddrinfo function to enable smooth transition to IPv6 compatibility.
0237デフォルトの名無しさん
2010/05/08(土) 23:42:08特定のIPからのアクセスを「成立させずに却下する」ことはできないでしょうか?
現在はとりあえず成立させたあと、IPを調べ、NGユーザーなら即座にshutdown & closesocket しています。
つまり、ユーザー側はconnectに「成功」し、即座に切断されます。
ここをconnectにそもそも失敗させてやりたいのです。
0238デフォルトの名無しさん
2010/05/08(土) 23:46:370239デフォルトの名無しさん
2010/05/08(土) 23:55:420240デフォルトの名無しさん
2010/05/09(日) 00:00:52ご冗談を
0241デフォルトの名無しさん
2010/05/09(日) 00:12:230242デフォルトの名無しさん
2010/05/09(日) 00:28:39ルーター、サーバーのファイアウォールでしっしっ
0243デフォルトの名無しさん
2010/05/09(日) 00:34:06何か方法があれば教えていただけますでしょうか。
0244デフォルトの名無しさん
2010/05/09(日) 00:38:070245デフォルトの名無しさん
2010/05/09(日) 00:55:140246デフォルトの名無しさん
2010/05/09(日) 03:00:090247デフォルトの名無しさん
2010/05/09(日) 05:25:01acceptする前にackを返すので無理です。
SYN FLOODがなぜ未だに有効な攻撃手段なのかを考えればわかると思いますが、
アプリ側でやれる事といえばせいぜいBACKLOG数を調整するくらいです。
0248デフォルトの名無しさん
2010/05/09(日) 09:02:42http://ruffnex.oc.to/kenji/text/fire_a/
0249デフォルトの名無しさん
2010/05/09(日) 13:01:350250デフォルトの名無しさん
2010/05/09(日) 14:06:190251デフォルトの名無しさん
2010/05/09(日) 14:30:52可能。winsock限定になるが。
MSDNで「SO_CONDITIONAL_ACCEPT」と「WSAAccept」を参照すべし。
0252デフォルトの名無しさん
2010/05/09(日) 15:43:20もう二度目だよ
いい加減にしてほしい
0253デフォルトの名無しさん
2010/05/09(日) 17:37:11UNIX版も作って!
0254デフォルトの名無しさん
2010/05/09(日) 22:22:10ありがとうございました。
無事できました。
しかしこれ、情報少ないですね。
気になる点としては
SO_CONDITIONAL_ACCEPT ソケット オプションを使用して通信するプログラムを使用すると、ネットワークのパフォーマンスが低下する
ttp://support.microsoft.com/kb/328264/ja
↑これと、後は「CF_REJECT」を返しても2〜3回程度WSAAcceptが反応することでしょうか。
断ってるんだからあきらめろ!
と言いたいところですが、断られたことが相手に通じるまでの間に、再要求が何度も来ているという感じでしょうか?
(もちろん、クライアントは1度のconnectしか呼んでいません)
0255デフォルトの名無しさん
2010/05/10(月) 15:25:50KBの328264についてはXP Service Pack 2で修正済みとあるよ。
ただそれでもSO_CONDITIONAL_ACCEPTを使わない場合と比較すると
一定時間内に受け付け可能な接続数とかは低下するだろうけど。
>「CF_REJECT」を返しても2〜3回程度WSAAcceptが反応することでしょうか。
えっ?マジで?
サーバからちゃんとRST出てる?
0256デフォルトの名無しさん
2010/05/10(月) 17:30:07レスありがとうございます。
RTS というのについてこれから勉強させていただきますが、まずは自分が書いたソースを転載しておきます。
使い方間違えている可能性も高そうですので。
unsigned long flg = TRUE;
setsockopt(sck, SOL_SOCKET, SO_CONDITIONAL_ACCEPT, (PSTR)&flg, sizeof(flg));
listen(m_sckListen, 10);
while(true)
{
struct sockaddr addr;
int len = sizeof(addr);
SOCKET user = WSAAccept(sck, &addr, &len, CheckFunc, NULL);
printf("%d\n", user);
}
int CALLBACK CheckFunc(引数省略)
{
return CF_REJECT;
}
こんな感じです。(感じですというか、プロジェクトからコピペしました)
この状態でクライアントからconnectすると、WSAAcceptが2〜3回反応します。
サーバーとクライアントは同PC上で動作させ、localhostへ向かってconnectさせています。
connectを呼ぶのは1度だけ。結果としてはもちろん「拒否」され、connectは失敗します。
0257デフォルトの名無しさん
2010/05/10(月) 17:44:40その時のuserの値は?
0258デフォルトの名無しさん
2010/05/10(月) 18:06:34はい、printfが2〜3回反応します。ほとんどの場合3回です。
値は -1なのでINVALID_SOCKETです。
0259デフォルトの名無しさん
2010/05/10(月) 22:59:12調べたけどWinsockではSYNに対するRSTはクライアント側で
無視されるみたいですね。>>248の方が良いかも。
0260デフォルトの名無しさん
2010/05/10(月) 23:02:270261デフォルトの名無しさん
2010/05/11(火) 02:35:323回SYN出すのはwindowsが糞仕様だからだ。実際に1つのconnectで3回接続試してる。
unixからのconnectならば1回しか出ないはずだ。
↓にあるようにレジストリのTcpMaxConnectRetransmissionsを0にするがよい。
http://support.microsoft.com/kb/175523/
http://support.microsoft.com/kb/933805/
http://technet.microsoft.com/en-us/library/cc739819(WS.10).aspx
0262デフォルトの名無しさん
2010/05/11(火) 09:16:25細かくありがとうございました。
以後同じことをやる人は、
setsockopt(sck, SOL_SOCKET, SO_CONDITIONAL_ACCEPT, (PSTR)&flg, sizeof(flg));
は、listenの前にやらなければならないことに注意してください。
マニュアルにもかなりさらっと書いてあって、最初見逃して頭ひねりましたので
0263デフォルトの名無しさん
2010/05/11(火) 10:35:070264デフォルトの名無しさん
2010/05/11(火) 17:43:34262です。
CheckFunc内で相手のIPやホスト名を見て、許可したりしなかったりとやりたいのですが、
ホスト名をとるためのgethostbyaddrは時間がかかることがありますよね。
なので名前解決中に次の人のチェックへ移行しようと、1人目にはCF_DEFERを返しました。
と同時に、スレッドで逆引きを開始します。
しかし、次のWSAAcceptでは、先ほどCF_DEFERを返したはずの接続要求をまた取得してしまいました。
2つ目の接続要求が来ている状態にも関わらずです。
・プログラムは、>>256のものを改造。CheckFuncの中で「接続要求元IP」をprintfし、return CF_REJECT を CF_DEFERにしただけです。
・2か所のクライアントから、同時に1つずつconnectされている状況
・どれだけ待っていても、片方のIPのみが延々とprintfされます
・CF_REJECTを返すように書き変えた場合は、きちんとWSAAcceptが2つの要求を交互に取得します。(もちろん3回ずつ)
現状資料をひっくり返していますが、どうも「後回しにする」方法が見つかりません。
やはり妥協して「一旦は接続を受け入れ、その後身元調査。許可されたら送受信を行う。許可できない身元だったらclosesocketする」
という形にしたほうが良いのでしょうか。
元々が「接続させたくないIP or ホスト名からの接続要求をはじいて、そのクライアントのconnect自体を失敗させたい」から始めた調査なのですが…。
0265デフォルトの名無しさん
2010/05/11(火) 19:57:30フィルタしてしまうのが一番良いと思うんだが
0266デフォルトの名無しさん
2010/05/11(火) 20:09:350267デフォルトの名無しさん
2010/05/11(火) 21:07:00これでいいですか? >いつもの人
0268デフォルトの名無しさん
2010/05/11(火) 22:07:260269デフォルトの名無しさん
2010/05/11(火) 22:50:080270デフォルトの名無しさん
2010/05/11(火) 23:17:49例えば受け入れ可否を判断するのにホスト名文字列とパターンマッチ
しなけりゃいけない様な場合とかフィルタするのにDNS照会が必要な場合は
「一旦は接続を受け入れ、その後身元調査。許可されたら送受信を行う。許可できない身元だったらclosesocketする」
の方が何かと安全だと思いますよ。
それとも他に何か良い方法があるのだろうか?
0271デフォルトの名無しさん
2010/05/11(火) 23:34:52解説よろしこ
0272デフォルトの名無しさん
2010/05/11(火) 23:41:42IPアドレスと言え。
0273デフォルトの名無しさん
2010/05/11(火) 23:42:000274デフォルトの名無しさん
2010/05/11(火) 23:52:08,/ ノ ヽ ~\
/ ノ IPA ヽ ~\
/ ノ ヽ、 `ヽ
| ノ / ̄\ / ̄~ヽ ヽ i
| ノ | ノ
\ | <●> <●> ( )
\ | | | i /
| / ヽ レ
i (●_●) /
i、 ,-――-、 ・ /
i、 <(EEEEE)> ∵/ どういたしまして
i、 \ ./ /
\ ーー ,ノ
,,.....イ.ヽヽ、ー-―一ノ゙-、.
: | '; \_____ ノ.| ヽ i
| \/゙(__)\,| i |
0275デフォルトの名無しさん
2010/05/12(水) 00:29:41なるほど。
友達とか仕事やらで
関わりあいたくないタイプだということは分かった。
0276デフォルトの名無しさん
2010/05/12(水) 09:02:05*.dion.jp とかでNG設定する機能を作りたいものでして
>>270
CF_DEFER が「順番待ちの列の末尾に並ばせる」という機能であれば、現状の仕組み(>>256)でいけそうなのです。
DNS照会中に、他ユーザーまで待たされていまうのが問題なので。
「何かと安全」ということは、CF_?で拒否や許可をする方式は、何か危険性がありそうなのでしょうか?
0277デフォルトの名無しさん
2010/05/12(水) 11:03:42危険というかCF_DEFER使った場合のシステムの動きがよく分からないから。
>>264の
>しかし、次のWSAAcceptでは、先ほどCF_DEFERを返したはずの接続要求をまた取得してしまいました。
>2つ目の接続要求が来ている状態にも関わらずです。
ということは一旦CF_DEFERを返したらその接続要求にCF_ACCEPTかCF_REJECT
を返すまで他の接続は受け付けられないようになっているんじゃないのか?
と思えるし、その状態で1つ目の相手がリトライした場合どうなるのか?とか。
うまく制御出来たら教えてください。
0278デフォルトの名無しさん
2010/05/12(水) 11:39:340279デフォルトの名無しさん
2010/05/12(水) 13:04:440280デフォルトの名無しさん
2010/05/12(水) 16:37:34よろしくお願いします。
CheckFunc内で相手のIPアドレスやホスト名を見て、許可したりしなかったりとやりたいのですが、
ホスト名をとるためのgethostbyaddrは時間がかかることがありますよね。
なので名前解決中に次の人のチェックへ移行しようと、1人目にはCF_DEFERを返しました。
と同時に、スレッドで逆引きを開始します。
しかし、次のWSAAcceptでは、先ほどCF_DEFERを返したはずの接続要求をまた取得してしまいました。
2つ目の接続要求が来ている状態にも関わらずです。
・プログラムは、>>256のものを改造。CheckFuncの中で「接続要求元IPアドレス」をprintfし、return CF_REJECT を CF_DEFERにしただけです。
・2か所のクライアントから、同時に1つずつconnectされている状況
・どれだけ待っていても、片方のIPアドレスのみが延々とprintfされます
・CF_REJECTを返すように書き変えた場合は、きちんとWSAAcceptが2つの要求を交互に取得します。(もちろん3回ずつ)
現状資料をひっくり返していますが、どうも「後回しにする」方法が見つかりません。
やはり妥協して「一旦は接続を受け入れ、その後身元調査。許可されたら送受信を行う。許可できない身元だったらclosesocketする」
という形にしたほうが良いのでしょうか。
元々が「接続させたくないIPアドレス or ホスト名からの接続要求をはじいて、そのクライアントのconnect自体を失敗させたい」から始めた調査なのですが…。
0281デフォルトの名無しさん
2010/05/12(水) 16:41:26windowsはスレッドorプロセス毎に並列でacceptってできないんだっけ?
0282デフォルトの名無しさん
2010/05/12(水) 17:00:25そもそもunixならaccept以前にSYN/ACK返す方法(一旦受け入れる)しかないでしょ。
0283デフォルトの名無しさん
2010/05/12(水) 17:03:21方法が無いわけではない
0284デフォルトの名無しさん
2010/05/12(水) 19:02:260285デフォルトの名無しさん
2010/05/12(水) 19:12:22IPアドレスと正しく呼んだので教えよう。
while (select()) {
if (fd_isset(listening_socket)) {
CreateThread(accept_func, listening_socket);
}
}
0286デフォルトの名無しさん
2010/05/12(水) 20:41:06試してみましたが、スレッド側で「CF_REJECTかCF_ACCEPTを返すWSAAccept」が制御を返さない限り、
select()で「次のコネクト要求来たよ」という反応が出ないようです。
>>256でいうCheckThreadの中で::Sleep(10000);として試してみました。
0287デフォルトの名無しさん
2010/05/12(水) 21:05:090288デフォルトの名無しさん
2010/05/13(木) 02:30:260289デフォルトの名無しさん
2010/05/13(木) 10:16:11そういう挙動なら、SOCK_RAWで監視するスレッドで先読みしておけば少しは改善する。
時間のかかるのが先に到着してしまったなら、回避出来ないけど。
>>288は嘘だった。
0290デフォルトの名無しさん
2010/05/13(木) 10:42:440291デフォルトの名無しさん
2010/05/13(木) 13:21:450292デフォルトの名無しさん
2010/05/16(日) 21:11:090293デフォルトの名無しさん
2010/05/19(水) 21:47:01なにを使って実装するのが一番簡単ですか?
0294デフォルトの名無しさん
2010/05/19(水) 21:53:350295293
2010/05/19(水) 22:15:37そのパケットを破棄して、かわりにエラーを返すといったことをしたいです。
なので、ネットワーク上を流れるすべてのHTTPのパケットを監視し
内容をチェックして、制限にひっかかれば破棄するようなプログラムを作り
常駐させることを考えています。
0296デフォルトの名無しさん
2010/05/19(水) 22:27:13ローカルプロキシとは違うの?
0297293
2010/05/19(水) 23:15:50どちらかというとiptablesみたいなものが近いです。
0298デフォルトの名無しさん
2010/05/19(水) 23:24:340299デフォルトの名無しさん
2010/05/19(水) 23:55:33プロキシを間に挟むことによる制限って例えばなに?
0300デフォルトの名無しさん
2010/05/20(木) 05:14:54ためしに簡単なechoサーバー/クライアントの組み合わせでソケットの生成を
socket(AF_INET, SOCK_STREAM,IPPROTO_SCTP)に変えただけでLinux上で
普通に動いた。
tcp上でメッセージの切れ目を探す手間が省けるかなというだけの軽い気持ち
なのだが、実際に使われているのか気になる。
0301デフォルトの名無しさん
2010/05/20(木) 08:20:26http://www.linux.or.jp/JF/JFdocs/TransparentProxy.html
0302デフォルトの名無しさん
2010/05/20(木) 18:06:43現状TCP/UDPでインフラが作られちゃってるから、
SCTPで動くものは非常にすくない。
使ってるのは大抵その人のオナニー。
ただ、遠い未来、SCTPに移行するのは間違いないと個人的には思ってて
色々勉強はしてる。
0303デフォルトの名無しさん
2010/05/20(木) 20:33:320304デフォルトの名無しさん
2010/05/20(木) 20:57:41http://ja.wikipedia.org/wiki/Stream_Control_Transmission_Protocol
http://itpro.nikkeibp.co.jp/word/page/10006397/
http://www.asahi-net.or.jp/~aa4t-nngk/ipttut/output/sctpcharacteristics.html
0305デフォルトの名無しさん
2010/05/20(木) 23:16:070306デフォルトの名無しさん
2010/05/20(木) 23:39:42第3層プロトコルだから通過する限りは別にIPだから必要なし。 ファイアーウォールや
帯域管理なんかはどうだろうね。
とりあえずググるとIOSのスタック自体はSCTPに対応してるようだ
http://www.cisco.com/en/US/docs/ios/12_2t/12_2t8/feature/guide/ft_sctp2.html
0307デフォルトの名無しさん
2010/05/20(木) 23:47:57> SCTPで動くものは非常にすくない。
今のところメジャー(?)なのはDiameterぐらいですかね。 しかしシステム内
通信ではかなり使われているんじゃないかと思います。 次のプロジェクトで
このミドルウェアを使おうかと思ってるんですけど
http://www.cs.wustl.edu/~schmidt/ACE.html
中にロッキード・マーティンによって書かれたSCTPソケットのサポートが
寄付されてました。
0308デフォルトの名無しさん
2010/05/21(金) 11:45:18長文ですいません。
今勉強として、Winsockでチャットサーバーを作っています。
最初はWSAAsyncSelectを使い、WMで接続を受け付けたり、送られてきたデータを読んだりしていました。
・FD_READでデータを読み込み、バッファに貯める。バッファに発言内容が1つ以上貯まっていたら、それらを全ユーザーに送信し、不必要になった部分をバッファから削除する
といった感じで、うまく動いています。
その次に、以下の機能を追加しました。
「1ユーザーは5秒に1度以上は発言できず、それより短い間隔で発言がサーバーに届いた場合、遅延させて全ユーザーに届ける」
というものです。
「あ」「い」という2つの発言が1秒で届いたとしても、まずは「あ」だけ送り、「い」は5秒後に送る。という仕様です。
(何だその仕様。と思うかもしれませんが、「ユーザーの動作にたいし、遅延させてから情報を送る」実験のための仕様なので)
再現するために、WM_TIMERを1秒ごとにまわし、発言が「貯まっている」ユーザーを探して、貯まっていてかつ前回発言より5秒経っていたら送信するようにしてみました。
ここで気づいたのですが、このような「サーバーが一定時間毎に色々監視する」場合
わざわざWSAAsyncを使わずに、ノンブロッキングモードにして
acceptも各ユーザーのreadも1つのスレッドで回したほうが実装が楽そうだと思いました。
しかしながら
ttp://www.kt.rim.or.jp/~ksk/wskfaq-ja/
などでは「ポーリングは絶対するな」という風に書かれており、ノンブロッキングモードは非推奨のようです。
ではと、FD_ACCEPTやFD_READを使うとともに、別スレッドでユーザーたちを監視するような形にすると、今度はスレッド間の排他処理で実装が少し複雑になります。
「定期的に●●する」ようなサーバーを立てる場合、どんな方式でやるのが望ましいのでしょうか?
0309デフォルトの名無しさん
2010/05/21(金) 13:24:20チャットならミリ秒で応答する必要もないので数百ミリ秒程度間隔をあけてポーリングすれば大丈夫だと思うけど
0310デフォルトの名無しさん
2010/05/21(金) 13:59:08すいません、確かにポーリングが怒られているのは
「recvが、期待したデータ量をよこすまで延々ポーリング」
のような、それブロッキングでやれよといった内容についてのようです。
「サーバースレッド自体が永久ループ、その時非ブロッキングソケットを使うこと」について怒っているわけではないようですね。
どうにも非ブロッキングソケットはあまり良い顔をされていない気がするので、使う時「本当に使っていいのかな?」と迷ってしまいます。
0311デフォルトの名無しさん
2010/05/21(金) 14:06:32WSAAsync使え
0312デフォルトの名無しさん
2010/05/21(金) 14:18:28あとはもう宗教だろw
0313デフォルトの名無しさん
2010/05/21(金) 14:26:200314デフォルトの名無しさん
2010/05/21(金) 14:27:47非ブロッキング+select()って、ブロッキングの次にポータブルだから
何だかんだで良く使われてると思うけど
0315デフォルトの名無しさん
2010/05/21(金) 14:28:25今まで苦情言われたこと無いよ
0316デフォルトの名無しさん
2010/05/21(金) 14:41:33誰かが高速で大量のデータ送ってきた際に、その処理に時間食われて
肝心のメインループが処理落ちしちまうだろ
recvは別スレッドでやるのが当たり前
0317デフォルトの名無しさん
2010/05/21(金) 15:01:13効率上の話か
効率が再重要ならWSAAsyncSelect()も勿論ダメで
IOCP + Overlapped I/Oしかないんじゃね
0318デフォルトの名無しさん
2010/05/21(金) 15:04:55極論すぎるんだよお前は
0319デフォルトの名無しさん
2010/05/21(金) 15:29:35その遅延機能実装するなら、同じユーザの発言なら遅延するような
アダプタを出力前にかませればよいのであって。ソケットからどう
読むかなんてどうでも良いのでは?
0320デフォルトの名無しさん
2010/05/21(金) 15:37:43いや、裏タスクは当然裏でやるとして
select, accept, recvを同一のスレッドで走らせると処理落ちすぎるぐらいの
サーバなんだろ?
IOCPしか無いと思うけど
0321デフォルトの名無しさん
2010/05/21(金) 15:40:51ってソフトがあった
0322デフォルトの名無しさん
2010/05/21(金) 15:55:500323デフォルトの名無しさん
2010/05/21(金) 15:57:44まあBSDモドキがMSの目的だったからな。
Windowsでまともなネットワークプログラミングをしたかったら、
モドキなWinSockじゃなくMS謹製のWindows APIを使えってことだ。
0324デフォルトの名無しさん
2010/05/21(金) 17:29:210325デフォルトの名無しさん
2010/05/21(金) 18:22:50下手の考え休むに似たり
case毎に適した方法でやるのがいい、一般的な解なんてない
0326デフォルトの名無しさん
2010/05/22(土) 07:49:22まあいいんじゃないの?
0327デフォルトの名無しさん
2010/05/22(土) 14:08:35WinSockでも、WinSock上でも無いNetwork APIって何?
0328デフォルトの名無しさん
2010/05/22(土) 14:58:14こまかいな、意味分かるんだからいいだろ。
お前友達いないだろ?
0329デフォルトの名無しさん
2010/05/22(土) 15:00:01プログラマって細かい性格じゃないとやっていけないと思うので、
これは職業病だと思って放置すれば良いと思いますよ。
0330デフォルトの名無しさん
2010/05/22(土) 15:02:32絶対に許さない
0331デフォルトの名無しさん
2010/05/22(土) 15:04:19いや、俺も全く意味が分からないぞ
Winsock2使わず
> Windowsでまともなネットワークプログラミングをしたかったら、
って無理だろ
一体何が言いたいの?
0332デフォルトの名無しさん
2010/05/22(土) 15:50:56「Windowsでまともなネットワークプログラミングが出来る
WinsockじゃないMS謹製のWindows API」について是非教えて頂きたい。
あなたは凄く詳しいようだから。
0333デフォルトの名無しさん
2010/05/22(土) 16:51:25なのかなあ
0334デフォルトの名無しさん
2010/05/22(土) 18:51:07おせ〜て
0335デフォルトの名無しさん
2010/05/22(土) 18:51:24これを無効にした場合、順序性は保たれるのでしょうか?
たとえば以下のように再送の必要が出た場合、'B','A','C'とあべこべに届くのですか?
[クライアント] [サーバ]
'A'-------------->あぼん
'B'------------------------------->
<================================= NACK ('A')
'A'------------------------------->
<================================= ACK ('B')
'C'------------------------------->
<================================= ACK ('A')
<================================= ACK ('C')
0336デフォルトの名無しさん
2010/05/22(土) 19:02:10順序とnagleとは関係ないだろう。
0337デフォルトの名無しさん
2010/05/22(土) 19:06:28そのACK ('B')なんて出ないよ。
nagleアルゴリズム無効にしたからって順序性が崩れるわけがありません。
教科書読み直してガンバレ
0338デフォルトの名無しさん
2010/05/22(土) 19:14:50ありがとうございます。
どうも覚え違いのようですね。
もう一度勉強し直してみます。
0339デフォルトの名無しさん
2010/05/22(土) 22:10:49職業プログラマじゃないからよくわからんのだけど、
「システム内通信」って何?
あと、ACEはよく知らない(使ったことない。超重量級のライブラリだってことは知ってるw)
から、参考意見だせないなぁすまそ
0340339
2010/05/23(日) 00:50:37「システム内通信」とはいわゆる、1つのシステムとして密に通信するプロセス間の通信。
1ハードウェア上のプロセス間もあるし、複数のハードウェア間の通信もありうる。 普通はシンプルな
システム内だけで使われる独自メッセージングプロトコル。
0341デフォルトの名無しさん
2010/05/23(日) 08:17:57「システム内通信」は初耳だなぁ
0342デフォルトの名無しさん
2010/05/23(日) 08:51:590343デフォルトの名無しさん
2010/05/23(日) 11:34:310344デフォルトの名無しさん
2010/05/23(日) 11:47:14(しばしば独自のアプリケーション層プロトコルを使った)IPCってことか
昔なら電文とか言ってた奴だな
いやそういうものは確かに普通にあるけど
「システム内通信」なんて単語は、ぐぐっても、ズバリこれだってのが出てこねーぞ
閉じた世界でしか通じない隠語ならやめて欲しい
0345デフォルトの名無しさん
2010/05/23(日) 12:36:43そんなことより SCTP って表記が紛らわしいというか
STCPってつい書きたくなっちまうだろなんとかしろ!
0346デフォルトの名無しさん
2010/05/23(日) 12:46:07誰も誤解していないと思われるから、細かい議論はいいんじゃねえか?
ところで、>>307に「しかし(SCTPは)システム内通信ではかなり使われて
いるんじゃないかと思います」とあるが、ホントなんだろうか。
>>340に「(システム内通信とは)シンプルなシステム内だけで使われる
独自メッセージングプロトコル」という定義があって、自分はそれに同意するんだが、
わざわざSCTPを使う目的が分からない。シンプルなメッセージングならTCPで無問題では?
0347デフォルトの名無しさん
2010/05/23(日) 12:58:47データグラム型TCPという、聖なる矛盾に満ちた神プロトコルだからだろ。
電文がぶつぎりになったり後ろとくっついたりしないのは
ほんとにほんとうに便利だお
0348デフォルトの名無しさん
2010/05/23(日) 14:58:560349デフォルトの名無しさん
2010/05/23(日) 16:01:420350デフォルトの名無しさん
2010/05/23(日) 16:08:16やっぱWindows95以降かな
0351デフォルトの名無しさん
2010/05/23(日) 16:57:59マジか?
うちの仕事じゃ毎日のように使う用語なんだが遅れてるのかな・・・
0352デフォルトの名無しさん
2010/05/23(日) 16:59:010353デフォルトの名無しさん
2010/05/23(日) 17:04:11電文の切り出しなんかTCPでも電文長を頭に付ければ簡単に
出来るんだからSCTP使う理由になるわけない。
0354デフォルトの名無しさん
2010/05/23(日) 17:26:52>電文長を頭に付ければ
プッ
0355デフォルトの名無しさん
2010/05/23(日) 17:29:15電文長だけじゃダメだろ。
ヘッダ、電文長、本文、フッタ、サム
最低でもこんくらいいるだろ、齟齬無くやろうとしたら。
0356デフォルトの名無しさん
2010/05/23(日) 18:03:100357デフォルトの名無しさん
2010/05/23(日) 18:17:21えっ?
データがおかしくなってもそのままおかしくなったまま被害が増大するのをほっとくの?
0358デフォルトの名無しさん
2010/05/23(日) 18:46:550359デフォルトの名無しさん
2010/05/23(日) 18:47:36ヘッダ、フッタにサム付きなんて、まるでベーシック手順全盛の時代を想い出すなぁ。
あぁ、そういやメッセージじゃなくて電文だったw
冗談はさておき、TCPだからサム(チェックサムのこと?)は不要。
もしやるなら、アプリケーション層で論理メッセージ全体のサムを計算させる。
たとえばファイル転送プロトコルなら、転送ファイル全体のサムだ。電文単位は無意味。
あれ、それともSCTPって信頼性の保証されないプロトコルなのかな。だとしたらUDP以下だ。
0360デフォルトの名無しさん
2010/05/23(日) 19:11:18TCPならデータはおかしくならないよ。
0361デフォルトの名無しさん
2010/05/23(日) 19:40:250362デフォルトの名無しさん
2010/05/23(日) 19:43:31ストリームだからだろ。
0363デフォルトの名無しさん
2010/05/23(日) 19:45:07だから通信順序の保証されたUDPみたいな使い方が出来て便利だよ
0364デフォルトの名無しさん
2010/05/23(日) 19:46:09どこまで話を戻したいんだよw
ストリームだと「なぜ」チェックサムが要るんだか言ってみろ
0365デフォルトの名無しさん
2010/05/23(日) 20:00:290366デフォルトの名無しさん
2010/05/23(日) 20:01:350367デフォルトの名無しさん
2010/05/23(日) 20:06:20http://www.ibm.com/developerworks/jp/linux/library/l-sctp/
0368デフォルトの名無しさん
2010/05/23(日) 20:07:29マルチストリーミングのところがよくわからん
解説してくんろ
0369339
2010/05/23(日) 20:38:29簡単ではあるが、それがカーネル内でやってくれるというのは効率上大きな意味があると
思います。 切り分けが、カーネルと往復せずに処理されるという所に意味があると。
0370デフォルトの名無しさん
2010/05/23(日) 20:48:14TCP通信で、途中のパケットが失われることってある?
A,B,C と送信してきて、Bが失われたとき、Cの受信時に
Bが失われたことを検知できるっけ?
0371デフォルトの名無しさん
2010/05/23(日) 20:52:27入り口から入ったものと出口から出てきたものが同じであることを保障してくれるのがTCP
パケットが欠落したらTCPの中の人が再送してくれるよ、ユーザーからは見えない
0372デフォルトの名無しさん
2010/05/23(日) 21:06:14一つの接続の中に複数のストリームを流せると読んだ
0373デフォルトの名無しさん
2010/05/23(日) 21:18:26>>370のときに、BとCが別ストリームだったらCだけ受信できる。
TCPだと1コネクション内に、TLV等でストリーム多重化しても、一つのパケットが落ちたら後続もブロックされる。
TCPで複数コネクション張れば同じだけど、今度は複数コネクションを一つのセッションとして扱う
めんどくささが生まれる。
1セッションに3ストリーム必要で、同時接続2セッションまで、みたいな制限かけるときとか。
0374デフォルトの名無しさん
2010/05/23(日) 21:18:45ttp://www.yoihon.com/sc/product-84512.html
この本はいかがでしょうか?感想お知らせください。ませ。
0375デフォルトの名無しさん
2010/05/23(日) 21:26:57マルチ・ホーミングのサポート。
コネクションのエンドポイントは複数のIPアドレスを持つことができ、ホストやネットワーク・カードの障害時にフェイルオーバーが可能。
別個のストリーム内のチャンクによるデータ転送。
これにより、TCPのバイトストリーム転送に見られるような、不必要なhead-of-the-lineブロッキング (待ち行列の先頭のデータがその後ろの転送を妨げること) を解消することができる。
経路選択とモニタリング。「プライマリ」データ転送経路を選択し、その転送経路の接続性をテストする。
検証と応答確認メカニズム。
フラッディング攻撃からの保護や、重複あるいは欠損したデータ・チャンクの通知を提供する。
0376デフォルトの名無しさん
2010/05/23(日) 22:15:21つまり、Bが失われたときはCは来ないってことでおk?
0377デフォルトの名無しさん
2010/05/24(月) 00:00:15Bの再送が失敗に終わればCは来ない
0378デフォルトの名無しさん
2010/05/24(月) 08:54:49ありがとう!
0379デフォルトの名無しさん
2010/05/24(月) 22:40:17(フレーム単位でのチェックサムではなく、)
セキュリティ的に改竄されてるかどうかとかそういうチェックサム。
(レイヤ7上でのプロトコルで改竄検出をするための)
0380デフォルトの名無しさん
2010/05/24(月) 23:50:00セキュリティを語りたいのなら、「ハッシュ」とか「ダイジェスト」という単語を
選ばないと誤解されて当然だと思われ。「チェックサム」は誤り検出の文脈で使われる単語。
ところで IPSEC は知っているかな。レイヤ3(ネットワーク層)のプロトコルだけどね。
0381デフォルトの名無しさん
2010/05/27(木) 21:42:01yahooのページも何ページもダウンロードするプログラムを作ったのですが、
何ページ目かのInternetOpenUrlがerror code12152(ERROR_HTTP_INVALID_SERVER_RESPONSE)を返します。
yahooが連続アクセスを拒否したという事なのでしょうか?
0382デフォルトの名無しさん
2010/05/27(木) 23:09:23そういうことです
0383デフォルトの名無しさん
2010/05/28(金) 05:08:01http://tsushima.2ch.net/test/read.cgi/newsplus/1274928007/
0384デフォルトの名無しさん
2010/05/28(金) 07:09:15Windows Server 2003 Microsoft-IIS/6.0 26-May-2010 202.238.45.27 Okazaki City Library
IIS6で5クライアント超えただけとかいうオチなら笑いもの
0385デフォルトの名無しさん
2010/05/28(金) 10:30:29やはりそうですか・・・。
>>383
タイムリーにこんな事件が起きていたのですね。
しかし、1秒に1回というペースでも問題になってしまうとは。
ロボット型サーチエンジンなんかはどうしているんだろう・・・。
0386デフォルトの名無しさん
2010/05/28(金) 11:02:37普通のロボットは retrieve しない。
0387デフォルトの名無しさん
2010/05/28(金) 13:19:49閲覧しにくい状態が続いた。
21回停止されていた。
サーバへの攻撃と判断して、一時的にhttpdを停止させたのかも知れない。
サーバ保護のための措置(緊急回避)なんだから、管理者が責任を問われることはないだろ。
0388デフォルトの名無しさん
2010/05/28(金) 17:17:25地方自治体の図書館なんてどこもヘボが作ってるんだろうな。
動機は、しばらくアクセスしにくい状態にしておいて、「うちで開発しましょう、
快適になりますよ」とか売り込むつもりだったんじゃないかな。
オレの地元の図書館もヘボっちすぎて作り直してやりたいと常々思ってるから、
理解できる。
0389デフォルトの名無しさん
2010/05/28(金) 22:12:26すべての組合せを表示し終えたら、それらの組合せが全部でいくつあるの
かも出力するプログラムを作成しなさい。
#include<stdio.h>
int main(void)
{
int i,num;
printf("自然数の組合せ\n");
num=0;
for(i=1;num<=14;i++){
num=num+i;
printf("%d\t",i);
}
printf("組み合わせは%d通り\n",num);
return 0;
}
現在ここまで作りましたが、プログラムがわかりません。
誰か教えてください。
0390デフォルトの名無しさん
2010/05/28(金) 22:13:54環境はVisual です。
0391デフォルトの名無しさん
2010/05/28(金) 22:16:460392デフォルトの名無しさん
2010/05/28(金) 22:29:21すいません。間違えました。
0393デフォルトの名無しさん
2010/05/29(土) 14:10:09うちもだよ
蔵書検索に30秒くらいかかる
0394デフォルトの名無しさん
2010/06/04(金) 23:18:12ttp://quoterank.yahoo.co.jp/ranking/search?b=1&kd=31&mk=11%2c%2012%2c%2021%2c%2022%2c%2031%2c%2032%2c%2043%2c%2047%2c%2083%2c%2087%2c%2094%2c%2097%2c%2017%2c%20A1%2c%20A7%2c%2037%2c%2019%2c%2029%2c%2039%2c%2049%2c%2089%2c%2099%2c%20A9&ca=1&tm=day&
このページは何回ダウンロードしてもエラーはでないのに、
ttp://table.yahoo.co.jp/t?s=8031.t&a=3&b=3&c=2010&d=6&e=4&f=2010&g=d&k=20100528
このページは数回ダウンロードするとエラーが出ます。
1DL毎に10秒時間をあけてもだめでした。
どういうアクセスを拒否するかは、yahooのシステム次第だと思いますが、
一般的にアクセスを拒否する仕組みはどのような物があるのでしょうか?
なんとかしてプログラムでダウンロードしたいです。
0395デフォルトの名無しさん
2010/06/04(金) 23:36:34エラーの詳細は?
0396デフォルトの名無しさん
2010/06/04(金) 23:56:35>>381の3行目に書いた事しか分からないです。
0397デフォルトの名無しさん
2010/06/05(土) 04:16:12次の書き込み可能な時間が来るまでのカウントダウン表示をする
アプリを作りたいのですがどのようにすればいいのでしょうか?
0398デフォルトの名無しさん
2010/06/05(土) 15:16:17バケットキャプチャは?
0399デフォルトの名無しさん
2010/06/05(土) 19:26:32Wiresharkで見てみたんですけど、データの見方がわからないです。
通信は難しいなぁ・・・。
0400デフォルトの名無しさん
2010/06/05(土) 22:15:48なんかコードがバグってる気がするな
10秒間隔でWebブラウザで開く分には問題よね?
0401デフォルトの名無しさん
2010/06/06(日) 02:19:42それもパケットキャプチャレベルじゃなくてISPでキャプチャするユーザパケットレベルで検閲する(広告利用とか言ってるけど実際は検閲のこと)ってので、
現在中国やグーグルがやってる検閲以上のを検証してるようだけど。
0402デフォルトの名無しさん
2010/06/06(日) 03:55:260403デフォルトの名無しさん
2010/06/06(日) 04:10:050404デフォルトの名無しさん
2010/06/06(日) 05:24:440405デフォルトの名無しさん
2010/06/06(日) 06:55:25http://headlines.yahoo.co.jp/hl?a=20100605-00000003-jct-sci
0406デフォルトの名無しさん
2010/06/06(日) 09:01:36ブラウザで更新ボタンを何回も押すのは問題なくできます。
再度、コードをチェックしてみます。
0407デフォルトの名無しさん
2010/06/06(日) 09:31:24こういうのって、昔から過剰に反応する人がいるんだよな
昔はパソコンに疎いおっさんが、中の動作を知ったときにわめくことが多かったけど
0408デフォルトの名無しさん
2010/06/06(日) 09:39:380409デフォルトの名無しさん
2010/06/06(日) 09:49:11重要なのは恐怖だ。
0410デフォルトの名無しさん
2010/06/06(日) 10:34:11クズがデータを転売するに決まっている。
0411デフォルトの名無しさん
2010/06/06(日) 10:52:54たとえば、LANならロカールエリア接続が有効になっていて、TCP/IPプロトコルが有効になっていて、
とかそういうのをひっくるめて。しかもすごい頻繁にチェックするのですが。
0412デフォルトの名無しさん
2010/06/06(日) 11:01:33ああ、頻繁じゃなくてもいいです。タイマーか何かで定期的にチェックして
その結果でフラグセットしますので。
0413デフォルトの名無しさん
2010/06/06(日) 13:14:53ネット情報すべて解析する技術 利用者から「使用やめろ」の大合唱
6月5日18時12分配信 J-CASTニュース
だが通信の秘密は、通信当事者の同意があれば侵害とはならない、とも書かれていた。こうなると、同意があればDPI技術を利用してよいと読み取れなくもない。
総務省はDPIによる行動ターゲティング広告を容認したのだろうか。
総務省消費者行政課に取材すると、「そのような事実はありません」と明確に否定した。
同課によると、そもそも「提言」は、DPIの課題を研究会で検討した内容を整理したものに過ぎず、この段階で「容認した」という類のものではない。それを踏まえたうえで、「同意」の内容について大変厳しい解釈を示していると主張する。
例えばサイト上での周知だけ、契約約款に規定を設けるだけでは「同意あり」とはみなさないという。
一方で、ISPと新規契約する際の契約書に、「行動ターゲティング広告への利用を目的として、DPI技術を使って通信情報を取得することに同意する」という欄を設けた場合は、
「個別かつ明確な同意」として認められるという。仮に同意した後でも、「やはりDPIの使用はやめてほしい」となれば簡単に中止を求められる「オプトアウト」の機会を提供するよう、ISPに求めるとしている。
これらは、「一部の法学者から『厳しすぎる』との声があったほど」(消費者行政課)高いハードルだという。
0414デフォルトの名無しさん
2010/06/06(日) 15:17:34警察がやりたい放題になっている社会の方が問題だと思うよ。
イスラエルとかジャマイカとかだと警察官が気に食わない奴の家に上がりこんでそいつを当たり前の表情で殺してる。
日本だと警官が人殺しをすることは無いけど、警察利権を作るだろうね。たとえば交通道路とか風俗・警備会社許認可権、最近だと監視カメラ利権でしょ?
銃刀法も扱ってるから、例えばなんでもないプラモデル屋やフィギア屋にすら「ナイフだろ!」とか言いがかりつけて、気に食わなければ逮捕とかも可能だろうね。
警察が幅を利かせるようになると国家の監視どころじゃなく警察に統治されるようなそういう世界がまっている。
ネットよりリアルの方が窮屈で監視社会(全体主義的な検閲社会)になってるなって感じはする。
0415デフォルトの名無しさん
2010/06/06(日) 15:28:39netsh
0416デフォルトの名無しさん
2010/06/07(月) 01:15:42acceptして放置
0417デフォルトの名無しさん
2010/06/07(月) 01:19:22やってはいけない馬鹿の見本なサンプルコードとかじゃなく
まじめにきちんと設計されたアプリを書き上げた書籍ってありますか?
0418デフォルトの名無しさん
2010/06/07(月) 01:44:33UNIXネットワークプログラミング<Vol.1>
がもっとも要求に近い。
0419デフォルトの名無しさん
2010/06/07(月) 05:13:07なんでオープンソースのコードを読まないの?
0420デフォルトの名無しさん
2010/06/07(月) 19:55:48tcpdumpからソースIPとあて先IPをスプリクトで抜き出し
エントロピー値を取ろうと思うのですが
スプリクトは直接TCPDUMPは読み込めないので
tcpdumpをtxtファイルに変換させることは可能でしょうか?
Wiresharkで読み込ませて、txtにしようと思ったのですが
うまく行きません
レベルの低い質問ですが
どうかご教授お願いします
0421デフォルトの名無しさん
2010/06/07(月) 20:04:02半角カタカナという基本的なネットのリテラシも無い、やってはいけない馬鹿の見本のような
カキコを平気でする>>417みたいなのに何を言っても無駄なだけ。
>>418の挙げた書籍には大いに同意するし自分にはバイブルだったけど>>417には豚に真珠。
>>419が何を言っても馬の耳に念仏だお。
0422デフォルトの名無しさん
2010/06/07(月) 20:30:14真珠かイミテーションか知らんが結構似合うモンだぜ?豚に真珠。
0423デフォルトの名無しさん
2010/06/07(月) 20:38:550424デフォルトの名無しさん
2010/06/07(月) 20:54:13IPってゆうな。クズ。
0425デフォルトの名無しさん
2010/06/07(月) 23:06:15スクリプトから直接読み込みたけりゃリダイレクトして標準入力から読めばよろし
ファイル経由でよいならtcpdumpの出力をファイルに落とすオプションがあったと思うぞ
0426デフォルトの名無しさん
2010/06/07(月) 23:43:59EUCやUTF8でも半角かなを使っている人がいたな。
今でも元気にしてるかな・・・
0427デフォルトの名無しさん
2010/06/07(月) 23:49:130428デフォルトの名無しさん
2010/06/07(月) 23:50:150429デフォルトの名無しさん
2010/06/07(月) 23:52:000430デフォルトの名無しさん
2010/06/07(月) 23:55:300431デフォルトの名無しさん
2010/06/07(月) 23:57:460432デフォルトの名無しさん
2010/06/08(火) 00:02:520433デフォルトの名無しさん
2010/06/08(火) 00:32:100434デフォルトの名無しさん
2010/06/08(火) 01:32:36カキコを平気でする奴が出てきた。もう何を言っても馬の耳に念仏だお。
0435デフォルトの名無しさん
2010/06/08(火) 08:19:40tcpdump > tcpdump.txt
0436デフォルトの名無しさん
2010/06/08(火) 09:17:040437デフォルトの名無しさん
2010/06/08(火) 09:58:26(゚∀゚)これも半角だしNE!
0438デフォルトの名無しさん
2010/06/08(火) 09:58:260439デフォルトの名無しさん
2010/06/08(火) 10:03:538bit->7bit変換のときに単純に8bit目を落とす馬鹿鯖があるからだろ
0440デフォルトの名無しさん
2010/06/08(火) 10:27:000441デフォルトの名無しさん
2010/06/08(火) 11:44:09ISO-2022-JP以外なら使ってもいいってことだから問題ないよ。
ISO-2022-JPに変換しなければおk
0442デフォルトの名無しさん
2010/06/08(火) 11:52:150443デフォルトの名無しさん
2010/06/08(火) 12:31:390444デフォルトの名無しさん
2010/06/08(火) 13:52:53ネトウヨ
0445デフォルトの名無しさん
2010/06/08(火) 14:22:12極めて正しい用法。
0446デフォルトの名無しさん
2010/06/08(火) 14:34:03イッテヨチ!
0447デフォルトの名無しさん
2010/06/08(火) 18:19:01半角かなを使わないに越したことは無いが
半角かなを受け入れられないソフトは糞だ。
0448デフォルトの名無しさん
2010/06/08(火) 18:37:390449デフォルトの名無しさん
2010/06/08(火) 18:57:570450デフォルトの名無しさん
2010/06/08(火) 19:53:41エンドユーザーなんて何するかわからん。
0451デフォルトの名無しさん
2010/06/08(火) 21:46:570452デフォルトの名無しさん
2010/06/08(火) 21:58:09つまり�@�A……も禁止か?"−"もだめそうだが?
0453デフォルトの名無しさん
2010/06/08(火) 22:04:14利用者に使えないんだと理解させるためにicmpで通知してあげればいい。
0454デフォルトの名無しさん
2010/06/08(火) 22:06:260455デフォルトの名無しさん
2010/06/08(火) 22:10:29最近は初体験で日常的なメールというのがケータイであるという奴が増えているから、
半角カタカナや絵文字について何も違和感を持たず、同じ感覚で2chにカキコしてるんだろね。
で、社会人になってから、常識の無い奴とドヤされるわけだ。
0456デフォルトの名無しさん
2010/06/08(火) 22:14:260457デフォルトの名無しさん
2010/06/08(火) 22:35:170458デフォルトの名無しさん
2010/06/08(火) 22:39:270459デフォルトの名無しさん
2010/06/08(火) 23:38:50そのうち時代後れな事を言ってる奴が”文字化けするから「表」「予」「申」「能」「十」「ソ」なんかの文字も使うな!”とか言いだしそうだぜw
0460デフォルトの名無しさん
2010/06/08(火) 23:43:180461デフォルトの名無しさん
2010/06/08(火) 23:56:260462デフォルトの名無しさん
2010/06/09(水) 00:00:06俺鬱
JIS-X2010
0463デフォルトの名無しさん
2010/06/09(水) 00:04:130464デフォルトの名無しさん
2010/06/09(水) 00:27:490465デフォルトの名無しさん
2010/06/09(水) 01:01:47おまえの負け
0466デフォルトの名無しさん
2010/06/09(水) 15:59:50必要に迫られない限り、使わないにこしたことないでしょ。機種依存文字なんだし
0467デフォルトの名無しさん
2010/06/09(水) 17:44:390468デフォルトの名無しさん
2010/06/09(水) 17:52:08今は使えてるんだからい〜じゃん、あほくさ
0469デフォルトの名無しさん
2010/06/09(水) 19:17:06Wireshark(Ethereal)に付いているコマンドラインツールのどれかに、
そういう機能があったと思う。
Wireshark Manual Pages
ttp://www.wireshark.org/docs/man-pages/
0470デフォルトの名無しさん
2010/06/10(木) 10:46:480471デフォルトの名無しさん
2010/06/11(金) 01:21:14UDPのパケットがフラグメントとかされて途中で分断されてても
アプリケーション層でrecvfrom成功した時は送信されたパケットと同じサイズの
データの取得は保証されてる?
UDPはパケットの到着順は保証されないけど、パケット単位での再結合が成功済みの
パケットしかアプリケーション層までは到達しないんだよね・・・?
0472デフォルトの名無しさん
2010/06/11(金) 01:27:400473デフォルトの名無しさん
2010/06/11(金) 01:47:34到達しない。
というか、フラグメンテーションはIP層で行われているからUDPは
完全なIPパケットしかもともと受け取らない。
0474デフォルトの名無しさん
2010/06/11(金) 09:01:50thx
さらにもう一個質問。
PC Aが100byteのUDPパケットをPC C Port1234に送信
PC Bが100byteのUDPパケットをPC C Port1234に送信
PC CがPort1234からrecvfromで50byteずつ取得、ってケースだと
Aの最初50>Bの最初50>Aの最後50>Bの最後50
とかの順番で取得されるケースもありえる?
ありえるならUDPの受信ってテンポラリバッファ+送信元IP/Port毎の独立バッファ
で受信しないといけなくて凄く実装が面倒なんだけど・・・
0475デフォルトの名無しさん
2010/06/11(金) 09:14:32ない。
もしどっかでちょん切れたら最後の50はうしなわえう
0476デフォルトの名無しさん
2010/06/11(金) 10:45:36ちょっと待て。
「最後の50」だけ失われるケースはありえないだろ。
ちょん切れて飛んできても勝手に結合してくれるし、もし結合できなかったら「最初の50すら捨てる」だろ。
そうじゃなきゃUDP使えないってのw
0477デフォルトの名無しさん
2010/06/11(金) 11:21:44548バイト超えると分割されたり、再送がどうだの発生したりで性能劣化していくし
あってるよね?
0478デフォルトの名無しさん
2010/06/11(金) 17:02:49サブネット間に位置するルータは、パケット転送時に分割が必要な場合、
このフラグを参照し、もし不可であれば単純にそのパケットを破棄する。
で、一般的なUDP実装では、このフラグは「常に」不可に設定される。
だから(>>474のような)ネットワーク上を分割されたUDPデータグラムが
流れる現象そのものが起こりえない。
ただし、このフラグを許可に設定するような「行儀の悪い」UDP実装が
送信者であった場合、どうなるかは知らない(予測できない)。
分割されたUDPデータグラムを単純に破棄する受信者が大半であると思われる。
0479デフォルトの名無しさん
2010/06/11(金) 20:26:35分割するハメになったら破棄されるんだから、結合はないよね?
もしかしてあるの?
0480デフォルトの名無しさん
2010/06/12(土) 10:35:20sendtoで"A""B"..."Z"と一文字ずつ26回送った場合
受信側はrecvfrom一回で"ABC..."とかくっついて受信されずに
recvfromを26回、一回につき一文字ずつ受信できるのは保証されてるのかな?
TCPだとrecvの戻りはいくつかのパケットがくっついたりパケットの途中で戻ってくるけど
UDPではsendto/recvfromは1:1対応してる、と想定して作っていいんだよね?
0481デフォルトの名無しさん
2010/06/12(土) 11:45:55UDPで実装しようって設計が間違ってる気がする
0482デフォルトの名無しさん
2010/06/12(土) 11:59:34それが書いていない教科書はクソだし、検索すればいくらでも出てくる。
0483デフォルトの名無しさん
2010/06/12(土) 12:04:43作るときはパケットの区切りは、どこか分からないものとして作るんだよ
ここが区切りですなんて情報はくっついて来ないから
入り口から入れたものが同じ順番で出口からでてくるのがTCP
順番が狂ったり出て来ないのがあるのがUDP
そんだけ
0484デフォルトの名無しさん
2010/06/12(土) 12:30:19> 作るときはパケットの区切りは、どこか分からないものとして作るんだよ
それはTCPだけ。 UDPはおk。
0485デフォルトの名無しさん
2010/06/12(土) 12:40:33とりあえず1冊入門書読んだんだけど見つからなかったんだ・・・
UDPのRFC読んだけどそう動作するよう実装するべし、みたいなのが見つからなくって
ネットで探した限りSUNのページにそれらしい記述があったけどSUNの実装が
そうなってるだけでBSDソケットと名乗るなら必ずそう動作する、って保証はあるのかなぁ、と
>ただし、このフラグを許可に設定するような「行儀の悪い」UDP実装が
みたいにソケット実装者の気分次第でどう動作するように実装してもよくて
たまたま多くの実装がそうなってるだけとかだと嫌だなぁと
0486デフォルトの名無しさん
2010/06/12(土) 13:00:20スタックを使う側はそういうのは考えなくてよろしいのよ
スタック自体を実装するのなら、思いっきり考えてくださいまし
自分とこで使ってるスタックの実装に合わないパケットはスタックが捨ててくれるんだから
よそ様が何をつかってても関係ないでしょ
0487デフォルトの名無しさん
2010/06/12(土) 13:04:31UNIXネットワークプログラミング<Vol.1>
を買ってこい。今すぐ!ダッシュでだ!
0488デフォルトの名無しさん
2010/06/12(土) 13:08:52UDPではsendto/recvfromは1:1対応してると期待していいのかどうか、
で使う側の実装はまったく違うものになると思うが・・・
で、二種類の異なるハード・OS(両方BSDソケットは使えると言ってる。ちなみにWinでもLinuxでも無い。CPUもIntelじゃない。)
がNAT下にあってUPnP/STANでNATのUDPの穴あけは相互にできるけどTCPは保証できない、
という環境でUDP使ってP2Pで通信してね、というお仕事を引き継いだんだけど
UDP使うの初めてで色々わからんのよ・・・
0489デフォルトの名無しさん
2010/06/12(土) 13:26:39>UDPではsendto/recvfromは1:1対応してると期待していいのかどうか、
それ以前に到達することすら保障されてないわけだが、そこはいいの?
良く分からない仕様で悩んでるよりも
出てきたデータをストリームとして扱えば、1対1だろうが多対1だろうが問題ないんじゃね?
0490デフォルトの名無しさん
2010/06/12(土) 13:34:59UDP使うしか無い以上その保証はアプリ側で対処するしか無いです。車輪の最発明は嫌だけど・・・
>出てきたデータをストリームとして扱えば、1対1だろうが多対1だろうが問題ないんじゃね?
順番が保証されないデータのストリーム前提の実装って、無理じゃないけどえらい面倒+メモリ&CPU資源の
無駄が多そう。あんまり富豪的なプログラムできるほどリッチなハードでも無いし。
BSDソケット使えると言ってるならアプリケーション層までたどり着いた
UDPパケットは1:1保証されてるんだよ、となればその前提で組めるので
助かるなぁ、と・・・
0491デフォルトの名無しさん
2010/06/12(土) 13:42:53期待しなきゃだめだろ
その代わり順番も入れ替わるし無くなることもあるというだけの話
0492デフォルトの名無しさん
2010/06/12(土) 14:21:44だよね
前任者のコードで
struct hoge {
int tag;
int size;
char data[0];
};
char buf[512];
int size = recvfrom(buf,sizeof(buf),ip,port);
if (size >= sizeof(hoge) && ntohl(((hoge*)buf)->tag) == TAG && ntohl(((hoge*)buf)->size) == size) {
//受信処理
}
みたいなコードがあって
TCPではこの作りダメだけどUDPならいいのかな?と疑問だったけど
UDPのsendto/recvfromは1:1対応を期待できるなら大丈夫だね。
0493デフォルトの名無しさん
2010/06/12(土) 15:14:45rfc1180
UDP preserves the message boundary defined by the application. It
never joins two application messages together, or divides a single
application message into parts.
後、キミはBSDソケットの位置づけを誤解している。
0494デフォルトの名無しさん
2010/06/12(土) 17:24:35> で、一般的なUDP実装では、このフラグは「常に」不可に設定される。
いつからそうなった?
少なくとも, 4.2 BSD の実装時点ではそうできてないし,
unix 系の実装でそうなっているやつは見かけないんだが...
で, 今, 手元にある FreeBSD あたりだと
% sysctl net.inet.udp.maxdgram
net.inet.udp.maxdgram: 9216
てなことになってるが
0495デフォルトの名無しさん
2010/06/12(土) 18:20:02RFC1180にあったのか。これってTCPだけじゃなくUDPについても書いてあったんだね。
UDPだからRFC768を見てた。さんくす
>後、キミはBSDソケットの位置づけを誤解している。
SDKのドキュメントに"BSDソケット準拠のソケットライブラリ"と書かれていたから
"ANCI準拠"とかと同じ統一規格の一種かと思ってたんだど、誤解かな?
0496デフォルトの名無しさん
2010/06/12(土) 20:23:52BSDソケットはAPI, プロトコルではない。
> BSDソケットと名乗るなら必ずそう動作する、って保証はあるのかなぁ、と
という表現はおかしい。
0497デフォルトの名無しさん
2010/06/12(土) 20:44:30「Berkeley 互換を名乗るなら動作を含めて互換にしてほしい」ってのはわがまま?
組み込み用途のスタックとか Berkeley 互換をうたいながら全然互換じゃない実装って結構あるのな
まぁ, メモリに余裕があれば移植してしまえば済む話ではあるが...
0498デフォルトの名無しさん
2010/06/13(日) 11:54:44やっぱりAPIだと言う事を理解していない
APIだから、socket(PF_INET,...)がEPROTONOSUPPORTを返したってBSDソケットの正しい実装。
0499デフォルトの名無しさん
2010/06/13(日) 12:10:10名前が同じならいいってもんじゃない。
0500デフォルトの名無しさん
2010/06/13(日) 12:35:560501デフォルトの名無しさん
2010/06/13(日) 14:02:52API ってのは, 仕様があってはじめて API って名乗れるもんではないのか?
Berkeley の仕様なんてどこにもないんだが…
# 強いて言えば, posix の要求仕様程度かな?
初期の Postscript 互換言語なんて bug も含めて互換性を求められてたぞ
xterm に至っては忠実に vt100 の bug まで再現してた
0502デフォルトの名無しさん
2010/06/13(日) 14:17:33http://en.wikipedia.org/wiki/Berkeley_sockets
どうしてもBSDソケットはAPIじゃ無いと言いたいなら、理由を列挙して署名入り記事でも発表しなよ。
0503デフォルトの名無しさん
2010/06/13(日) 15:07:30manすら見たことない事を全力で告白しなくても良いぞ。
0504デフォルトの名無しさん
2010/06/17(木) 19:16:24Linux ではちょっとやっていたことがあります。
マルチスレッドで処理をしようと考えているのですが、Winsock のいくつかの関数がスレッドセーフなのかどうかがよくわかりません。
1つのスレッドで 1つの socket を扱っており、例えば recv の後で WSAGetLastError を呼び出しているのですが、
WSAGetLastError はスレッドセーフなのでしょうか。
スレッドセーフではない場合、どう対処するものなのでしょうか。
gethostbynameなどはスレッドセーフじゃないという情報があったので、mutex を使って排他しています。
しかしながら recv から WSAGetLastError までを排他すると、マルチスレッドのメリットが無くなってしまうんじゃないかと思う次第です
(この socket はブロックモードです)。
0505デフォルトの名無しさん
2010/06/17(木) 19:36:19いいえ
>スレッドセーフではない場合、どう対処するものなのでしょうか。
WSAGetLastError を使わない
0506デフォルトの名無しさん
2010/06/17(木) 19:57:55The return value indicates the error code for this thread's last Windows Sockets operation that failed.
0507504
2010/06/17(木) 20:14:20>>506
>The return value indicates the error code for this thread's last Windows Sockets operation that failed.
for this thread's とあるので、「*このスレッド*で起きた最後の失敗理由を返す」って意味で合ってますか?
であればスレッドセーフってことなんじゃないかと思うのですが、どうなんでしょう? >>505
0508デフォルトの名無しさん
2010/06/17(木) 20:19:090509デフォルトの名無しさん
2010/06/17(木) 23:48:19それは *nix とか, Windos とかの資源が潤沢なところの世界の話だ
0510デフォルトの名無しさん
2010/06/18(金) 01:02:251つのスレッドで 1つのsocketを扱っているならWSAGetLastErrorを
複数スレッドで同時に呼んでも全く問題なし。
0511デフォルトの名無しさん
2010/06/18(金) 01:13:42WSAGetLastErrorの使用に関して条件を付ける必要は無い。
0512デフォルトの名無しさん
2010/06/18(金) 05:30:22アホはいい加減黙れ
0513デフォルトの名無しさん
2010/06/18(金) 14:55:10とりあえずAmazonで
http://www.amazon.co.jp/dp/4873110289
http://www.amazon.co.jp/dp/479810941X
の二冊を見つけましたが、お読みになっている方のインプレ、または他にお心当たりがありましたら是非ご教授ください
※ライブラリやアプリケーションの使い方の質問ではない、ということでこのスレで質問させていただきました。
他に適切なスレがありましたら誘導していただければ幸いです
0514デフォルトの名無しさん
2010/06/18(金) 15:19:010515デフォルトの名無しさん
2010/06/18(金) 15:38:12http://stream.everywebhost.com/hitec/sport/j7.html
0516デフォルトの名無しさん
2010/06/18(金) 18:50:25http://livedoor.blogimg.jp/tekepo/imgs/3/4/3414dfca.jpg
ばらまこうぜ!
0517デフォルトの名無しさん
2010/06/18(金) 19:50:36自分で拡散してお前がアク禁食らえ。カス。
0519デフォルトの名無しさん
2010/06/19(土) 00:25:400520デフォルトの名無しさん
2010/06/19(土) 01:21:29> ※ライブラリやアプリケーションの使い方の質問ではない
ということから、少なくともソケット操作はできる前提
→ なら SMTP POP3 のプロトコルの話
→ 結局 RFC が全て
こういうことだ。 で、その部分だけを書籍化するのは… …(とても少ないという意で)厳しいか?
メールのペイロードの部分(ヘッダとBODY)で、MIME関連まで網羅しだすと
一気に大爆発するがね。
0521デフォルトの名無しさん
2010/06/19(土) 01:25:29十年単位でバグだらけだった事実
0522デフォルトの名無しさん
2010/06/19(土) 03:05:350523デフォルトの名無しさん
2010/06/19(土) 12:08:04SMTP で送る/POP3 で受ける 部分はそんなに複雑じゃないと思われ
0524513
2010/06/20(日) 11:18:12メールに関しては、RFC<MIMEや文字エンコード、なのですね。
では改めて、そのあたりも含めて、(大爆発しない程度に(汗))解説している書籍などはありますでしょうか?
とりあえず>>513は二冊とも通販で注文を出しました。
>>520
はい、その前提でOKです。
直接、ポート25や110を叩きます。
0525デフォルトの名無しさん
2010/06/20(日) 11:34:420526デフォルトの名無しさん
2010/06/20(日) 23:47:31RFCに全部書いてあるし変な本より読みやすいから
直接読むのをおすすめする
書籍は結構省略されていて結果的に使い物にならない
分かった気になりたいだけならおすすめ
0527デフォルトの名無しさん
2010/06/21(月) 01:33:06"RFC読める俺かっこいい"とか
"俺はRFCを読んで苦労してるんだおまえも苦労しろ"
みたいな意味を含んだレスって読んでて痛いよなぁ
こう言う事言う人って生産性のない学生に多いのよね…
0528デフォルトの名無しさん
2010/06/21(月) 02:26:210529デフォルトの名無しさん
2010/06/21(月) 02:28:45だからrfcが読みやすいとかいう変態がいても不思議ではない
0530デフォルトの名無しさん
2010/06/21(月) 02:31:060531デフォルトの名無しさん
2010/06/21(月) 03:24:29RFCが何だかわかって言っているの?
0532デフォルトの名無しさん
2010/06/21(月) 10:15:36クズ実装を非常に高い生産性で排出するわけですね、わかります。
0533デフォルトの名無しさん
2010/06/21(月) 10:24:52三流底辺技術者の言いそうな台詞だなw
0534デフォルトの名無しさん
2010/06/21(月) 11:53:02マイクロソフトの悪口はそこまでだ
0535デフォルトの名無しさん
2010/06/22(火) 22:04:42connect/acceptでクライアントとサーバが接続状態であるなか
どちらかがclosesocketしたら、recvが失敗して初めて切断されたと分かるんですか?
0536デフォルトの名無しさん
2010/06/22(火) 23:29:45同期ソケットなら普通はrecvの前にselectして検知するな
0537デフォルトの名無しさん
2010/06/23(水) 00:55:27えらいなー。俺面倒だから切断処理は全部recvでやっちゃうわ。
つーか通常切断されるとselectは正常に抜けてきちゃうから
readとかで0バイト受信かどうかを見るのが一番ラクダと思う
0538デフォルトの名無しさん
2010/06/25(金) 02:05:54サンプルはないでしょうか?
また、ネットワークを一つのPC内で擬似環境を
作ったりするツールとかないのでしょうか・・?
0539デフォルトの名無しさん
2010/06/25(金) 07:22:13vmware
0540デフォルトの名無しさん
2010/06/25(金) 13:33:19http://miniupnp.free.fr/
0541デフォルトの名無しさん
2010/06/25(金) 21:01:18VC++でよければ晒すが
0542デフォルトの名無しさん
2010/06/26(土) 12:51:180543デフォルトの名無しさん
2010/06/26(土) 12:55:140545デフォルトの名無しさん
2010/06/26(土) 14:43:24ミサカネットワークに接続するんですね
0546デフォルトの名無しさん
2010/06/26(土) 16:55:00ネット対戦ゲーム作ろうと思ってるんだけどさ
プロトコルがUDPでUDPの特徴としてコネクションレスであることが挙げられると思うけど、
それってつまりクライアント側の「準備完了」メッセージをうっかり取りこぼしたら永遠に準備完了にならないってこと?
サーバーから「受け取りました」メッセージ届くまで送り続けないといけないの?
0547デフォルトの名無しさん
2010/06/26(土) 16:59:46自分でプロトコルを実装しないといけない。
0548デフォルトの名無しさん
2010/06/26(土) 18:22:57たいした量じゃないなら毎回「状態」を送るのも手だな。
エッジトリガじゃなくてレベルトリガで動作するようにする、と。
0549デフォルトの名無しさん
2010/06/26(土) 21:29:43そういうのはゲームが開始されるまではTCPで面倒見るのが楽。
1:1なら開始するまでリトライすればいいから楽だが、
1:他になったときにUDPだけだとスゲー面倒だよ。
参加者のうち一人がサーバーになって、皆でTCPでサーバーに接続して
ゲーム開始情報とかはサーバーから一貫した情報送るとかいう仕様にすれ。
0550デフォルトの名無しさん
2010/06/26(土) 22:25:49ありがとう
0551デフォルトの名無しさん
2010/06/28(月) 00:12:28どうもうまく動作しない。
一番最後のfprintfで引っかかり、さらに最初のfgetsが動かない。
fgetsはまぁサーバー側のfprintfでみすってるからだろうけど。
下にその部分のクライアント側のソース貼っとく、おかしなところ頼む。
ちなみにここまでは全部問題ない。
あ、変数はfpがFILE*型でstrはchar型の配列、sockはWINSOCK型。
途中のDelRet関数は文字列中の\nを消すだけ。
fp = _fdopen(sock, "r+");
if (fp==NULL) {
__printf("fdopen() Failed.");
__exit(1);
__}
setvbuf(fp, NULL, _IONBF, 0);
__if (fgets(str, sizeof(str), fp)==NULL) printf("NULL1\n");
__if (fprintf(stdout, "%s\n", str)<0) printf("fprintf()1\n");
__if (fgets(str, sizeof(str), stdin)==NULL) printf("NULL2\n");
__DelRet(str);
__if (fprintf(fp, "%s\0", str)<0) printf("fprintf()2\n");
0552デフォルトの名無しさん
2010/06/28(月) 02:15:560553デフォルトの名無しさん
2010/06/28(月) 08:37:18winsock fgets でぐぐる
_open_osfhandleがキモだけど、
自分ならこんなキモい命令使わされるくらいならsend/read使う
0554デフォルトの名無しさん
2010/06/28(月) 17:48:16そうしようかな。。。
というかずっと疑問でrecvを使わなかったんけど、recv()の引数の受信サイズってどうやって知るの?
文字列なんて長さが一様なはずがないからどうにかして文字列長を取得しなくちゃいけないと思うんだけど。
先に受信サイズだけ送っておくとか?
256とかって設定しちゃったらそれ以上のデータを送りたいときどうするの?
という疑問がずっと解消されてないんで、誰か解説お願い。
0555デフォルトの名無しさん
2010/06/28(月) 17:54:57でも釣りじゃなかったら可哀そうだから答えるけど
send1回で送ったデータが、recv1回でとれるとは決まっていない。
なので文字列長とかは自前で受信側に通知する。
・文字列長を最初に送ってから、実際の文字列を送る
・'\0'を受け取るまで受信側がrecvを繰り返す
のどちらかが一般的だな。
0556デフォルトの名無しさん
2010/06/28(月) 18:09:13'\n' を受け取るまで受信側が recvを繰り返す (fgets を意識した感じ
recv の受信バイト数が 0 になるまで繰り返す (=切断されるまで読みっぱー)
もありそうな話やね
0557デフォルトの名無しさん
2010/06/28(月) 19:21:13ほんと可哀そうなやつで申し訳ない
んで丁寧に教えてくれてほんとにありがとう
0558デフォルトの名無しさん
2010/06/28(月) 19:39:330559デフォルトの名無しさん
2010/06/28(月) 20:21:51Send1回につきRecv1回で取れる保障がないこと自体書いてないぞ
ネコわかとかな。
0560デフォルトの名無しさん
2010/06/28(月) 21:47:350561デフォルトの名無しさん
2010/06/29(火) 00:18:02まー最初からWinsock Programmer's FAQあたり読んだほうがマシだな。
0562デフォルトの名無しさん
2010/06/29(火) 00:19:250563デフォルトの名無しさん
2010/06/29(火) 00:53:580564デフォルトの名無しさん
2010/06/29(火) 00:55:57そういやスレッド間通信にUDP使うクソ害虫がいた。
内部通信だから大丈夫です(キリッ)って言ってたけど、
案の定負荷かけたらボロボロ落ちまくりわろた
0565デフォルトの名無しさん
2010/06/29(火) 02:16:14javaサーブレットとPHP どっちがいいですか
データベースはたぶん使いませんん
Webアプリケーションとの連携がしたいです
0566デフォルトの名無しさん
2010/06/29(火) 22:40:580567デフォルトの名無しさん
2010/06/29(火) 22:45:230568デフォルトの名無しさん
2010/06/29(火) 23:45:31UDPで実装なんだけども
UDPはパケットサイズ512以下じゃないと届かないことがあるとか言いますが
未だにそんなごみルーターがごろごろしてるの?
今時サイズなんて気にしなくてもたいして支障はないのかな?
0569デフォルトの名無しさん
2010/06/29(火) 23:55:520570デフォルトの名無しさん
2010/06/30(水) 00:08:23そんなことは分かってる
DHTは最初からそれを考慮して設計されてるから問題ない
聞いてるのは最近のルーター事情において
512と1024では届く確率に差が出るのかということ
0571デフォルトの名無しさん
2010/06/30(水) 00:14:170572デフォルトの名無しさん
2010/06/30(水) 00:16:021500超えなきゃまず大丈夫じゃね?
1500超えてもIPパケット分割されっし結構いけるんじゃね?
0573デフォルトの名無しさん
2010/06/30(水) 00:56:12送信間隔はどのくらいのしてる?
10ms以下のインターバルで送信しまくったりしてないよね?
0574デフォルトの名無しさん
2010/06/30(水) 00:58:240575デフォルトの名無しさん
2010/06/30(水) 12:04:20なるほど、その言葉を信じてとりあえずやってみる
0576デフォルトの名無しさん
2010/06/30(水) 13:25:20$ traceroute www.google.com 32768
traceroute to www.l.google.com (173.194.33.104), 64 hops max, 32768 byte packets
1 gateway (192.168.0.1) 49.395 ms 35.878 ms 21.430 ms
...
10 GOOGLE-INC.edge3.NewYork2.Level3.net (4.59.128.18) 66.696 ms 59.012 ms 157.592 ms
11 216.239.43.114 (216.239.43.114) 160.010 ms 207.188 ms 84.967 ms
12 216.239.48.24 (216.239.48.24) 145.018 ms 151.946 ms 135.050 ms
13 173.194.33.104 (173.194.33.104) 144.856 ms 67.043 ms 172.199 ms
0577デフォルトの名無しさん
2010/06/30(水) 13:36:46確立云々ではないだろう
確立的に届いたりとどかなかったりするのは、回線事情のほうでしょ
0578デフォルトの名無しさん
2010/06/30(水) 14:38:47P2Pって書いてる通り特定の経路を前提にしてないから
古いルーターにぶち当たる確率です
0579デフォルトの名無しさん
2010/06/30(水) 15:39:10古いからじゃなくてファームのバグじゃないの?
あるいはファイヤーウォールの設定?
回線業者がそれを放置したら苦情殺到だからまずありえない
エンドユーザーのルーターならそれを使いたいやつは
ファームの更新するか買い換えるだろうから気にしなくていいんじゃね?
企業内のネットワーク事情?、ゴッドノウズw
0580デフォルトの名無しさん
2010/06/30(水) 22:20:07そういうのに当たる確率の話でしょ
0581デフォルトの名無しさん
2010/07/01(木) 13:59:05古いというかバグというか、それ以前のルータが氾濫してるんだ。
フラグメントされたパケットはTCP/UDPのポート指定されたフィルタには
適用されませんだとか、フラグメントされたパケットはNATに対応してませんだとか、
そもそも仕様さえ無くサクっとdiscardしてicmpも返さない糞ルータが
世の中にはたくさんあるからな。
0582デフォルトの名無しさん
2010/07/01(木) 14:36:40n回ルータ通るときにアホに引っかからない確率
(1-(1/A))^n
0583デフォルトの名無しさん
2010/07/01(木) 15:07:220584デフォルトの名無しさん
2010/07/01(木) 15:16:34間違いだ
0585デフォルトの名無しさん
2010/07/01(木) 18:37:590586デフォルトの名無しさん
2010/07/01(木) 19:09:550587デフォルトの名無しさん
2010/07/01(木) 19:41:19よって
1
0588デフォルトの名無しさん
2010/07/08(木) 02:23:310589デフォルトの名無しさん
2010/07/08(木) 03:31:100590デフォルトの名無しさん
2010/07/08(木) 14:49:410591デフォルトの名無しさん
2010/07/08(木) 22:19:430592デフォルトの名無しさん
2010/07/09(金) 02:52:41あんまり短いとタイムアウトが頻発するだろうし、
あんまり長いと応答待って次の行動を起こすような処理ではかなりの遅延になる
0593デフォルトの名無しさん
2010/07/09(金) 08:49:48悪いが1秒だ
0594デフォルトの名無しさん
2010/07/09(金) 12:46:18何が目的のPINGなの?
593じゃないがゲームとか速度が要求される通信するなら
1秒超えるやつは無視でいいかもね
0595デフォルトの名無しさん
2010/07/12(月) 22:10:200596デフォルトの名無しさん
2010/07/12(月) 22:19:47固まったのと勘違いしない程度にできるだけ長くだろ
>あんまり長いと応答待って次の行動を起こすような処理ではかなりの遅延になる
返事が来なけりゃ待つしかねえだろ
返事が要らないんなら、はじめから待つ必要ないし
0597デフォルトの名無しさん
2010/07/12(月) 22:41:21ちゃいます
ネットワーク層からトランスポート層まで幅広く受け持っています > socket
ものによっては物理層までも
0598デフォルトの名無しさん
2010/07/13(火) 20:45:21>>524
もし真面目にネットワークプログラミングと付き合う気持ちが有るなら、
RFCが原典であることを忘れないでください。書籍はあくまでもRFCの解説書です。
(>>513等の)書籍でプロトコル仕様を「大まかに把握する」のはかまいません。
でも、そのプロトコル(今回はSMTP/POP-3)を実装する段階になったら、
RFCを読み通す必要があります。(読み通す必要性に迫られることになるでしょう。)
もし「RFC=英語 --> 難解」と感じているなら、たとえば「RFC 日本語」で
ググってみてください。有志による日本語訳サイトが見つけられるはずです。
有志(ボランティア)による翻訳ですから、細かい違訳/誤訳は我慢すること。
読んでみて「変だな」とか「意味が分からん」と思う箇所があったなら、
そこだけは辞書を片手にして原文(英語)にあたりましょう。
いくら英語が苦手でも、全文を翻訳する苦労と比較すれば、楽なものなはずです。
あるいは、ここで書籍(解説書)の助けを借りてもかまいません。
最後に、RFCの原文(英語)が原典であり、この日本語訳も参考にすぎないことを忘れずに....。
0599デフォルトの名無しさん
2010/07/13(火) 21:06:21ソケット(socket)は、層(layer)ではなくてAPIとして分類される用語です。
OSI参照モデルは、その名の通り(抽象的な)階層化モデルであり、
TCPやUDPがトランスポート層に、IPがネットワーク層に対応(相当)します。
ですから、「ソケット層(soket layer)」という用語は、意味不明な誤った造語です。
なお、一般的にソケットといえば、TCP(あるいはUDP)のサービスを提供するAPIを指します。
ですから、
・(一般的に)ソケットはOSI参照モデルにおけるトランスポート層のサービスを提供する
というのが、適切な表現でしょう。
ただし、(>>597が書いているように)ソケットの実装によっては、
IPやEthernetを直接的に操作できるサービスを提供している場合があります。
これは「rawソケット」とも呼ばれ、自力でIPルータやEthernetキャプチャのアプリを
開発しようとする場合には、知っておく必要があります。
0601デフォルトの名無しさん
2010/07/15(木) 21:40:180602デフォルトの名無しさん
2010/07/15(木) 23:07:53元々のバークレイの思想だと 「ソケットは端点定義を抽象化した概念」
ソケット作って, ファイルにコネクトすれば open が出来上がるんだが
0603デフォルトの名無しさん
2010/07/17(土) 16:27:28close()やflush()はした方がいいんですよね?
0604デフォルトの名無しさん
2010/07/17(土) 17:38:46close()は必須。flush()は程度による。
0605デフォルトの名無しさん
2010/07/17(土) 17:49:27サーバーは動作内容によってはcloseしないとfd足りなくなる
どっちにしても同時にいくつもプロセス起動した場合はfd足りなくなる恐れあり
出来るからといってやっていいかどうかは別
0607デフォルトの名無しさん
2010/07/18(日) 05:47:24のですが対Winだと送受信とも問題ないのですが対Unix系だと送信が極端に
遅くなってしまいます。
Win(自作/他作) <--> Win(自作) 問題なし
Unix系(他作) ---> Win(自作) 問題なし
Unix系(他作) <--- Win(自作) 通信自体は成功するが遅い
多分send-send-ack問題だと思うのですが、これをWin(自作)の対策で
解決する方法はあるでしょうか?
0608デフォルトの名無しさん
2010/07/18(日) 06:16:230609デフォルトの名無しさん
2010/07/18(日) 07:05:19>>607が(あるいは>>607の所属する組織が)定義した独自の用語を定義(説明)してくれ。
エスパーはいないから、スレ住人の各自が独自な推測を元に助言をすれば混乱するだけ。
0610デフォルトの名無しさん
2010/07/18(日) 08:09:58http://www.samba.gr.jp/ml/article/sugj-tech/msg01326.html
レイテンシが重要な場合はnagleアルゴリズムを無効にすれば解決する。
http://support.microsoft.com/kb/214397/ja
> 多数の小さなデータ セグメントを一度に送信する必要がある場合、送信側で TCP_NODELAY オプションを設定します。
または
> データ配信を保証する必要がない場合は、UDP を使用します。
http://www.kt.rim.or.jp/~ksk/wskfaq-ja/intermediate.htmlも必読。
0611デフォルトの名無しさん
2010/07/18(日) 08:25:040612デフォルトの名無しさん
2010/07/18(日) 08:34:550613609
2010/07/18(日) 08:48:03おぉー、リンクの紹介ありがとう。知らなかったよ。勉強になった。
WinSockには詳しくないので、モグリと言われてもしかたない。
というか、WinSockにはこんなクソな問題があるの?ポカーンという感想だ。
UNIXの場合、NODELAYオプションを使うのはtelnet/sshみたいに1文字単位での
データ交換の必要なプロトコルに限定して使われるよ。(だから「オプション」なんだ。)
リンク先の例にあるようなファイル共有やオンライントランザクション処理みたいに
パフォーマンス(性能)が重視されるプロトコルではNODELAYは指定しない。
NODELAYは「TCPスタックでのバッファリング機能を無効にする」という指示だからね。
これで自分は落ちる(ROMに廻る)ので、WinSockに詳しい住人さん達、
>>607へ良いアドバイスを与えてやってくださいませ。
0614デフォルトの名無しさん
2010/07/18(日) 09:02:52TCP自体が効率の悪いプロトコルしてる
ACK確認が取れるまで次のデータを送信しないからね
常に送信し続けて、ACKを並列的に処理すると数十倍の速度になる
しかし実装するのは難しいけど
作ろうとしたけどうまくいかない
0615デフォルトの名無しさん
2010/07/18(日) 09:57:05作り直すならSCTPも面白い。
0616デフォルトの名無しさん
2010/07/18(日) 11:37:30それなりに難易度高いですかね?
0617デフォルトの名無しさん
2010/07/18(日) 12:10:33ん?
0618デフォルトの名無しさん
2010/07/18(日) 14:41:05>ACK確認が取れるまで次のデータを送信しないからね
このスレって知ったかでデタラメ言う奴多すぎ。
0619デフォルトの名無しさん
2010/07/18(日) 15:04:51>>614はTCPを(ベーシック手順のような)交互応答プロトコルだと勘違いしているみたいだけど、
人にUDPを勧めておきながら(「UDPを使うべき」)、自分では実装できないレベルの人だから、
スルーしてあげるのがいいのではないかと思われる。
0620デフォルトの名無しさん
2010/07/18(日) 16:03:50違うの?ACK来なかったら再送するでしょ
再送分を送ってる間は結局待ってるようなもんだし
実質的に交互応答になってるんじゃないの?
それと実装出来なかったとは言ってないTCPより早く出来なかっただけw
0621デフォルトの名無しさん
2010/07/18(日) 16:17:23「ウインドウサイズ」とか、
その制御の仕方はご存じですか?
0622デフォルトの名無しさん
2010/07/18(日) 16:33:15>それと実装出来なかったとは言ってないTCPより早く出来なかっただけw
「厳密に速度が必要ならUDPを使うべき(>>614)」であり、それを実証しようとしたけど、
失敗した(「TCPより早く出来なかった」)のだろ?当初の目的が達成できなかったのだから、
それは一般的に「実装できなかった」と呼ぶのだよ。動かなかったなんてのは論外だ。
この期に及んでのいい訳は見苦しい。
0623607
2010/07/18(日) 18:17:38存在するので問題はこっち(自作)側で対応する必要があり、今回の質問となりました。
「TCP_NODELAY」は受信側が遅延ACKをやめて即ACKするためのものと思ってましたが、送信側が
ACK待ちしない為のものだったのですね。確かにこれならうまくいきそうです。
ただし、今回問題となったUnix系サーバとの接続テストは、次回何時やるか分からないので
実際の動作確認はすぐには取れそうにありません。
0624デフォルトの名無しさん
2010/07/18(日) 20:23:15パケットキャプチャソフトで覗いてやるということはしないのか?
想像だけでやってるよりよっぽど近道だぞ
0625609
2010/07/18(日) 22:31:39まず、send-send-ack問題も知らずに定義の説明を要求した(>>609の)失礼をお許しください。
次に、DICOMは初見でしたので、サイトから日本語訳の巻1/7/8をダウンロードして読んでみました。
TCP上にOSI上位層スタックを乗せた、いわゆる「OSI-over-TCP/IP」の典型例に見えます。
で最後に、今回の性能劣化という障害に関する原因調査と対応策について検討します。
まず原因調査については、性能劣化の原因が「本当に」send-send-ack問題なのかを確認する必要があります。
確実な方法としては、以下の2手法によって上位(入力)側と下位(出力)側でトレースを採取し、それら付き合わせます。
・自作プログラム内にあるソケットへのI/Oとイベント待ち(select)の前後にタイムスタンプ付きの
ログ採取コードを追加して実行し、そのイベントトレースを採取する。
さらにTCP_NODELAYオプションが無効/有効という2通りでもイベントトレースを採取し、オプション指定が
有効であることを確認できるようにする。
・(>>624が指摘したように)LANアナライザ(パケットキャプチャ)とTCPの有識者が手配可能で、
なおかつサーバー連動テスト環境への持ち込みが許されるのであれば、それを活用してIPパケットの
出力タイミングに関する(タイムスタンプ付きの)トレースを採取する。
もしsend-send-ack問題が原因であるなら、上位での(ソケットへの)送信要求がTCPスタック内で保留され、
いくらかの遅延時間が経過した後に、下位での(ネットワークへの)IPパケット送信が記録されているはずです。
そして、TCP_NODELAYが指定されている場合には、その遅延時間がほぼ0(数10ms程度)に収まるはずです。
(続く)
0626609
2010/07/18(日) 23:17:07次に、原因がsend-send-ack問題であると仮定して(...を前提にして)、対応策を検討します。
まず、DICOMという既成のプロトコルが前提になりますから、TCP以外のプロトコル(UDPあるいはSCTP)を
使うという(>>614,615の)提案は却下せざるをえませんね。
となると>>615が指摘しているように、TCP_NODELAYで「逃げる」という対処的な方法で解決するしか
ないでしょう。使い物にならないほど性能が劣化したシステムよりは、そこそこの性能が達成可能であるほうが
望ましい訳ですから。この段階が最初の対応策になります。この段階の性能値で満足できるなら、ここで終わりです。
次に性能改善(チューニング)を検討します。改善の着目点は、常にTCP_NODELAYを指定するのでは無く、
必要に応じて(あるいは、逆に不要な場合を除いて)動的に有効/無効を指定できる条件を見つける事にあります。
以下は、その例です。もしDICOMプロトコルの専門家に頼れば、他の条件も発見してくれるはずだと思います。
・アプリケーション層のメッセージがプレゼンテーション層で複数の断片に分割された場合、
それら一連の断片は、ソケットへの複数のsend操作へと対応付けられることになるはずです。
ここで、TCP_NODELAYが必須になるのは最後の断片のsend操作だけあり、それ以外の断片は
TCPスタックの送信バッファリングに任せたほうが性能は改善されるはずです。
・PDUを符号化する実装において、ある単一の送信PDUを複数のsend操作で実現しているロジックがあれば、
それらをすべて洗い出します。これらも(先の例と同じ理由によって、)最後のsend操作以外では、
TCP_NODELAYを無効にしても無問題であるはずです。
0627デフォルトの名無しさん
2010/07/18(日) 23:24:36>「TCP_NODELAY」は受信側が遅延ACKをやめて即ACKするためのものと思ってましたが、送信側が
>ACK待ちしない為のものだったのですね。
まだ違うよ。
0628デフォルトの名無しさん
2010/07/19(月) 00:10:48そんなバグは今時のWinSockでは当然の事ながら解決されてるだろ。
パケットキャプチャもやらないで「たぶん〜問題のせい」ってモグリにも程
があるって感じ。
0629デフォルトの名無しさん
2010/07/19(月) 00:16:370630607
2010/07/19(月) 11:18:44現時点の実装では1PDU毎にsendするようになっていて全体の流れは次のように
なっていると思われます。
Win(自作)からの送信時
接続 Win(自作)からサーバへconnect
send ASSOCIATE
recv ASSOCIATE
send DATA イメージデータを複数PDUに分割し連続して送信する(現実装では4096バイト)
send DATA
send DATA
:
send DATA
recv DATA
send RELEASE
recv RELEASE
切断
Win(自作)が受信時はこちらがサーバ側となり上と逆手順となります。
次回テスト時は、TCP_NODELAYのOn/OffやDATAの1PDUサイズを調整したり、ログ出力とか
出来るようにしいろいろ試してみたいと思います。
また、みなさんが言われるようにパケットキャプチャを行なえる環境を準備できるか
調整してみたいと思います。
0631デフォルトの名無しさん
2010/07/19(月) 13:57:030632デフォルトの名無しさん
2010/07/20(火) 21:55:420633デフォルトの名無しさん
2010/07/21(水) 10:19:580634デフォルトの名無しさん
2010/07/21(水) 11:06:200635524
2010/07/21(水) 18:03:42ご丁寧なお返事、ありがとうございます。
おっしゃるとおり、書籍は所詮「概説」でしかない事は読んでいて実感しているところです。
特に>>520の御指摘どおり、MIME関係は本当にややこしい&本には書いてないコトだらけですね。
RFCの日本語訳については、googleの先頭に出てくるのが↓ですね
http://www5d.biglobe.ne.jp/~stssk/rfcjlist.html
細かいコマンドなどについては、こちらで逐一確認することにしましょう。
ありがとうございました。
0636デフォルトの名無しさん
2010/07/21(水) 18:12:05それ全部対応しないといけないし勉強とかが目的ならあまりお勧めしない
何年も掛かる
0637デフォルトの名無しさん
2010/07/21(水) 18:20:02指示されたエンコードで可視可したら文字化けトラップ ですな
0638デフォルトの名無しさん
2010/07/21(水) 20:33:38> http://www5d.biglobe.ne.jp/~stssk/rfcjlist.html
ひさしぶりに眺めたらこれにワロタ
RFC 864 文字が湧いて出るプロトコル
0639デフォルトの名無しさん
2010/07/22(木) 08:33:21半角カナを平気で使うリテラシの無いユーザもいるから、メーラの実装は大変だよね
0640デフォルトの名無しさん
2010/07/22(木) 14:20:18ある異常系の試験を行っていて気がついたのですが、
サーバーへの接続後、サーバー側のLANケーブルを抜いた場合の挙動が
OSによって異なることが分かりました。
具体的にはWindowsXPではsendtoでデータを送信しても即座に処理を戻すのですが
(GetTickCountでとると0ms)
WindowsVistaや7では500msから3000ms程度sendto関数の応答が帰ってこなくなりました。
UDPは信頼性がないため、送りっぱなしと思っていたのですが、Vista以降の
ネットワーク実装が変わったんでしょうか???(ICMPでもチェックしてる???)
スレチならすいません・・・
0641デフォルトの名無しさん
2010/07/22(木) 15:04:11vistaからarpの挙動が変わったようだけど。
0642デフォルトの名無しさん
2010/07/22(木) 15:19:11レスありがとうございます
↓この辺が関係ありそうですね。
http://support.microsoft.com/kb/949589/ja
調べてみます。
0643デフォルトの名無しさん
2010/07/22(木) 15:32:07本文に使用する分には問題なくね?
0644デフォルトの名無しさん
2010/07/22(木) 15:36:530645デフォルトの名無しさん
2010/07/22(木) 15:49:460646デフォルトの名無しさん
2010/07/22(木) 17:48:330647デフォルトの名無しさん
2010/07/22(木) 19:51:43> 具体的にはWindowsXPではsendtoでデータを送信しても即座に処理を戻すのですが
> (GetTickCountでとると0ms)
間に何が入っているかにもよると思うんだが
0648デフォルトの名無しさん
2010/07/22(木) 20:41:44別々のネットワークに置いても、挙動は同じなの?
っと。
0649デフォルトの名無しさん
2010/07/22(木) 23:08:240650デフォルトの名無しさん
2010/07/23(金) 12:54:05いくら待機を制御しても連続してパケットがくるとCPU使用率が100%になる
本来ならカーネルがやってるからCPU使用率には反映されないだけなんだろうけど
ユーザーサイドのアプリケーションだと出てくる
結局は同じことだとしても気持ちが悪い
CPU使用率を下げる方法ってあるの?
0651デフォルトの名無しさん
2010/07/23(金) 13:02:04カーネル、ユーザランド間の状態遷移。イベント通知、全然同じじゃない。
0652デフォルトの名無しさん
2010/07/23(金) 13:25:39???
0653デフォルトの名無しさん
2010/07/23(金) 13:50:49パケットの並び替えとか再送処理とかをカーネルモードドライバがやってて
ドライバのCPU使用率は画面には出てこない
小さいパケットをループで回して処理するようなことをユーザーアプリでやったら
CPU使用率に反映されて100%になる
カーネルレベルでやろうがユーザーレベルでやろうが同じことをやろうとしたら
リソースコストは同じだけども、見た目が悪いのでCPU使用率に反映させない
方法はないものだろうか
0654デフォルトの名無しさん
2010/07/23(金) 14:13:560655デフォルトの名無しさん
2010/07/23(金) 14:30:34sleepしたら通信が遅くなるでしょ
0656デフォルトの名無しさん
2010/07/23(金) 14:42:25連続してパケットが来たときに、自前処理やってるんだから100%になっても不思議じゃないよね。
その処理分を「CPU使用率」から除外したいってこと?
無理なんじゃね?
0657デフォルトの名無しさん
2010/07/23(金) 14:46:59>カーネルレベルでやろうがユーザーレベルでやろうが同じことをやろうとしたら
>リソースコストは同じだけども
違うことをやってるから、結果CPU使用率が異なるんだとは思わないんだろうか。
0658デフォルトの名無しさん
2010/07/23(金) 14:55:030659デフォルトの名無しさん
2010/07/23(金) 14:59:37それともリアルタイムで糞重いエンコーディングとか画像処理系のフィルタリングかけてるとか?
だったらもっと速いPC買おうぜ
要するに処理能力が足りてないんだよ
0660デフォルトの名無しさん
2010/07/23(金) 15:11:24UDPデータが連続して来るのにネットワーク速度はあんまり関係ないよね
ローカルLAN同士の通信で1000バイトやそこらのパケットの連続を
ループでまわすと処理の大小はあんまり関係ないと思うのだけど
0661デフォルトの名無しさん
2010/07/23(金) 15:57:32そんな膨大なデータやりとりするなら、しゃーないんじゃないかなあ
0662デフォルトの名無しさん
2010/07/23(金) 15:58:140663デフォルトの名無しさん
2010/07/23(金) 16:02:180664デフォルトの名無しさん
2010/07/23(金) 17:06:420665デフォルトの名無しさん
2010/07/23(金) 17:32:280666デフォルトの名無しさん
2010/07/23(金) 18:13:05CPU使用率って誰が管理してんの?
0667デフォルトの名無しさん
2010/07/23(金) 18:17:58CPU使用率が100%になっているだけだと推測。
selectあるいは(Win32の)イベントオブジェクトで
UDP受信を非同期処理で実現していれば、
(一般的には)CPU使用率が100%になることはありえない。
0668デフォルトの名無しさん
2010/07/23(金) 18:25:57>>見た目が悪いのでCPU使用率に反映させない方法はないものだろうか
今日の晩ご飯はカレーライスがいい、カレーライスじゃなきゃ絶対にイヤダ!!
と言っているガキの戯言にしか聞こえない。あるいは、
中間試験の英語と数学で赤点をとってしまった。母親に知られるとやばいので、
それを隠し通せる方法はないものだろうか?
でもいい。質問の内容がプログラミング相談室向けでは無い。
お子様向け人生相談室に合う話題だ。
0669デフォルトの名無しさん
2010/07/23(金) 18:40:53もちろんロックを実装して何も無い時にCPU負荷が上がらないようにしてるけど
データベースの1レコードを1つのパケットにして何十件かをまとめて送るんだけど
もちろん転送効率を落としたくないから可能な限り早く発送して再送をする
ローカル環境では50ミリ秒前後の遅延がロスが少ない感じだけど
この頻度でも受信側はループして処理すると100%になるよ
0670デフォルトの名無しさん
2010/07/23(金) 18:53:17プラットフォームはWindows(WinSock)でいいのかな?以下、Yesとして答えるよ。
>>もちろんロックを実装して何も無い時にCPU負荷が上がらないようにしてるけど
ロックというのはWin32 APIのクリチカルセクションのことかな?
これは資源の排他制御に使う操作だから、これをループに組み込めばCPUを無駄に消費するのは当然。
>>667で書いたように、selectあるいはイベントオブジェクトで実装する必要がある。
0671デフォルトの名無しさん
2010/07/23(金) 19:19:58言語はC#でWaitHandleというものがある
恐らくWaitSingleObject APIをラップしたものだろうと思う
確かにコストは大きいけどCPU使用率に極端に影響するほどのコストではないと思うけどな
0672デフォルトの名無しさん
2010/07/23(金) 19:21:52これは省略出来ない処理なんでどうしようもない
kernelでCPUを喰っているなら、HWを買い換える。
userでなら、糞なprogramを書き換える。
0674デフォルトの名無しさん
2010/07/27(火) 12:39:17netsh ってWindowsでサーバー構築してる人が使うものなんですか?
0675デフォルトの名無しさん
2010/07/27(火) 12:53:440676デフォルトの名無しさん
2010/08/11(水) 02:17:22クライアント側で FD_CLOSE が呼ばれるのはどういうときでしょうか?
・サーバ側がclosesocketしたとき
・サーバ側がshutdownしたとき
・クライアント側がclosesocketしたとき
・クライアント側がshutdownしたとき
0677デフォルトの名無しさん
2010/08/11(水) 11:08:45上3つじゃね
0678デフォルトの名無しさん
2010/08/11(水) 12:50:50http://msdn.microsoft.com/en-us/library/ms741540(VS.85).aspx
The FD_CLOSE message is posted when a close indication is received for
the virtual circuit corresponding to the socket. In TCP terms, this means
that the FD_CLOSE is posted when the connection goes into the TIME WAIT or
CLOSE WAIT states. This results from the remote end performing a shutdown
on the send side or a closesocket. FD_CLOSE should only be posted after all
data is read from a socket, but an application should check for remaining
data upon receipt of FD_CLOSE to avoid any possibility of losing data.
0679デフォルトの名無しさん
2010/08/11(水) 16:01:560680デフォルトの名無しさん
2010/08/11(水) 19:31:150681デフォルトの名無しさん
2010/08/11(水) 22:52:07何故、ランダムに待ち受けポートを変更しても通信が出きるんですか?
0682デフォルトの名無しさん
2010/08/11(水) 22:56:33英語力も高くなるよ、まじめにプログラミングすれば…
0683デフォルトの名無しさん
2010/08/11(水) 23:54:35相手が何番ポートか分かってるから。
0684デフォルトの名無しさん
2010/08/12(木) 00:11:010685デフォルトの名無しさん
2010/08/12(木) 00:12:210686デフォルトの名無しさん
2010/08/12(木) 02:19:57その選んだポート番号と自分のIPアドレスを自ノード情報として拡散するから。
0687デフォルトの名無しさん
2010/08/12(木) 02:46:42>>678を訳してみた。専門用語が理解できていれば、高卒レベルの英文法の知識で十分ではないかと思われる。
>The FD_CLOSE message is posted when a close indication is received for
>the virtual circuit corresponding to the socket.
FD_CLOSEメッセージは、ソケットに対応する仮想回路からclose通知を受信した時に通知される。
>In TCP terms, this means that the FD_CLOSE is posted when the connection
>goes into the TIME WAIT or CLOSE WAIT states.
TCPの用語で言い換えれば、これは接続がTIME WAIT状態またはCLOSE WAIT状態へ遷移する時に
FD_CLOSEが通知されることを意味する。
>This results from the remote end performing a shutdown on the send side or a closesocket.
これは送信側のリモートエンドによるshutdownの実行、あるいはclosesocketに起因する。
>FD_CLOSE should only be posted after all data is read from a socket, but an application
>should check for remaining data upon receipt of FD_CLOSE to avoid any possibility of losing data.
FD_CLOSEはすべてのデータがソケットから読まれた後にのみ通知されるはずであるが、
データを失う可能性を避けるため、アプリケーションはFD_CLOSEを受取り次第、
残りのデータが存在するかを確認すべきである。
0688デフォルトの名無しさん
2010/08/12(木) 03:27:080689デフォルトの名無しさん
2010/08/13(金) 17:44:10つまりどういうことですか?
0690デフォルトの名無しさん
2010/08/13(金) 21:35:43リモート側アプリケーションが恣意的に回線を閉じたということ。
それともshutdownとclosesocketの意味が分からないのかな?
0691デフォルトの名無しさん
2010/08/13(金) 23:57:53○ リモートエンドによる送信面のshutdownの実行
0692デフォルトの名無しさん
2010/08/14(土) 00:10:47相手側がshutdown(sock,SD_RECEIVE); を呼んだ場合や、自身がclosesocketを呼び出した場合はFD_CLOSEは発生しないって事ですか?
0693デフォルトの名無しさん
2010/08/14(土) 00:25:31FD_CLOSEが飛んでくるはず。
0694デフォルトの名無しさん
2010/08/14(土) 22:44:400695デフォルトの名無しさん
2010/08/21(土) 10:20:38たとえば上のサイトでは ダウンロードキーに moemoe と入力すると
ダウンロードできるようになりますが、
これをプログラムで行うにはどのように行うのでしょうか?
0696デフォルトの名無しさん
2010/08/21(土) 11:15:56先生、病院はこっちです
ttp://www.pri.kyoto-u.ac.jp/index-j.html
0697デフォルトの名無しさん
2010/08/21(土) 12:58:530698695
2010/08/22(日) 10:19:19お願いしますm(_ _)m
0699デフォルトの名無しさん
2010/08/22(日) 18:55:190700デフォルトの名無しさん
2010/08/22(日) 19:09:47そのページだと>>695レベルじゃ作れないかもな〜
cookie関係のプログラミング面倒くさいもん
LLで作るんだろうけど、www::mechanizeでも調べればいいと思うよ
0701695
2010/08/23(月) 19:55:55すいませんでしたm(_ _)m
0702デフォルトの名無しさん
2010/08/23(月) 20:09:12LLって何の略?
0703デフォルトの名無しさん
2010/08/23(月) 20:12:02bashとかwshとかああいうののことか。知らなかったわ
0704695
2010/08/23(月) 22:16:22すいませんでしたm(_ _)m
0705695
2010/08/24(火) 17:42:33買ったほうが作者にもいいし、経済にもいい
つまりおまえらはアマチュア同人作家以下のとんでもなくくっさいゴミむしのキチガイがはいたゲロを
食べて生きている下等生物以下のミジンコの卵
さっさとクソしてしね
0706デフォルトの名無しさん
2010/08/24(火) 21:42:01面倒臭がってたら何も産み出せない
0707デフォルトの名無しさん
2010/08/24(火) 22:27:430708デフォルトの名無しさん
2010/08/24(火) 22:29:290709695
2010/08/24(火) 22:52:51これは、俺になりすました人です
迷惑かけてごめんなさい
0710デフォルトの名無しさん
2010/08/24(火) 23:29:33下手な根気は誤った方向へ延々とハマるという場合もある。
適度に「これめんどくせ〜、もっといい方法無いかな?」というのも必要。
0711デフォルトの名無しさん
2010/08/24(火) 23:35:25いい方法ばかり探しすぎて何をすればいいのかわからなくなって何もできないのがお前
0712デフォルトの名無しさん
2010/08/25(水) 02:16:33自己紹介乙としか
0713デフォルトの名無しさん
2010/08/25(水) 09:32:45「めんどうくさがり」ってのはプログラマーに必ず必要な資質
0714デフォルトの名無しさん
2010/08/25(水) 09:38:190715デフォルトの名無しさん
2010/08/25(水) 09:54:02それは「めんどうくさがり」ではなく、ただの「なまけもの」だ。
一見そっくりだが大きな違いがあるので注意しよう。
0716デフォルトの名無しさん
2010/08/25(水) 10:11:240717デフォルトの名無しさん
2010/08/25(水) 10:14:050718デフォルトの名無しさん
2010/08/25(水) 10:16:230719デフォルトの名無しさん
2010/08/25(水) 10:20:420720デフォルトの名無しさん
2010/08/25(水) 10:22:490721デフォルトの名無しさん
2010/08/25(水) 10:27:58めんどくさがらずにめんどくさがる。
0722デフォルトの名無しさん
2010/08/25(水) 10:31:29改善したがりという資質だ
0723デフォルトの名無しさん
2010/08/25(水) 10:47:110724デフォルトの名無しさん
2010/08/25(水) 10:53:500725デフォルトの名無しさん
2010/08/25(水) 12:05:04じゃあ、めんどくさいから他人に仕事を押し付ける人はめんどくさがり?
0726デフォルトの名無しさん
2010/08/25(水) 12:11:19GPUを利用したPCベースのソフトウェアルータで40Gbpsを達成
http://shader.kaist.edu/packetshader/
これからはネットワークプログラミングもGPGPUの時代ですよ!
0727デフォルトの名無しさん
2010/08/25(水) 12:13:24元々GPU自体は画像処理のための物だし、
CPUが超並列化してくれる方が正統だと思うんだけどなぁ。
0728デフォルトの名無しさん
2010/08/25(水) 13:51:360729デフォルトの名無しさん
2010/08/25(水) 16:05:03今ではHTML5で遊んでる。
0730デフォルトの名無しさん
2010/08/26(木) 13:09:27HttpWebRequestでやって見ましたがCookie関連の動作がうまくいきませんでした
例えばYahooにアクセスすると下のコードでは
こんにちは、○○○さん
となるのに対しHttpWebRequestだと
ログイン
になってしまいます
誰かお願いしますm(_ _)m
AfxParseURL(CString(uri), protocol, serverName, fileName, port);
CInternetSession session(L"HttpPost - simple http client");
CHttpConnection* conn = session.GetHttpConnection(serverName, port);
CHttpFile* file = conn->OpenRequest(
CHttpConnection::HTTP_VERB_GET, fileName,
NULL, 1, NULL, NULL, INTERNET_FLAG_RELOAD | INTERNET_FLAG_DONT_CACHE);
file->AddRequestHeaders("〜");
file->SendRequest();
0731デフォルトの名無しさん
2010/08/27(金) 01:45:23ttp://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=JA-JP&k=k%28SYSTEM.NET.SOCKETS.SOCKET.SHUTDOWN%29;k%28SHUTDOWN%29;k%28TargetFrameworkMoniker-%22.NETFRAMEWORK%2cVERSION%3dV4.0%22%29;k%28DevLang-CSHARP%29&rd=true
0732デフォルトの名無しさん
2010/08/27(金) 02:04:420733デフォルトの名無しさん
2010/09/04(土) 03:43:11でも、自分でサーバー側応答プログラムを書くのは面倒くさい。
こんなときに使えるらくちんツールって無い?
0734デフォルトの名無しさん
2010/09/04(土) 07:10:020735デフォルトの名無しさん
2010/09/04(土) 10:13:260736デフォルトの名無しさん
2010/09/04(土) 10:54:20inetdやxinetdを使う
0737デフォルトの名無しさん
2010/09/10(金) 19:34:010738デフォルトの名無しさん
2010/09/10(金) 21:10:360739デフォルトの名無しさん
2010/09/11(土) 00:50:060740デフォルトの名無しさん
2010/09/14(火) 11:31:53プロトコルがテキストならnetcatとか。
0741デフォルトの名無しさん
2010/09/14(火) 22:08:380742デフォルトの名無しさん
2010/09/18(土) 00:31:53採用時に資格は一切評価しないといった建前も世間ではよく耳にしますが、折角の機会ですから本当の事を言います。評価します。マイナスの評価です。
仕事に就いていないのに資格の取得などに時間を浪費していたという事実は、少なくとも一分一秒を争う企業活動への参加を目指すなら、悪です。
学生時代のいまから時間の使い方をしっかり意識して生活してください。
社会に出れば仕事を覚えるために学生時代の10倍も20倍もハードな勉強が求められます。
もちろん必要な資格があればその中で取得します。しかしその学習量は社会人が仕事の中で日々習得する知識量のうちのほんのごく一部に過ぎません。
学生が資格の勉強に貴重な時間を費やすのは、子供が折角もらったお年玉を老後の生活資金に貯めておくようなものです。
子供のお小遣いと大人の生活費では一円の重みが違います。同様に、学生と経験を積んだ社会人とでは同じ一時間でも脳の仕事量が全く違うのです。
0743デフォルトの名無しさん
2010/09/18(土) 01:36:560744デフォルトの名無しさん
2010/09/18(土) 04:37:530745デフォルトの名無しさん
2010/09/18(土) 10:07:03お前ニートだろ?w
0746デフォルトの名無しさん
2010/09/18(土) 10:41:320747デフォルトの名無しさん
2010/09/18(土) 10:50:39俺天才プログラマだけどなに?
0748デフォルトの名無しさん
2010/09/18(土) 11:00:550749デフォルトの名無しさん
2010/09/18(土) 11:06:260750デフォルトの名無しさん
2010/09/18(土) 11:08:490751デフォルトの名無しさん
2010/09/18(土) 11:11:07あんま迷惑かけるなよ
0752デフォルトの名無しさん
2010/09/18(土) 11:12:090753デフォルトの名無しさん
2010/09/18(土) 13:42:42テーブルゲーム系ならいいんじゃね?
0754デフォルトの名無しさん
2010/09/29(水) 22:47:12ツールを終了してもパケットの送信が止まらずに困っています。
パソコンを再起動しても止まりません。
どなたか解決方法を知りませんか?
0755デフォルトの名無しさん
2010/09/30(木) 05:40:000756デフォルトの名無しさん
2010/09/30(木) 10:53:54パソコンを再起動しても止まらないなら、それは受信側が悪い。
0757デフォルトの名無しさん
2010/09/30(木) 13:23:23悪魔祓い師を呼ぶしかなさそうだな。
0758デフォルトの名無しさん
2010/09/30(木) 13:39:29本当にツールを終了してもPCを再起動しても送信し続けてたらそっちの方がオカルトだわ。
0759デフォルトの名無しさん
2010/09/30(木) 15:58:02HTTPでファイルをダウンロードしたとき、
サイトにファイルのチェックサムなどが書いていない場合、
正しくファイルがダウンロードできたかをチェックする方法ってありますか?
0760デフォルトの名無しさん
2010/09/30(木) 16:12:56いちおうTCPのレイヤではチェックサムを確認しているはず
0761デフォルトの名無しさん
2010/09/30(木) 17:09:12Content-Lengthヘッダと、実サイズが合ってれば壊れてないはず。
0762デフォルトの名無しさん
2010/09/30(木) 17:21:04なるほどTCPは信用できますが、
プロキシを通して間接的にHTTPをやりとりしている場合はどうなのでしょうか。
>>761
> Content-Lengthヘッダと、実サイズが合ってれば壊れてないはず。
サイズで比較するのは良いアイデアですね。
早速実装してみたいと思います。
ありがとうございました。
0763デフォルトの名無しさん
2010/09/30(木) 17:21:510764デフォルトの名無しさん
2010/09/30(木) 17:23:27未熟者でして、イライラさせてしまい申し訳ありません。
0765デフォルトの名無しさん
2010/09/30(木) 17:46:470766759
2010/09/30(木) 18:38:30内容が壊れているかどうかをContent-Lengthで比較してもわかりませんでした。
0767デフォルトの名無しさん
2010/09/30(木) 19:41:04わかれよそれくらい
0768デフォルトの名無しさん
2010/09/30(木) 19:45:110769デフォルトの名無しさん
2010/09/30(木) 20:47:580770デフォルトの名無しさん
2010/10/04(月) 19:21:21ページ内容のチェックサムだって改竄されている可能性だってあるぞ。
いろいろレイヤが混ざってるが、
・HTTP的にファイルが完全にダウンロードできたかどうかは、Content-Lengthのチェックで十分。
もしContent-Lengthが無かった場合は、HTTPのコネクションが切れた時点で転送終了と見なすしか方法はない
・ファイルの改竄を防ぐには信頼できる鍵でSSL使うしかない
0771デフォルトの名無しさん
2010/10/05(火) 09:05:30そういうことは実際に野良プロキシ大量に扱ったあとに言いなさいよ。
ファイルが壊れる原因は一度のアクセスでの転送量に制限を加えている鯖が多いからだよ。
悪意で改竄する鯖はほとんどない。
0772デフォルトの名無しさん
2010/10/05(火) 09:27:060773デフォルトの名無しさん
2010/10/05(火) 09:37:510774デフォルトの名無しさん
2010/10/05(火) 10:50:11そもそもそれ立派な悪意だろ
0775デフォルトの名無しさん
2010/10/05(火) 11:30:58いや、悪意じゃないでしょ。
通信量は有限なんだし、パンクしないように制限を加えるのは合理的だよ。
0776デフォルトの名無しさん
2010/10/05(火) 11:31:45○ 帯域
0777デフォルトの名無しさん
2010/10/05(火) 11:51:38合理的では無いだろ
0778デフォルトの名無しさん
2010/10/05(火) 11:53:33そこで合理的という言葉が出てくるのはおかしい。
0779デフォルトの名無しさん
2010/10/05(火) 12:11:23WEBサーフィンの支援を目的とした中継サービスを広く提供することを目的とするなら、
ダウンロード目的の利用を牽制することも含めて
通信量に制限を加えて一回のアクセスが回線を占有し続けないようにするのは
手段として合理的だろ。
0780デフォルトの名無しさん
2010/10/05(火) 12:13:46必要なのは修正が加えられることがあるという事実にどう対処すればいいかってことだけじゃないのん
0781デフォルトの名無しさん
2010/10/05(火) 12:19:04おっしゃるとおり。
改変が加えられることに対処する方法が無いから
ファイルのMD5をページに書いて自前で比較してくださいね、
っていうダウンロードサイトが多いんだろうなぁ。
0782デフォルトの名無しさん
2010/10/07(木) 11:26:380783デフォルトの名無しさん
2010/10/07(木) 11:42:38技術的な話題。
0784デフォルトの名無しさん
2010/10/10(日) 21:00:54WinSock 2.0 を使い、サーバ・クライアントモデルのアプリを作っています。
また、WSAAsyncSelect を使って接続を非同期にしています。
同じマシンでサーバとクライアントを両方立ち上げ、127.0.0.1 で接続すると正常に動作しています。
ところが、インターネット経由で接続すると、connect 時にメッセージで WSAETIMEDOUT が返ってきます。
IP は ttp://cgi13.plala.or.jp/hiro-mg3/ip.shtml で調べて接続しました。
(ルータを挟んでいるため ipconfig では自分自身の WAN 側のアドレスを取得できませんでした。)
LAN 側のアドレス (192.168.〜) では正常に動作しました。
ファイアーウォールを疑い、ルータの設定で全てのポートを開放、セキュリティソフトもオフにしましたが、結果は変わらずでした。
127.0.0.1 で上手く動き、インターネット経由では上手くいかない可能性として何が考えられるでしょうか…。
関係ありそうなソースは以下の通りです。
よろしくお願いします。
SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
WSAAsyncSelect(sock, 〜, 〜, FD_ACCEPT | FD_CONNECT | FD_READ | FD_WRITE | FD_CLOSE);
sockaddr_in server;
server.sin_family = AF_INET;
server.sin_port = htons(54321);
server.sin_addr.S_un.S_addr = inet_addr("〜");
connect(sock, (sockaddr *)&server, sizeof(server));
0785デフォルトの名無しさん
2010/10/10(日) 21:05:35それはルーター依存だ
ルーターによってはLAN側からWAN側のアドレスにアクセスできないものがある
最近の事情は知らんが、ちょっと昔はできるもののほうが少なかったよ
0786デフォルトの名無しさん
2010/10/10(日) 21:14:08ということは、完全に外のマシンからなら普通に繋がる可能性もあるということでしょうか。
別環境を用意して試してみます。ありがとうございます!
0787デフォルトの名無しさん
2010/10/10(日) 22:08:22勉強するのに良書があれば教えて下さい
0788デフォルトの名無しさん
2010/10/10(日) 22:11:52router が間に挟まっていて, 複数アドレスもってなければ,
router の外側 == 割り当てられているグローバルアドレス
router の内側 == プライベートアドレス + あなたのマシンもプライベートアドレス
ってのが, 普通じゃないのか?
割り当てられているグローバルアドレスにパケット投げても router に行くだけちゃうか?
その, パケットを router がどう処理するかは router の機種と, 設定次第.
0789デフォルトの名無しさん
2010/10/10(日) 23:35:44UNIXネットワークプログラミング〈Vol.1〉
を頭っからケツまで1文字も飛ばさずに読む。
読むだけでもいいからとにかく全部読む。
0790デフォルトの名無しさん
2010/10/11(月) 00:06:58ネットワークプログラミングとTCP/IPの理解はまた別物
いい加減なレスはしないように
0791デフォルトの名無しさん
2010/10/11(月) 00:26:32そうするとTCP/IPだけ覚えても、結構ハマるネタは残ってるぞ
その上にのっかってるDNSやらDHCPやらいろんな物の挙動も知っておかなきゃな
俺はそれっぽい本を見ながらlinuxマシンで実際にいじり倒して遊んで覚えた
0792デフォルトの名無しさん
2010/10/11(月) 01:11:080793デフォルトの名無しさん
2010/10/11(月) 16:08:16そういうのを全部ひっくるめて、一冊とにかく読めという話だ
0794デフォルトの名無しさん
2010/10/11(月) 16:34:36つっこまれて条件後出しは無様だよ
0795デフォルトの名無しさん
2010/10/11(月) 21:28:12「頭っからケツまで1文字も飛ばさずに読む」しか書いてないよ。
それ以外の理屈は正直どうでもいい。とにかく読む。
0796デフォルトの名無しさん
2010/10/11(月) 21:44:14ほんとにカスだな
0797デフォルトの名無しさん
2010/10/11(月) 21:55:160798デフォルトの名無しさん
2010/10/11(月) 23:15:490799デフォルトの名無しさん
2010/10/11(月) 23:26:09しりませんは言い訳にならないのにいつまで甘えてるんだか
0800デフォルトの名無しさん
2010/10/11(月) 23:32:550801デフォルトの名無しさん
2010/10/12(火) 00:26:110802799
2010/10/12(火) 00:58:170803デフォルトの名無しさん
2010/10/12(火) 01:42:180804デフォルトの名無しさん
2010/10/12(火) 11:03:06UNIXじゃないネットワークなんてねーよ
0805デフォルトの名無しさん
2010/10/12(火) 11:42:54池沼はネットワークプログラミングを行ってはいけない。
UNIXネットワークプログラミング(Vol.1)を読む事は資格試験。
0806デフォルトの名無しさん
2010/10/12(火) 12:32:20理解できなかったのか?
0807デフォルトの名無しさん
2010/10/12(火) 13:17:27キミでも100回読めば理解出来るかも知れませんよ。
0808デフォルトの名無しさん
2010/10/12(火) 15:28:160809デフォルトの名無しさん
2010/10/12(火) 22:44:560810デフォルトの名無しさん
2010/10/12(火) 22:53:05クライアントはC、C++で作って
サーバーをどうするか悩んでる
OSはWindowsサーバーかLinuxか
多数接続する場合、ソケット1つにつき、スレッド1つ割り当てるか
Selectで一つづつ見ていく処理にするか
あまり高速な処理が要求される内容じゃないんだが
助言求む
0811デフォルトの名無しさん
2010/10/12(火) 22:56:45IOCP/epoll/kqueueとかその辺。
0812デフォルトの名無しさん
2010/10/12(火) 23:01:29サンクス
0813デフォルトの名無しさん
2010/10/12(火) 23:22:09もし「Linux&小規模&高速性は要求されない」のであれば、
マスタ・スレーブ方式のマルチプロセス構成でサーバを設計するのが、最も単純。
言い換えると、ソケット1つにつき、1つのプロセス(スレーブ)を割り当てる方式。
具体的には、Linux標準サーバのftpdやtelnetdがこの方式で実装されている。
各スレーブには独立した仮想メモリ空間が割り当てられているから、
スレッド方式と比較して安全な設計が可能だし、シングルプロセス&select方式と比較すれば
イベント駆動制御も不要だから楽に設計できるし、デバッグも簡単といった利点がある。
欠点はLinux(UNIX)依存であることと、大規模&高速性が他と比較して劣る事。
動作を簡単に解説すると、マスタプロセスがacceptで接続通知を待ち受け、
スレーブプロセスをfork&execする、というもの。(ApacheのCGIと同じ、と考えれば分かりやすい鴨)
あと、マスタプロセスは自分で開発しなくても、inetd(インターネットスーパーデーモン)に
接続待ち受け&スレーブ生成をまかせ、スレーブだけをC/C++等で実装することも、場合によっては可能。
UNIXでは古典的な方式で、例題も豊富に有るから、最終的にどの方式を選択するかとは別に、
一度勉強しておくことを勧める。将来、きっと役に立つはず。
教科書なら、このスレの図書コーナー(>>2)にある
・UNIXネットワークプログラミング〈Vol.1〉ネットワークAPI:ソケットとXTI
・TCP/IPによるネットワーク構築〈Vol.3〉クライアント‐サーバプログラミングとアプリケーション
あたりがバイブル的な存在で、個人的なお勧めかな。
0814デフォルトの名無しさん
2010/10/12(火) 23:39:10無謀かな?
PowrePC 233M
無謀だわな・・
ゲーム内容はWIZのオンラインみたいなのを考えてるから
リアルタイム性はそんなに高くない
けど・・
玄箱じゃ無謀だわな
0815デフォルトの名無しさん
2010/10/12(火) 23:50:02コントロールやチャット程度ならね
画像もあると、ちと苦しい
0816デフォルトの名無しさん
2010/10/13(水) 00:05:26そうであれば、
>多数接続する場合、ソケット1つにつき、スレッド1つ割り当てるか
>Selectで一つづつ見ていく処理にするか
のどちらか(= シングルプロセス構成)にしないと厳しいだろね。
それでも、ゲーム内容にもよるが、同時100TCPコネクション程度は耐えられるんじゃないかと思う。
もちろんメモリがキツキツだから、LinuxをDebian(Sarge?)に入れ換えて、
カーネル再構築や不要なデーモン停止といった、チューニング(スリム化)作業必須が大前提になるけど。
自分なら、安い中古ノートPC(Cell/700Mhzクラス)にメモリ512MBくらい入れて、>>813の
マルチプロセス構成にするんだけどね。まぁ検討しているうちが最も楽しいから、色々考えてみるが良し。
0817デフォルトの名無しさん
2010/10/13(水) 00:06:29クライアント同士でのデータのやりとりが多発するMMOでクライアントごとにプロセスはないだろ・・・
0818デフォルトの名無しさん
2010/10/13(水) 00:16:25まったくだ >>813 のド素人振りがよくわかるレスだよな
0819デフォルトの名無しさん
2010/10/13(水) 00:18:13そのスペックあれば, ネットワークのレイテンシーさえビハインド出来れば問題ないよ
動的生生成ページでを秒あたり100程度のトランザクションは何とかなる
ただし, いかに2次記憶を動かさないかが腕のみせどころになるが………
0820デフォルトの名無しさん
2010/10/13(水) 00:19:44パケット紛失しまくり
0821デフォルトの名無しさん
2010/10/13(水) 00:20:500822デフォルトの名無しさん
2010/10/13(水) 00:23:50タイトルはWearezardryにしたい
フォント作り難しい・・・
0823デフォルトの名無しさん
2010/10/13(水) 00:48:410824デフォルトの名無しさん
2010/10/13(水) 03:19:37クライアントのターゲットがWindowsなら、サーバーもWindowsにしておいた方が
コードを共有できる部分も増えてらくなのではないかと思う。
Windows Direct Accessとか使うと、楽できるかもしれないし。
クライアントの数が数百とかになるなら、
クライアント毎にスレッドを起こしていたらサーバーが持たない。
>>820
リアルタイム性の高いゲームならUDPもあり。
TCPで再送している間に遅延が起こるくらいなら、UDPで遅延したデータは捨てる。
0825デフォルトの名無しさん
2010/10/13(水) 04:35:40いや、「単純」という文脈であれば間違ってないよ。
「スケーラビリティ」とかって単語が出てくるようであれば、
言語云々は別として、ステートマシンしかないけど。
Pythonが書けるなら、twistedをおすすめするのだが…
0826デフォルトの名無しさん
2010/10/13(水) 09:05:04慣れないInkscapeと一晩格闘してやっとこできた・・
普段絵なんぞ触らんからスゲー時間かかったわ
どう?それっぽいかな?
http://uproda11.2ch-library.com/268426saK/11268426.gif
0827デフォルトの名無しさん
2010/10/13(水) 10:06:53ねーよ
0828デフォルトの名無しさん
2010/10/13(水) 10:59:07言語としてPythonはねーわ・・・
0829デフォルトの名無しさん
2010/10/13(水) 11:07:59fork方式でプロセスわけちゃうとスレーブ同士のIPC通信が必要になるケースなんだから
全然「単純」にはならんのじゃまいか?
それとtwistedって並み居る非同期フレームワークの中で、何がいいの?
今だとnode.jsとかも流行りだけどさ
Pythonでもeventletなら、コルーチン+モンキーパッチを利用して
非同期特有のコールバックでなく、同期のソケットとと全く同じpull型の
記述が出来るので、FSM書き下すより楽ですよって主張と受け取れるんだけどさ
eventletみたいなのは、さすがに動的言語でないと無理だなあと思う
ゲームでコルーチン使いたくてスクリプティングにluaとかが使われるのと同じだよね
なんか思いつきで適当なことホザいてるようにしか見えない
0830デフォルトの名無しさん
2010/10/13(水) 11:16:270831デフォルトの名無しさん
2010/10/13(水) 12:17:03楽なのはlibeventを使う方法
パフォーマンスも悪くない
0832デフォルトの名無しさん
2010/10/13(水) 12:40:38いやそういうことじゃなくて
何でtwistedなんか薦めるの?という突っ込みだったんだが…
まあいいか(どうでも)
0833デフォルトの名無しさん
2010/10/13(水) 14:09:10知るかボケ >>825 にレスしろよ
0834デフォルトの名無しさん
2010/10/13(水) 14:21:30は?
>>831が俺(>>829)に(的外れな)レスをつけてるみたいだから答えただけなんだが?
0835デフォルトの名無しさん
2010/10/13(水) 14:26:29どれも馬鹿まるだしのレスだなw
0836デフォルトの名無しさん
2010/10/13(水) 18:25:53twisted に拘るメリットって何があるのか教えて欲しい
(煽りじゃなくてマジで)
0837デフォルトの名無しさん
2010/10/13(水) 20:01:26何をデバグしてるのかわからなくなるぞw
0838デフォルトの名無しさん
2010/10/13(水) 20:05:51剣が鉛筆みたいだ、そこいじればカコイイ
0839デフォルトの名無しさん
2010/10/14(木) 00:00:430840デフォルトの名無しさん
2010/10/14(木) 00:12:530841デフォルトの名無しさん
2010/10/14(木) 11:37:28選択肢としてふさわしくないからでしょう。
0842デフォルトの名無しさん
2010/10/19(火) 06:16:18ソケット常時接続で通信を行うサーバ・クライアントモデルの
クライアント側アプリケーションを作っています。
OSはWindow 2003、JavaはJDK6を使用しています。
クライアント - サーバ間は、
[クライアント] - [スイッチングハブ] - [ルータ] - [サーバ]
という構成になっています。
クライアント側からアクティブオープンでソケット接続後、
常時read用スレッドおよび、write用スレッドの2つの非同期
スレッドでソケットを共有して使用しています。
ここで [スイッチングハブ] - [ルータ] 間のLANケーブルを
抜き、しばらくするとクライアントのread処理で例外
「SQLException(connection reseted)」が発生します。
0843842
2010/10/19(火) 06:19:50write処理でTCP PSHのリトライを繰り返しており、
リトライを7〜8回繰り返した後に、上記の例外が
出力されます。
このとき、クライアント側からFINもRSTも出力されていません。
クライアント側の実装で、shutdownもcloseもしていませんでした。
別途クライアントをJavaのプログラムからWinsock2.0を使用した
ツール(SocketDebugger)を使用してサーバに接続し、LAN線を
抜いた後にツールからデータ送信(write)を行ったところ、
Wiresharkのログは上記と同じものが出力され、ツールには
WSAECONNABORTED(10053)が発生したと出力されました。
WinsockがTCP PSHのリトライオーバによりソケットを
破棄したものと思われるのですが、このソケットの破棄が
行なわれないようにすることは可能でしょうか?
可能な場合、どのようにすればよいか、ご教示願います。
上記現象でソケット破棄されることがWinsockの仕様(避けられない)
場合、TCPのリトライ回数やリトライ間隔(時間)を増やすことは
可能でしょうか?
以上、よろしくお願いします。
0844デフォルトの名無しさん
2010/10/19(火) 10:34:41・「SQLException」->SQL使ってんのか。通信の上にいろんなのかぶりすぎでは
エスパー以外わからんよ。
・「ソケットを破棄したものと思われる」->「思われる」じゃだめだろ。
ここが発端で「ソケット破棄を防ぐには〜」とおかしな方向に行ってる。
察するところ
TCP接続が切れてもアプリとしては何事もなかったように通信を続けたいのか?
それなら、エラーを適切に判断して適切に再接続して元の処理に戻るだけ。
(俺が作るなら関数コールでの制御じゃなくて状態変数を使って制御するが
それはまあ別の話)
アドバイス:
いきなり難しいことをやろうとして技術が追いついてないっぽいががんばれ。
自分が作ろうとしてるものをちゃんとレイヤ化して考えといい。
エラー発生箇所をもっと(OSのAPIまで)絞り込むくせをつけるといい。
0845デフォルトの名無しさん
2010/10/19(火) 10:39:400846デフォルトの名無しさん
2010/10/19(火) 10:39:45ソケットは「破棄」されてないと思うぞ。
0847デフォルトの名無しさん
2010/10/19(火) 10:53:52・接続時にキープコネクションを有効にせず
・切れてる間に一切通信しようとしなかった
なら可だが、それ以外なら無理ジャネーノ。
まずは本人が何をやりたいのかだな
0848842,843
2010/10/20(水) 03:57:56つたない内容の文章を読んでいただき恐縮です。
>> 844 さん
「SQLException」は、「SocketException」の誤りでした。
申し訳ありませんでした。
> 察するところ
> TCP接続が切れてもアプリとしては何事もなかったように通信を続けたいのか?
ご指摘の件ですが、私個人としては「例外を検知したので、
ソケットの再接続を行う」という実装にしたい(している)のですが、
サーバ側のアプリ開発の方から、
「経路のチェックは、アプリレベルのヘルスチェック送受信の
タイマーでのみ管理すべきであり、それ以外の制御下でソケットを
切断することは、基本認められない」と言われており、
>> 845 さんが言われました、
> 一時的にケーブルが引っこ抜けたとしてもTCPのコネクションは
> 切断したくないって話じゃないかなぁ
を実現する方法がないかを模索しているところです。
# アプリレベルのヘルスチェックについて、前回説明しておりませんでした。
申し訳ありません。
0849842,843
2010/10/20(水) 04:36:44送達管理(電文送信時、相手から電文受信電文が送付される)
も行っております。
さらにサーバ側アプリ開発者からは、
「Javaで実装しても、LANケーブル断線時にソケットが
勝手に切断されることはないはず」
ということを言われ、できる術を探しているところです。
# サーバ側開発者の方に対策方法を聞ければよいのですが、
立場的に聞けない関係なのです・・・。
現状、調査があいまいな状況なのですが、私見では
>>847 さんが言われた
> ・接続時にキープコネクションを有効にせず
> ・切れてる間に一切通信しようとしなかった
> なら可だが、それ以外なら無理ジャネーノ。
ではないかと思っております。
いずれにしても、>>845 さんからもアドバイス
いただいたとおり、もう少し深く調査し、原因を
絞り込んでみます。
0850デフォルトの名無しさん
2010/10/20(水) 05:32:370851デフォルトの名無しさん
2010/10/20(水) 09:07:41原因と言うか、送信タイムアウトでソケットが切断されるのはTCPの仕様なので、
その要求を満たそうとするなら必然的にTCPを使用しないと言う選択肢しかないと思うよ。
通信経路のヘルスチェックが、厳密にはソケット自身でしか出来ないですしね。
間に介在しているすべてのルーターやHUB、プロキシをクライアント側の
ヘルスチェックでどうこうできるものでもないし。
とりあえず、その要求仕様を突き付けている馬鹿に、サンプルプログラムでも
書いてもらうしかないじゃない?
0852デフォルトの名無しさん
2010/10/20(水) 09:18:20だから
># サーバ側開発者の方に対策方法を聞ければよいのですが、
> 立場的に聞けない関係なのです・・・。
こんなことになってんだよw
0853デフォルトの名無しさん
2010/10/20(水) 13:29:14ケーブル抜いてタイムアウトしたら、writeかreadでEWOULDBLOCKが返ってこないか?
ただし、期間が余り長いとDHCPのリース期間終了とか他の要因で切断はある。
0854デフォルトの名無しさん
2010/10/20(水) 14:10:38こんなのあった。
http://support.microsoft.com/kb/931319/
http://support.microsoft.com/kb/239924/
んゆ。
0856デフォルトの名無しさん
2010/10/20(水) 19:12:09無効にならねーよバカ
0857デフォルトの名無しさん
2010/10/21(木) 00:43:29PCが直接つながってる線のリンクはダウンしないって話でしょ。
手元の資料によるとPosix.1gのTCPソケットオプションで
TCP_MAXRT っていうのがあって、
「TCPがデータの再送を開始してからコネクションが切断されるまでの
時間を指定する。値にゼロを指定するとシステムのデフォルト値を用いる
ことを意味し、-1を指定すると永久に再送を行うことを意味する。…」
とある。けど、Windows2003についてくるWinsockのTCP実装が
TCP_MAXRTを実装しているかは未調査。あと、Javaで指定できるかも
微妙。
ttp://download-llnw.oracle.com/javase/1.4.2/docs/guide/net/socketOpt.html
には載ってない。
0858842
2010/10/21(木) 08:08:33その後、サーバ側のアプリ実装者からソケットの実装処理を
抜粋し、紙で提供していただく機会があったのですが、
java.net.Socketを使用した一般的な実装で、特別なソケット
オプション指定やロジックを使用しているようには見えない
ものでした。
その実装で、問題(TCP自動切断)が発生したことがないと
言われており、ますます混乱しているところです・・・。
(その方の実行環境は、WindowsXP SP3だそうです。)
>>852 さん
私がその立場にいたのでしたら、「すいません」と言って
仕様変更するという調整もできたかもしれないのですが・・・(;_;)
0859842
2010/10/21(木) 08:12:51情報提供ありがとうございます。
現在行っている調査の参考にさせていただきます。
# 進展のない話を書いてもスレ汚しですね。
調査結果がなんらか出てから書き込むようにします。
0860デフォルトの名無しさん
2010/10/21(木) 19:39:47http://support.microsoft.com/kb/158474
MaxConnectRetries
MaxDataRetries
Linuxなら
tcp_retries1,tcp_retries2とか?
0861デフォルトの名無しさん
2010/10/22(金) 19:57:54大きな値を設定したとしてもリトライ間隔がえらいことになるぞ
(リトライ毎にタイムアウト時間が倍々になったり。。。)
ワケの分からないことは止めて普通に再接続処理しなきゃダメだよ
0862デフォルトの名無しさん
2010/10/23(土) 16:29:22相手から送られてくる文字列って何バイトか分からないと思うんです。
なので、あらかじめ文字列バッファを適当に確保しとくしかないと思うんですが、
なんとか送ってきたデータのサイズをチェックして動的確保したバッファにrecvできるような
方法ないですか?
0863デフォルトの名無しさん
2010/10/23(土) 16:41:580864デフォルトの名無しさん
2010/10/23(土) 16:43:230865デフォルトの名無しさん
2010/10/23(土) 21:12:46最初にバイト数を書いといてもらう
で、バイト数が書いてある所だけ読んで確保する
0866デフォルトの名無しさん
2010/10/23(土) 22:28:35素晴らしい発想ですね。ありがとうございます。
0867デフォルトの名無しさん
2010/10/24(日) 00:48:57HTTPって本当に良く考えてるなと思うわ
0868デフォルトの名無しさん
2010/10/24(日) 01:11:570869デフォルトの名無しさん
2010/10/24(日) 09:15:40なぜそこでHTTP・・・
ストリームもので必ずついて回る問題だから
車種も無限にあるし、車輪は無限にあるよ
0870デフォルトの名無しさん
2010/10/24(日) 09:32:27ヘッダサイズが不明だから。
0871デフォルトの名無しさん
2010/10/24(日) 09:32:540872デフォルトの名無しさん
2010/10/24(日) 11:20:49ここは学校じゃないぞ?宿題スレでもないし
0873デフォルトの名無しさん
2010/10/24(日) 11:41:120874デフォルトの名無しさん
2010/10/24(日) 12:08:33でも解決策は無限にないよね
どれもこれも似たような解決策ばっかり
まあ、ひねったプロトコル書かれても面倒くさいだけなんだが
0875デフォルトの名無しさん
2010/10/24(日) 12:13:21C#とかJavaは危険かな
0876デフォルトの名無しさん
2010/10/24(日) 12:17:200877デフォルトの名無しさん
2010/10/24(日) 12:34:410878デフォルトの名無しさん
2010/10/24(日) 13:08:440879デフォルトの名無しさん
2010/10/24(日) 13:10:190880デフォルトの名無しさん
2010/10/24(日) 13:10:310881デフォルトの名無しさん
2010/10/24(日) 13:14:30そういう妄信的なブランド志向は、品質を見定めるのに邪魔になるぞ
0882デフォルトの名無しさん
2010/10/24(日) 13:15:190883デフォルトの名無しさん
2010/10/24(日) 13:17:54どうすんだ?Cでお得意の無視?
0884デフォルトの名無しさん
2010/10/24(日) 13:18:270885デフォルトの名無しさん
2010/10/24(日) 13:19:330886デフォルトの名無しさん
2010/10/24(日) 13:21:300887デフォルトの名無しさん
2010/10/24(日) 13:22:480888デフォルトの名無しさん
2010/10/24(日) 13:23:33このスレって応用利かない奴がいるんだよな
単に例外ってだけ書いて具体例を挙げないほうが良いみたいよ
0889デフォルトの名無しさん
2010/10/24(日) 13:31:13Cが一番、JAVAは危険
↓
そんな奴に限って例外処理しない
↓
例外出るほうがおかしい
↓
じゃあ例外出たときは?
↓
自分のミスが原因
0890デフォルトの名無しさん
2010/10/24(日) 13:49:19そんな想定外な事をしでかしてくれるのが、ユーザとか悪意ある者なんじゃね?
0891デフォルトの名無しさん
2010/10/24(日) 13:51:440892デフォルトの名無しさん
2010/10/24(日) 14:09:460893デフォルトの名無しさん
2010/10/24(日) 14:11:470894デフォルトの名無しさん
2010/10/24(日) 20:37:39> I/Oで読み取りエラーとか
仕様レベルでどうするか決めようね
> ブロッキングソケットが切断されたとか
c じゃなくても eof 扱いで, 想定外の通信終了処理をするのでは?
0895デフォルトの名無しさん
2010/10/24(日) 23:33:070896デフォルトの名無しさん
2010/10/25(月) 21:58:38>>876-882 みたいな鋭い示唆に富んだ書き込みもあるが…
もうちょっと親切に書いてやろうよ。
>> どうすんだ?Cでお得意の無視?
sorryだなトホホ
オマエさんは(昔の俺みたいに)自分のバグを他人のせいにするタイプじゃ
ないか?気をつけなよ。(俺は>>887じゃないけどさ)
つづく
0897デフォルトの名無しさん
2010/10/25(月) 21:59:50プログラム言語を本当に使えるアタマのいいひとは、オブジェクト指向や
例外機構も、整数エラーコードでのエラー処理も、単なる道具の一つとして
適材適所で使いこなすもんだぜ。例外だけがエラー処理じゃないよ。
(>>886 例えば、crt0(=mainの外)での例外処理仕様をわかったうえで
あえて書かなくて済むようにプロセス分割設計するひともいるんだぜ)
一般的には、IPネットワークの通信エラーって言うのは、割と頻繁に
(+自分以外の機械のせいでも)起こりうるものなんだ。
最近の言語(C#とか)のAPIには通信エラーを例外で返すようなものがあって
その場合はしょうがないけど、頻繁に起こりうるエラーは整数戻り値
(エラーコード)で処理したほうが、速くてスマートなプログラムが書けるんだよ。
例外っていうのは元々は、自分の担当してる責任範囲では手に負えないエラーを
大外で捕らえるためのものなんだよ。
メイヤーの「契約に基づくプログラミング」手法のアナロジーで言うと、
「いろいろ手を尽くしたけど、どうしても契約を履行できないことを
(偉い人が頭を下げて)お客(呼び元)に謝るような場合」ってこと。
I/O で読み取りエラーとかブロッキングソケットが切断されたときってのは、
Cだと普通に戻り値でエラーが返ってきて、
それを自分のプログラムで(利用元がカスタマイズ可能な)回数リトライして、
それでもダメだったら例外で返すってのが、スマートだぜ。
例外がないって書き込みは、そういうこと(と俺は理解してるよ)。
エラー処理しないってことじゃない。
0898デフォルトの名無しさん
2010/10/25(月) 22:16:03って書いたけど、そのカスタマイズ方法っていうのは、
「関数呼び出しごとに呼び元がパラメータで指定」なんかじゃなくて、
「プログラム起動前にレジストリや環境変数に設定しておく。設定が
なければ事前に決めたデフォルト回数」
っていうレベルでいいんだぜ。
>>896が言ってる「仕様レベルで決めような」ってのはね...
リトライ回数なんかは、通信プロトコルを設計するような
設計工程(=プログラミングより前)で、普通は決めるんだ。
やらしい話だが、
「リトライ回数は、顧客との仕様調整で決定。変えるなら、
プログラム変更して再コンパイル」にしておいて、
「簡単な仕様変更」として顧客から金を取れる、
新人教育のメシの種にするっていうこともあるんだよ。
俺なら、面倒だからカスタマイズ可能な項目としておいて、
客に勝手にしろ、といいたいけどな。
0899デフォルトの名無しさん
2010/10/25(月) 22:16:450900デフォルトの名無しさん
2010/10/26(火) 11:27:54>896-898な、ちょいくどいし長すぎるんだわ
スマートになるように3行ぐらいに要約しておいてくれ
0901デフォルトの名無しさん
2010/10/26(火) 15:37:15>>883 >>886 >>889 はレベルが低い
もっと勉強しろ
これでいいか
0902デフォルトの名無しさん
2010/10/26(火) 16:55:120903デフォルトの名無しさん
2010/10/26(火) 22:25:48うまい方法ないかな
プログラムの7割がエラー処理になっちゃうからあんまり美しくないというか
0904デフォルトの名無しさん
2010/10/27(水) 00:00:31逆は, あまりみたことない
うまいやつだと, 「実は例外」の部分さえ条件分岐しないことあるからなぁ
Java 辺りだと普通は条件分岐するようなところまで例外になるしな
0905デフォルトの名無しさん
2010/10/27(水) 02:25:53必然的にエラー処理を想定したロジックになるんだよね。
言い換えると(プログラミング言語の例外機構ではなく)
エラーを条件分岐で扱うロジックによって組立てることになる。
エラー処理を正常処理に持ち込む、あるいは正常とは
エラーの一種であるという発想による設計が求められる。
アプリケーションプログラムであれば、エラーが発生しても
メッセージを表示して続行するか、あるいはダイアログでユーザに
判断を委ねることが可能だから、例外機構に頼ることは間違いじゃない。
ただし、通信プロトコル制御はシステムソフトウェアの一種だから、
例外発生は、即システム停止(UNIXであればpanic、Winであればblue screen)、
あるいはアプリケーション全体の強制異常終了の場合にしか使い道が無い、
といっても間違いではないと思う。
0906デフォルトの名無しさん
2010/10/27(水) 07:44:11いや言ってみただけ。
0907デフォルトの名無しさん
2010/10/27(水) 09:58:44プロトコルデーモンだったら単にプロセス終了するため、でいいと思う。
C++で標準になった「テンプレートライブラリ」にはリンクリストやらが
用意されてて、要素追加のときにメモリブロックの追加確保が発生して
万一メモリ確保失敗するとbad alloc 例外を投げる仕様になってる。
C++ではユーザプログラムが拾ってない例外は、crt0がアボート処理
(メモリ全解放してプロセス終了)してくれる仕様になってる。
ということは、bad alloc例外は、いちいちプログラムで拾わずにcrt0に
まかせてプロセス終了し、あとはプロセスの生存監視をしてクラスタ切り替えする
仕組みに任せる、でOKってこと。
リンクリストの追加削除でいちいちメモリエラー拾うコードがなくなってすっきり。
最大数設定とか最大通信負荷のテストを結合テスト以降で必ずやるから、
本番環境でメモリ不足が発生することは基本的にありえないしね。
通信エラーなんか例外で扱うことじゃない、正常系の一部だってことで同意見。
JavaやC#のライブラリつくったやつは、例外の意義がわかってないアホ。
0908デフォルトの名無しさん
2010/10/27(水) 18:28:53だからそれがなんとかならないかな という話なんだが。
仕方ないで済ますのは進化が無い
0909905
2010/10/27(水) 19:52:16>プロトコルデーモンだったら単にプロセス終了するため、でいいと思う。
それが>>905の「アプリケーション全体の強制異常終了」に相当するのかな、と。
>JavaやC#のライブラリつくったやつは、例外の意義がわかってないアホ。
自分はUNIX Cしか知らない(C++/Java/C#は無知)のでコメントしづらいが、
もしシステムソフトウェア向けのライブラリに例外機構を前提とするAPIが存在するとしたら、
そんなライブラリを設計した奴らは「例外の意義がわかってないアホ」だ、という意見に同意。
おそらく周囲の開発環境は異なるけど、本質的な意味では同じ視野で問題を俯瞰している気がする。
>>908
>>905で書いたのは、システムソフトウェア(カーネル/デバドラ/低レベル通信ライブラリ)を
対象にして書いたし、もしそうであれば間違った(勘違いした)主張ではなかったはずだ、と思う。
ただし、今はネットワークプログラミングが(特殊な技能を持つ)システムプログラマだけでなく、
アプリケーションプログラマあるいはエンドユーザレベルでも一般化しつつある事も認める。
(それが、こんなスレがPart.26もの長寿スレとして継続している現実を意味していると思う。)
だから、そんな普通のプログラマが普通のアプリをネットワーク対応させようとした時に、
(>>908の言う)「なんとかならないか、仕方ないで済ますのは進化が無い」という意見も理解したい。
0910デフォルトの名無しさん
2010/10/27(水) 22:05:12どうしてもやりたいならプログラムをデータ化すればできるんじゃないの。
構造体の第一変数がやるべきことで
第二変数がパラメータで
構造体の配列で「次にやるべきこと」を作って
エンジンに渡す
みたいなアレ。よくあるだろ。
GPU(グラフィック専用プロセッサ)とか
NPU(ネットワーク専用プロセッサ)に対する指示はそういう感じだよ。
細かいエラー処理は1レベル下に隠れる。
それか、「処理実行クラス」というか、ワーカクラスをつくって
そいつらを少し賢くする。作業指示するやつは、端的に指示するだけ。
そうすりゃ、「端的な指示」のソースから細かいエラー処理が消えてすっきり。
人間のチームにリーダーとメンバーがいるのと一緒よ。
ま、2つとも同じこと言ってるな。つまりメタレベルを1個上げれば
ソースの抽象度も1個あがる。
けど、ネットワークと関係ないコーディングテクの話じゃね?
0911デフォルトの名無しさん
2010/10/27(水) 22:07:090912デフォルトの名無しさん
2010/10/27(水) 22:13:12「例外投げるようなすっきり度、かつ分岐のような軽さで」
エラー処理したきゃ、
エラー処理選任のワーカを作れってこと。
第一線で処理しているワーカじゃなくて
エラー処理者にやるべき処理が回っていくような
プチフレームワークをつくればいいだけってこと。
クラス構成設計の基本テクな。
0913デフォルトの名無しさん
2010/10/27(水) 23:15:55これが出てくる意味がわからん.
話の流れとしては, お前らの言う 「エラーも含めて通常処理にしてしまえ」 って,
ことじゃねぇの?
だとすると, エラー用のワーカってのは本末転倒じゃねぇの???
実際, ネットワークコード書くときにエラーなんてのは起って当たり前だし,
いちいち例外投げたり, 特別なワーカに投げたりするとコード汚くなるし...
0914デフォルトの名無しさん
2010/10/28(木) 17:33:37>>903 >>908 がしばらく考えこんでくれればそれでいい
0915デフォルトの名無しさん
2010/10/28(木) 19:42:5010年以上ネットワークいじってるけど答がでねぇ
0916デフォルトの名無しさん
2010/10/28(木) 20:07:500917デフォルトの名無しさん
2010/11/12(金) 01:48:13HTTPサーバーに接続してデータ取得する関数を作った
1 WinSock初期化
2 TCPソケット生成
3 サーバーに接続
4 GETでパラメータをSEND
5 shutdown(TCPソケット, SD_SEND)でデータ送信を閉じる
6 do{ 受信バイト数=recv(TCPソケット,,) }while(受信バイト>0)で0バイト受信するまで繰り返し
7 shutdown(TCPソケット,SD_BOTH)で送受信共に閉じる
8 TCPソケットを閉じる
9 WinSock解放
上記のようにコーディングして期待通りの動作を得ることができたが、
友人のPCでテストしてもらったところ、受信0バイトで処理が終了してしまう
ウイルスバスターが入った環境だったので、バスターのFWに認可してもらったがだめ
WindowsのFWを無効にしてもだめ バスターのFWを無効にしてもだめ。
なのにウイルスバスター自体を終了すると通信できる
ウイルスバスターを終了しないでFWを有効にした状態でも
4と5の間にSleep(1000)とか入れるとちゃんと受信できる
根本的にWinSockの使い方を間違ってるんでしょうか?
どなたか詳しい方、ご教授願えませんか?
0918デフォルトの名無しさん
2010/11/12(金) 02:04:46tcpは遅延有りOKなので
データー来ないからって即終了しちゃだめよ
0919デフォルトの名無しさん
2010/11/12(金) 02:04:480920デフォルトの名無しさん
2010/11/12(金) 02:11:23えーと…最低一回recvするまでは
shutdown(TCPソケット, SD_SEND)
しないほうがいいってことでしょうか?
>>919
ワシの送信は終わったよって伝えないと
相手が「まだ通信してくるかも」と思って0を返してくれない
だからrecvでブロックしたまま固まってしまう
っていう認識なんだけど不要なの?
0921デフォルトの名無しさん
2010/11/12(金) 02:14:03そんなこと考えなくていいのでは?
0922デフォルトの名無しさん
2010/11/12(金) 02:27:28shutdown システムコールは close でソケットを閉じる場合と違って
「輸送中のデータを破棄しても構わない」という意味があるから。
send直後にshutdownすると、OSがsend中のデータを破棄して、データが相手に
届かず、異常を察知した通信相手から接続を切られる可能性があるぞ。
recv で0が返ってきてるのは、そうゆう意味でないかい?
0923デフォルトの名無しさん
2010/11/12(金) 11:08:30どうやって終わったことを確認するの?
0924デフォルトの名無しさん
2010/11/12(金) 12:01:140925デフォルトの名無しさん
2010/11/12(金) 12:24:37こちらがshutdownかcloseしないとエラーが発生するか
タイムアウトするかしないと0が帰ってこないと思うんだけど
どうやって相手の送信が完了したのを認識するのかなーって思いました
0926デフォルトの名無しさん
2010/11/12(金) 12:54:050927デフォルトの名無しさん
2010/11/12(金) 13:14:19電文の区切りを判断する。(判断できるように電文設計する)
>>924 の 「recv でゼロが返ったら」っていうのは、
相手が通信路を閉じたことを判断する方法。
今のHTTPはつないだままで複数の電文(GET〜その応答など)を流せる仕様だから、
内容見ないと区切り判断は無理。
0928デフォルトの名無しさん
2010/11/12(金) 13:23:36TCPは
・送信側のレコード境界が保障されない
(相手がsendしたサイズ区切りの通りはrecvできない)
・バイトの順番がひっくり返ることはない
一方UDPは
・レコード境界が保障される
(相手がsendしたサイズの通りにrecvできるか、パケットロストかのどっちか)
・パケットの順番がひっくり返ることがある
0929デフォルトの名無しさん
2010/11/12(金) 17:32:15鯖から切断 ≠ リクエストに対するレスポンスの終了 だものね。
Content-Length で bodyサイズを確認
タイムアウト付きで bodyサイズ を満たすまで読む (途中で recv() == 0 なら、切断発生で異常脱出)
タイムアウト付けてるのは Content-Length があてにならない鯖への対応
0930デフォルトの名無しさん
2010/11/12(金) 17:36:56え、そんな鯖あるの
今まで考慮したことなかったぜ・・・ なんという嫌がらせ
0931デフォルトの名無しさん
2010/11/12(金) 17:47:30繋ぎ先の想定範囲を広く取った場合に、レアケースで有りえるかもしれない、という話ね。
串経由で Content-Length 落されたり
CRLF を 2Byte ではなく 1Byte で勘定しやがったり
CRLF であるべき部分が LF で送ってて なのに CRLFで勘定してたり
0932デフォルトの名無しさん
2010/11/12(金) 18:25:300933デフォルトの名無しさん
2010/11/12(金) 18:59:020934デフォルトの名無しさん
2010/11/13(土) 01:40:550935デフォルトの名無しさん
2010/11/13(土) 01:57:250936デフォルトの名無しさん
2010/11/13(土) 03:17:560937デフォルトの名無しさん
2010/11/15(月) 10:39:070938デフォルトの名無しさん
2010/11/15(月) 22:23:120939デフォルトの名無しさん
2010/11/24(水) 17:38:440940デフォルトの名無しさん
2010/12/05(日) 07:57:08次のことを判定するWindows用のソースコードは
ないでしょうか。できればVC++で書かれたものがよいのですが。
・現在ネットワークに接続しているか。
・ネットワークに接続として選べるのは
LAN接続か、ダイアルアップか。
よろしくお願いします。
0941デフォルトの名無しさん
2010/12/05(日) 10:12:33物理的に繋がっているだけとか
実際にLANにしか接続出来ないとか
グローバルなインターネットちゃんと見れるとか
どこまでの「接続」を期待している?
0942デフォルトの名無しさん
2010/12/05(日) 16:30:07こういうのは「グーグルとヤフーが見れる」ってのが接続判定条件だよ。
質問に質問で返すのはもうそろそろ卒業した方がいい。
仕様とは、聞くものではなく、押し付けるものだ。
0943デフォルトの名無しさん
2010/12/05(日) 20:40:27そして間違っていた場合「ちげえよこの勘違い馬鹿が」とこき下ろす
0944デフォルトの名無しさん
2010/12/05(日) 20:50:51VC++で、.netを使わず、
Process.Start("http://www.google.co.jp");
みたいなことが実現したいのですが、
既に作られたソースコードのようなものがあるでしょうか。
よろしくお願いします。
0945940
2010/12/05(日) 20:59:22>>941
どうもありがとうございます。
グローバルなインターネットがちゃんと見れる状態
になっていることの確認です。
アップデート情報のあるサイトにアクセスして
アップデートが可能か問い合わせたいのですが、
もし、ネットに接続可能でない状態ならば、
その問い合わせを
行わないようにしたいのです。
よろしくお願いします。
0946デフォルトの名無しさん
2010/12/05(日) 21:17:460947デフォルトの名無しさん
2010/12/05(日) 21:32:35でもあってただろ?
0948デフォルトの名無しさん
2010/12/05(日) 22:00:04で、間違っていた場合は勘違いが勘違いを呼んで質問者そっちのけで話が進むわけだ。
エスパーじゃない俺としては
「接続=インターネットに繋がってる事」を最初に提示した上で回答するのが好ましいと思うけどな。
0949デフォルトの名無しさん
2010/12/05(日) 22:05:35仮にそのサイトがダウンしてるときはどうするの?
無条件で問い合わせして、失敗したら何もしない。で良いんじゃないの?
0950デフォルトの名無しさん
2010/12/05(日) 22:58:17>その問い合わせを
>行わないようにしたいのです。
無駄
0951デフォルトの名無しさん
2010/12/06(月) 02:09:37おおざっぱに思いつくのは以下
0. アクティブな(またはアクティブにできる)インターフェースが存在する
ローカルなアクセスは可能かもしれない
1. default route が存在する
外部に接続されているかもしれない
2. DNS サーバにアクセスできる
外部に接続されているかもしれない
3. DNS で外部のアドレスが引ける
ゲートウェイが生きていれば外部に接続可能かも知れない
4. DNS で引いた任意のアドレスにアクセス可能
proxy経由かも知れないが外部にアクセス可能
5. 目的のサイトにアクセスしてみる
運が良ければ目的のサイトが生きていてアップデート情報を取得可能
てなわけで, アクセスしてみるまでは無理
0952デフォルトの名無しさん
2010/12/08(水) 16:59:090953940
2010/12/12(日) 23:06:03>>941
>>942
>>946
>>949
>>950
>>951
>>952
皆様、どうもありがとうございます。
貴重なご意見を参考に次のようにしました。
(1)自動的にアップデートを行うかどうかは、
設定で利用者に選んでもらう。
(2)アップデートの問い合わせをして
繋がらなかったら、タイムアウトして
処理を終了する。
本当に助かりました。ありがとうございます。
0954デフォルトの名無しさん
2010/12/12(日) 23:55:24大抵はカオスになるんだけど。
0955デフォルトの名無しさん
2010/12/15(水) 17:07:420956デフォルトの名無しさん
2010/12/16(木) 08:42:04たとえば?
0957デフォルトの名無しさん
2010/12/16(木) 10:20:07NAT
0958デフォルトの名無しさん
2010/12/16(木) 12:50:59インターネットじゃなくてインターツリーだお
0959デフォルトの名無しさん
2010/12/17(金) 17:20:39バランサとかファイヤウォールも昔は無かった。
0960デフォルトの名無しさん
2010/12/17(金) 23:53:55「internet は network と network をつないだものだ」と 30年近く信じきってたんだが
provider の持っている network は network じゃないのか?
0961デフォルトの名無しさん
2010/12/18(土) 00:07:250962デフォルトの名無しさん
2010/12/18(土) 00:39:290963デフォルトの名無しさん
2010/12/19(日) 14:17:260964デフォルトの名無しさん
2010/12/20(月) 00:50:21接続してきたクライアントの情報と送信してきたメッセージを
プロンプトに表示させる簡単なサーバはできたんですが、
これを複数のクライアントからの同時接続に対応させるにはどうすればいいのですか?
今は一つのクライアントがつないだら、そいつを切断するまで他のクライアントから
送信したメッセージが画面に表示されません。
コード的にはwhileループの中でrecvを繰り返してるような感じです。
抽象的な表現でも構わないので、何かアドバイス下さい。
0965デフォルトの名無しさん
2010/12/20(月) 01:02:290966デフォルトの名無しさん
2010/12/20(月) 01:04:38ソケット毎にスレッド起こすかポーリングでグルグル
0967デフォルトの名無しさん
2010/12/20(月) 01:07:48スレッド起こす方法でやってみようと思うのですが、
そのスレッドの数はlisten関数の第二引数で指定した数まで
という認識でよろしいでしょうか?
0968デフォルトの名無しさん
2010/12/20(月) 06:49:46いいえ。必要な数だけ。
0969デフォルトの名無しさん
2010/12/20(月) 07:43:21ではlisten関数の第二引数はどういうときに影響してくるのでしょうか?
それとポーリングについてですが、
この言葉自体昨日知ったのですが、クライアント側にデータを送信したいものが
ないか問い合わせをすることだそうですね。
イメージとしてはループの中で、acceptで接続を待ち続けて、
ソケットが作成されたら、一定量のデータを受信し、
以降は作成されたソケットに対して、データが受信し終わるまで
recvしまくるといった感じでしょうか?
あと、winsockを勉強するうえで、良いサイトがあったら教えて下さい。
0970デフォルトの名無しさん
2010/12/20(月) 09:31:15ポーリングについて
接続中のソケットにデーターが到着してるかどうかをチェック
入ってたら、入ってる分だけ受信して処理ルーチンをコール
戻ってきたらループ
0971デフォルトの名無しさん
2010/12/20(月) 10:21:18とりあえず、>>1くらい読んだ上で質問してるんだろうな?
0972デフォルトの名無しさん
2010/12/20(月) 12:16:140973デフォルトの名無しさん
2010/12/22(水) 08:49:06tcp/ip通信をしています。
呼び出すとしたら、サーバ側はサーバのソケットとクライアントのソケット両方に
対して、呼び出せばいいのですか?
逆にクライアント側はサーバのソケットのみしか作らないのでサーバのソケットのみに対して
呼び出せばいいのですか?
お願いします。
0974デフォルトの名無しさん
2010/12/22(水) 09:10:290975デフォルトの名無しさん
2010/12/22(水) 09:18:22ありがとうございます。
個別操作というのは具体的にどういうことを言うのでしょうか?
0976デフォルトの名無しさん
2010/12/22(水) 10:33:54それがわからんうちは必要ないってことだ
0977デフォルトの名無しさん
2010/12/22(水) 12:09:59わかりました。ありがとうございました。
0978デフォルトの名無しさん
2010/12/23(木) 07:07:11どういう時に影響してくるのかよくわからんのだが。
0979デフォルトの名無しさん
2010/12/23(木) 07:33:01下の例で何かの処理を行っている間に待たせておけるconnection要求数
listen(sock, backlog);
for (;;) {
conn = accept(sock, ...);
/* 何かの処理 */
}
処理系によって扱いが微妙に異なる
winskockは以下, unix系は man listen しれ
http://msdn.microsoft.com/en-us/library/ms739168%28v=VS.85%29.aspx
0980デフォルトの名無しさん
2010/12/23(木) 08:04:24よく分かりました!本当にありがとうございます!
0981デフォルトの名無しさん
2010/12/23(木) 08:29:140982デフォルトの名無しさん
2010/12/23(木) 14:26:010983デフォルトの名無しさん
2010/12/23(木) 19:04:160984デフォルトの名無しさん
2010/12/23(木) 22:23:35これが、第二引数で制御不可能な理由。
0985デフォルトの名無しさん
2010/12/24(金) 00:03:240986デフォルトの名無しさん
2010/12/24(金) 00:19:58widows の実装はしらんが unix 系は SYN flood だと破断するまでは
それなりに有効に動作しているように見えるが
0987デフォルトの名無しさん
2010/12/24(金) 03:03:450988デフォルトの名無しさん
2010/12/24(金) 08:10:190にした時に2つ目以降のコネクション要求に対してrst返ってくる?
0989デフォルトの名無しさん
2010/12/24(金) 13:06:390990デフォルトの名無しさん
2010/12/24(金) 18:26:35サーバ終了時にサーバのソケットさえクローズしてしまえば、
クライアント側から通信できないと思うんですが、
クライアント側のソケットってclosesocketする必要あるんですか?
0991デフォルトの名無しさん
2010/12/24(金) 18:30:53開いたら閉じる
ちゃんと後始末しないとメモリリークするが、それでもいいなら
0992デフォルトの名無しさん
2010/12/24(金) 18:32:280993デフォルトの名無しさん
2010/12/24(金) 18:38:36ただ単に切断するだけなら、両方閉じるようにします。
すばやい回答ありがとうございました。
0994デフォルトの名無しさん
2010/12/25(土) 03:40:550995デフォルトの名無しさん
2010/12/25(土) 06:26:550996デフォルトの名無しさん
2010/12/25(土) 10:47:450997デフォルトの名無しさん
2010/12/25(土) 19:15:09改行文字チェック?
0998デフォルトの名無しさん
2010/12/25(土) 19:15:580999デフォルトの名無しさん
2010/12/25(土) 19:24:241000デフォルトの名無しさん
2010/12/25(土) 20:14:2910011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。