ネットワークプログラミング相談室 Port26

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
主にソケットに関しての質疑応答スレッドです。

Programming 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/
2デフォルトの名無しさん:2010/03/23(火) 20:32:30
3デフォルトの名無しさん:2010/03/23(火) 20:33:15
図書コーナー:
UNIXネットワークプログラミング〈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/
4デフォルトの名無しさん:2010/03/23(火) 20:34:04
マスタリングTCP/IP RTP編
 http://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/
5デフォルトの名無しさん:2010/03/23(火) 20:34:44
URL抜粋:
★規格
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
6デフォルトの名無しさん:2010/03/23(火) 20:36:22
★プログラミング
C10K ヘヴィーロードサーバ
 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/
7デフォルトの名無しさん:2010/03/23(火) 20:42:11
8デフォルトの名無しさん:2010/03/23(火) 21:41:10
リンク切れぐらいは消せよ
9デフォルトの名無しさん:2010/03/23(火) 22:18:42
文句言うならお前が立てるか前スレで指摘しとけクソ野郎
10デフォルトの名無しさん:2010/03/23(火) 22:28:13
コピペしか出来ないコーダーは立てるなよ
11デフォルトの名無しさん:2010/03/23(火) 22:35:35
なら立てる前にちゃんと立てろ役立たず
12デフォルトの名無しさん:2010/03/23(火) 23:05:28
とりあえず>>1
13デフォルトの名無しさん:2010/03/24(水) 00:08:28
まずはプログラムやる前にtcp/ipの本読もうぜって感じだな。
14デフォルトの名無しさん:2010/03/24(水) 01:06:06
残り3レスしか無かったし、次スレ誘導くらいはしたかったから
いちいちリンク確認してる暇なかったんだわ
次スレではよろしく
15デフォルトの名無しさん: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-、
16デフォルトの名無しさん:2010/03/25(木) 03:32:11
17デフォルトの名無しさん:2010/03/25(木) 03:58:19
http://www.sics.se/~adam/uip/
これはだいじょうぶ
18デフォルトの名無しさん:2010/03/27(土) 20:09:29
>>3の一番上の本だけじゃプログラムでの簡単なファイアウォールの作成はきついですか?
19デフォルトの名無しさん:2010/03/27(土) 20:28:02
そんな質問してる人には無理
20デフォルトの名無しさん:2010/03/27(土) 20:32:16
21デフォルトの名無しさん:2010/03/27(土) 20:51:40
>>19
個人の技術力うんぬんでなくその本でファイアウォールを作るだけの知識が
つくか聞いたんだす。
>>20
windows持ってないんです。。

どうやら上記の本だけでは無理っぽいですね。
パケット単位での取扱いはAPIじゃ難しいと某巨大掲示板に書いてありました。
とりあえずサーバをプログラムで作って、その後、勉強しようと思います。
22デフォルトの名無しさん:2010/03/28(日) 00:18:00
WSAAsyncSelectでイベント型のクライアント作ってるんだが
接続時のタイムアウトはどうやればいいの?
ioctlsocket + selectだとタイムアウトするまでメッセージ処理が止まっちゃうし
23デフォルトの名無しさん:2010/03/28(日) 02:28:42
ネットワーク以前に、もうちょっとプログラミングスキル高めたほうがいいよ。無茶過ぎる。

http://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匹目
24デフォルトの名無しさん:2010/04/02(金) 17:59:11
Linuxで、/proc/fdの下見るとソケット一覧が見られるけど
ここにちょっかいを出してネットワークを切断したいと思います。
いい方法はありますか?
25デフォルトの名無しさん:2010/04/03(土) 14:26:27
関係ないけど sudo rm -rf /proc/fd とかやるとどうなるのかな?
26デフォルトの名無しさん:2010/04/04(日) 04:20:30
>>24
ソケットの場合は/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
27デフォルトの名無しさん:2010/04/07(水) 00:13:12
マスタリングTCP/IP RTP編
 http://www.amazon.co.jp/exec/obidos/ASIN/4274065618/

って入門編読んだぐらいの知識でも理解できそうですか?
28デフォルトの名無しさん:2010/04/07(水) 00:15:08
↑マスタリングTCP/IP 入門編の事です
29デフォルトの名無しさん:2010/04/07(水) 00:28:28
お前が理解できるかなんて、誰がわかるってんだよ
30デフォルトの名無しさん:2010/04/07(水) 00:41:28
切れすぎワロタw
31デフォルトの名無しさん:2010/04/07(水) 01:51:36
RecallToyotaProtocol
32デフォルトの名無しさん:2010/04/07(水) 02:55:21
最後はPriusだろ
33デフォルトの名無しさん:2010/04/08(木) 22:07:13
APIスレでスルーされたのでこっちに貼ります
リモートのIPアドレスからコンピューター名を得る方法ありますか?
自分も相手もWindows(XP以降)です
正しくはコンピューター名じゃなくてUNC名ですが
34デフォルトの名無しさん:2010/04/08(木) 22:19:34
2時間でスルーとかどんだけ自分勝手なんだって話だと思うが。
35デフォルトの名無しさん:2010/04/08(木) 22:44:23
ってかこのスレ全然建設的じゃないな。
教える気がないんだったら煽ってないで黙ってろよ。
36デフォルトの名無しさん:2010/04/08(木) 22:44:45
うるせえ
37デフォルトの名無しさん:2010/04/08(木) 23:14:21
ある。でも聞き方が気に入らないから取り方は教えない。
38デフォルトの名無しさん:2010/04/08(木) 23:21:38
お前にきいてねえよ。
他の奴、答えろ。
39デフォルトの名無しさん:2010/04/08(木) 23:23:13
ある。でも聞き方が気に入らないから、オレも取り方は教えない。
40デフォルトの名無しさん:2010/04/08(木) 23:23:42
やったことないけどWMIは使えないだろうか
41デフォルトの名無しさん:2010/04/09(金) 23:04:31
サーバで、100クライアントからの要求を 100ms 毎に 1回受信
(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
42デフォルトの名無しさん:2010/04/09(金) 23:06:31
その仕様を作った奴にきいたら?
そいつはできるから仕様にしたんだろ
43デフォルトの名無しさん:2010/04/09(金) 23:14:13
客先は、同じ内容を他社にも発注しており、
他社システムは 100ms 内になっているため、
苦しんでおります・・・
44デフォルトの名無しさん:2010/04/09(金) 23:19:22
やりかた聞けよそいつに
客先にソースあんだろ?
45デフォルトの名無しさん:2010/04/09(金) 23:25:03
IISなら速いよ
46デフォルトの名無しさん:2010/04/09(金) 23:25:41
どーみてもボトルネックはDB操作。
47デフォルトの名無しさん:2010/04/10(土) 02:18:35
0.1秒って考えれば結構長時間にみえてくる
48デフォルトの名無しさん:2010/04/10(土) 03:59:46
FPSでpingが100以上だと致命的だな
49デフォルトの名無しさん:2010/04/10(土) 09:37:42
100msって、単に通信だけなら相当に長い。
それがきつく感じるのは>>46にもあるけどDB操作があるからだろ。
通信周りをどうこう考える前に、DB操作が、せめて80ms以内にできなきゃ話にならん。
DB操作が並列処理で高速化できるなら通信まわりも並列化だろうが、
DB操作が並列操作でもスループットあがらない処理なら、通信周りだけ並列化しても意味が無い。
50デフォルトの名無しさん:2010/04/10(土) 10:11:52
同期処理しなけりゃならないなら、NoSQL系の奴使うとか。
同期じゃなくて良いなら、要求をキューイングしておいて、別プロセスとかで処理すれば?
51デフォルトの名無しさん:2010/04/10(土) 10:22:16
コネクションプールしてないとか
まさかね
52デフォルトの名無しさん:2010/04/10(土) 10:34:46
他社は出来てるんだから遅い原因は>>41にあるという結論に至る。
>>51あるいはDBの設計が致命的にヘボい。
53デフォルトの名無しさん:2010/04/10(土) 10:36:30
プログラミングに工数かけるくらいなら、50万くらいで買えるそこそこ高速なDBサーバ提案しろよ。
54デフォルトの名無しさん:2010/04/10(土) 15:24:39
>>41
>サーバで、100クライアントからの要求を 100ms 毎に 1回受信
>(1クライアントは 10sec 毎に1回要求送信)
速攻クビにしたいレベル。
55デフォルトの名無しさん:2010/04/10(土) 15:34:59
とりあえずサーバがDBを兼ねているとして、検索するだけで更新が無いし、
検索用にスレッドを作っておいて検索内容を受信したら投げてseteventでもして起こす。
そういうのにすれば良さそう。
56デフォルトの名無しさん:2010/04/11(日) 02:39:31
他社で出来るなら、他社のシステム導入すればいいだけだしな。
遅いシステムしか組めない所はイラネ。
57デフォルトの名無しさん:2010/04/11(日) 09:10:58
サーバー、クライアントプログラミングを勉強しております。
サーバー側でacceptで停止している場合はどうしたらいいのでしょうか?
クライアント側を再起動すると直るのですが。
サーバー側でどうにかしたいのですが、accept内部で待ちに入ってしまったら
どうしようもないのですか?
58デフォルトの名無しさん:2010/04/11(日) 09:13:29
普通はacceptでブロックしないように、selectする。
59デフォルトの名無しさん:2010/04/11(日) 09:34:32
recvとsendのソケットをわざわざ別タスクにする意味ってありますか?
一つのソケットでsendとrecvやってはまずいでしょうか?
60デフォルトの名無しさん:2010/04/11(日) 14:22:30
どっちでも

タスクを分けられるなら分けたほうがいい
61デフォルトの名無しさん:2010/04/11(日) 15:32:45
何故?
62デフォルトの名無しさん:2010/04/11(日) 16:10:31
別タスクって何?二つのソケットっていうこと?だとしたらそんな必要全然ない。
63デフォルトの名無しさん:2010/04/11(日) 16:34:50
>>62
二つのソケットつくるということです。タスクを別にして。
メリットってなんかあるのでしょうか?
設定の簡略化?
64デフォルトの名無しさん:2010/04/11(日) 17:04:20
二つのソケットってディスクリプタが別のソケットってこと?
それサーバ側とクライアント側でどう二つのコネクションを確立するつもり?
65デフォルトの名無しさん:2010/04/11(日) 17:16:44
UDPならコネクションいらないとおもいまして
66デフォルトの名無しさん:2010/04/11(日) 19:42:31
どっちでもいいと思うけど、なぜ頑なにひとつのソケットでやりたいのかの方が分からん
67デフォルトの名無しさん:2010/04/11(日) 19:57:59
二つのソケットつかってやろうとすると、なぜかうまくいかなかったので
ひとつでrawつかってるせいか。
68デフォルトの名無しさん:2010/04/11(日) 22:34:01
送信と受信を同じソケットでやるさい、送信と受信のバッファみたいなのは別なのでしょうか?

例えば、

while{
send
recv}

でループするような処理の場合、recvを抜けたあとに大量にデータが送られてきて、
sendをしようとするも、送信するはずのデータが受信データがはいってきたことによって
送信できなくなるということはあるのでしょうか?

バッファとはソケットレイヤにあるものと考えて
69デフォルトの名無しさん:2010/04/11(日) 22:40:32
UDPなんだかTCPなんだかはっきりしろ
70デフォルトの名無しさん:2010/04/11(日) 22:54:48
ごめんなさい。UDPです。
71デフォルトの名無しさん:2010/04/11(日) 22:56:16
疑問なんだけど、windosやmacが独自につかってるプロトコルを、
unixが受け取るにはどうしてるの?unixのtcp/ipでもないやつとか
72デフォルトの名無しさん:2010/04/11(日) 23:10:39
unixは盗人が標準装備だから
あとは判るな?
73デフォルトの名無しさん:2010/04/11(日) 23:56:41
すみません、詳しくお願い致します
74デフォルトの名無しさん:2010/04/12(月) 00:44:42
ただのUDPのデータと、DNSのデータってどうプロトコルの違いをみつけてるのでしょうか?

ポート番号とプロトコル種別含めて、別々のプロトコルと区別するのでしょうか?
そうした場合、別のプロトコル同士としてドライバレベルで認識してしまうのでしょうか
75デフォルトの名無しさん:2010/04/12(月) 01:01:35
同じUDPやTCPのデータであっても、セッション層やプロトコル層までいくデータでは、
recvの扱い方が違うのでしょうか?
76デフォルトの名無しさん:2010/04/12(月) 01:30:26
>>74,75
意味不明。まずは質問できる程度の知識をつけてから出直そう
77デフォルトの名無しさん:2010/04/12(月) 03:17:17
私の作っているチャットのサーバ側のプログラムは仮にクライアント、AとBがサーバに接続していて、
AがBにチャットを申し込むとAとBのスレッドを別々に作成し、お互いのスレッド内のみでチャットするという動作(希望)をします。
両者のスレッドでは自分のソケット宛にrecvをしていて
仮にクライアントAがBにデータを送ろうとするとA側のスレッドのプログラムだけを通ってデータが行くのか、
それともB側のスレッドのプログラムも通って行くのかが気になり
(A側のスレッドでBのソケットディスクリプタにデータを送る際、B側のスレッドでBのソケットディスクリプタでrecvをしているため。)
下記プログラムを作って試してみました。
(main関数ではほぼaccpetしてスレッド作るだけなので省略します)
続く
78デフォルトの名無しさん:2010/04/12(月) 03:18:43
void *threadMain(void *socketer){
int 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);
}
}
続く
79デフォルトの名無しさん:2010/04/12(月) 03:20:43
私の考えではもしもBを経由するなら
クライアント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が消えています。なぜこのような動作をするのでしょうか。
長々とすみません。よろしくお願いします。
80デフォルトの名無しさん:2010/04/12(月) 03:23:23
fork
81デフォルトの名無しさん:2010/04/12(月) 07:28:40
recvってどこの層でデータをとってるのでしょうか?

httpプロトコルとか、トランスポート層より上にあるプロトコルの場合、
どうデータを処理しているのでしょうか。
82デフォルトの名無しさん:2010/04/12(月) 17:32:07
ソケットに対しての O_SYNC って何か意味を成すの?
83デフォルトの名無しさん:2010/04/12(月) 18:30:12
winsockについて質問です。よろしくお願いします。

まず現象を説明します。
クライアントはWindowsのゲームアプリケーションで、2本スレッドが走っています。

片方は、連続的に映像を描画しています。
もう片方は通信を担当しており、ノンブロッキングモードのSOCKETを監視しています。
秒間60回程度「recv()を監視し、受信バイト数をデバッグウインドウに出力」するスレッドです。

サーバーからデータをsend()すると、クライアントのデバッグウインドウにすぐさま何バイト受け取ったかが表示されます。
(1回のrecvで受信しきれるとは限らないのはもちろんですが)

問題は「映像の描画」の負荷が重くなった時に起きます。
サーバーがsend()してから、受信されるまでの間隔が5秒〜20秒くらいとものすごく遅延するのです。

最初は、描画負荷によって、通信監視スレッドが止まってしまっているのかとも思いました。
ですがループ自体は軽快にまわっています。(0バイト受信というメッセージが、秒間60回吐かれ続けています)

質問は
・これは良くある現象であり、プログラムが間違っているわけではないのかどうか
・解決する方法はあるのか(一応映像の描画は、フレームスキップやらSleep(1)を毎ループ挟んだりやらしたのですが改善せず)
です。
アドバイスよろしくお願いします。
84デフォルトの名無しさん:2010/04/12(月) 18:44:48
>>83
ちゃんと秒間60回吐かれ続けてるの?
ここでログとって時間調べた方がよくね?
あと、念のためマジで受信してるかパケットログ取ろうぜ
85デフォルトの名無しさん:2010/04/12(月) 18:51:19
>>84
はい、60回については通し番号やWindows時間とともに吐かせて確認したので、ループ自体は正常にまわっているようです。

すいません「パケットログ」というのが分からないので、よろしければ教えていただけますでしょうか。
低レベル層でパケットの受信が行われたかを、ツールか何かで見る。ということでしょうか?
教えていただけると幸いです。

余談です。
勝手な素人考えでは
「パケット自体はもちろんすぐ受信されているのだけど、
 CPUパワーを食いすぎており、
 アプリケーション層に渡すまでの処理が超時間かかってしまている」

のかなと。
でも、そこまですさまじく重い(Windows全体がカクつく)ほどではない状態でもなるです
86デフォルトの名無しさん:2010/04/12(月) 19:02:27
読みこんでないデータがあって通信バッファが空くまでまってるんじゃねーの?
87デフォルトの名無しさん:2010/04/12(月) 20:09:17
>>84
>send()してから、受信されるまでの間隔が5秒〜20秒くらいとものすごく遅延
これは明らかに何かが破綻しているね。

単純に時間当たりの通信量がシステム能力に対して多すぎて
間に合ってないってことは?
そうでなければ多分受信スレッドのバグだね。

パケットログはWireSharkをインストールする。通信系のソフト作る場合
パケットログをいつでも採れるようにしておくのは必須事項。
88デフォルトの名無しさん:2010/04/12(月) 21:02:30
UDPw
8987:2010/04/12(月) 22:26:20
アンカー間違ってた。>>83ね。
90デフォルトの名無しさん:2010/04/12(月) 23:26:19
ソケットのバッファって、どうなってますか?受信と送信用それぞれ別々?
91デフォルトの名無しさん:2010/04/12(月) 23:38:43
は?
92デフォルトの名無しさん:2010/04/12(月) 23:41:50
君が期待しているようなバッファはない
93デフォルトの名無しさん:2010/04/13(火) 00:02:54
>>90
一般的にはバッファというのはカーネル内での制限値の様な物。 必要があったら
配分して溜め、規定値を超えたら残りは状況に応じた処理をする。 受信側と送信側は
全く別。 

recv側:
  udp 捨てる
  tcp 窓を0にして送信側をブロックする

send側
  sendのコールがブロックされる(バッファに空きが出来るまでコールが終了しない)
  nonblockingという場合はもうちょっと複雑。
   
バッファの容量はシステム設定やソケットのオプションで変更出来る。
94デフォルトの名無しさん:2010/04/13(火) 00:02:54
>>90
setsockopt
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..
95デフォルトの名無しさん:2010/04/13(火) 01:37:01
>>80
pthreadじゃ出来ないんですか?
ソケットじゃなくてpthreadの方の問題ならスレチになってしまいますが。
96デフォルトの名無しさん:2010/04/13(火) 07:22:45
>>93
UDPの場合、
sendやrecvをコールすることによって、バッファの中をとっていくわけですよ。
逆にコールしないと、recvではデータが上書きされていくような感じなのでしょうか?
sendはバッファに空きが出るまでコールが終了しないということですが、
その間、他の処理はできないというわけでしょうか?
だとしたら、sendのタイムアウト値みたいなものはないのでしょうか。
また、sendのバッファを一度クリアしてから、sendをコールするということはできますか?


97デフォルトの名無しさん:2010/04/13(火) 08:04:18
UDPであれ、TCPであれ、RAWであれ、1つのソケットで送受信ができるバッファが用意されるのでしょうか?
98デフォルトの名無しさん:2010/04/13(火) 08:22:19
1500バイトぐらいはあるんじゃね
99デフォルトの名無しさん:2010/04/13(火) 10:33:41
>>97
ソケットごとにな!
100デフォルトの名無しさん:2010/04/13(火) 13:12:04
ソケットにO_SYNCつけてみたけど、なにも変化なかった。
これって単に無視されてるだけ?
101デフォルトの名無しさん:2010/04/13(火) 14:34:05
変な質問繰り返してる奴って同一人物かな
102デフォルトの名無しさん:2010/04/13(火) 14:35:19
それ、2ch病の初期症状です
103デフォルトの名無しさん:2010/04/13(火) 16:01:54
>>101
>>82=>>100=俺です。
そんなに変な質問だったかな。
104デフォルトの名無しさん:2010/04/13(火) 18:34:22
とっても。
105デフォルトの名無しさん:2010/04/13(火) 21:26:50
どうやってソケットにO_SYNCつけたの?
106デフォルトの名無しさん:2010/04/13(火) 22:03:21
便乗質問させてください

以下のページのように、小さいデータをやり取りしたときに、
アプリケーションから send() した後、OS でバッファリング
されて一定時間送信されないということは他にもあるのでしょうか?

現在作成中のサーバー・クライアントシステムで、クライアントの
send() 後、サーバの非ブロッキング受信の発生が 200ms 程度、
遅れることがあり、困っています。
rcvbuf サイズを小さくしたところ、大分、ましになったのですが、
rcvbuf サイズは、受信の遅延に関係するものなのでしょうか?

設計上の問題 - Winsock と TCP 経由で小さなデータ セグメントを送信する
http://support.microsoft.com/kb/214397/ja
107デフォルトの名無しさん:2010/04/14(水) 04:49:16
モゲラのクロスドメインって何?
108デフォルトの名無しさん:2010/04/14(水) 05:44:49
nagle意外に遅延させるものってあったかなぁ?
109デフォルトの名無しさん:2010/04/14(水) 06:33:42
匙をnagle
110デフォルトの名無しさん:2010/04/14(水) 09:27:00
>>108
ないんじゃね?200msもドンピシャだし。
111デフォルトの名無しさん:2010/04/14(水) 09:51:26
>>108
Delayed ack (rfc2581)。 Nagelの方は標準のソケットオプションTCP_NODELAYで停められるけど
delayed ackは無いので停められない。 一度どうしても必要があったのでTCP_NODELACKという
オプションをLinuxカーネルに作り込んでむりやりdelayed ackを解除した。
11285:2010/04/14(水) 10:40:39
>>86-87
返事が遅れてすいません。

通信しているデータは10バイトとかそんなレベルです。
遅れて届くという言い方が曖昧でした。

例えば5秒間隔で3回通信すると、概ねクライアントには5秒間隔で3度にわけて届きますよね。
(通信データが十分小さければ)

これが、私の「非常に重い環境で起こるおかしな挙動」状態だと、10秒程度何も届かず、
その後5秒間隔で3回届くのです。

通信スレッドの仕組みですが、非常に簡単で

while(true)
{
Sleep(16);
recv(buffer);
output(timeGetTime(), buffer);
}

こんな感じです。(正確性は今回の実験では関係ないので、単にSleepです)

WireShark ありがとうございます。
こちらを使ってもテストしてみます
113デフォルトの名無しさん:2010/04/14(水) 11:18:44
>>111
TCP_QUICKACKじゃだめ?
114デフォルトの名無しさん:2010/04/14(水) 11:29:12
なんでSleepなんかしてんの?
115111:2010/04/14(水) 11:51:38
>>113
man 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個節約出来る。 
116デフォルトの名無しさん:2010/04/14(水) 13:23:12
>>106はWindows環境での話みたいだから遅延ACKはレジストリで
無効にできるでしょ。
ただ「rcvbuf サイズを小さくしたところ、大分、ましになった」
ってあるので遅延ACK問題じゃないような気がするけど。
いずれにせよ、こういうのはパケットログを取れば原因は大抵分かる。
117106:2010/04/14(水) 21:13:40
>>111, 113, 116
ありがとうございます。

遅延 ACK は、TcpAckFrequency のことだと思います。
とりあえず修正はしています。

ところで、アプリでデータ受信イベントが起こるのは、
受信後、送信側へ ACK を送信してからなのでしょうか?
118デフォルトの名無しさん:2010/04/14(水) 21:16:35
>>117
そうです
119デフォルトの名無しさん:2010/04/14(水) 21:45:26
某のTCP/IPスタックがおバカだから
120106:2010/04/14(水) 23:17:13
すいません。
理由がわからないので、解説サイト等があれば、
教えて頂けないでしょうか?
121デフォルトの名無しさん:2010/04/15(木) 00:02:08
受信が小さくなったからこまめにack飛ぶようになったとかじゃないの?
122デフォルトの名無しさん:2010/04/15(木) 06:59:06
定期的に送受信をUDPでおこなっているのですが、
(他から絶えずデータが送られて来ている中で)
稀に送信が一瞬とまり、再開後の最初のパケットの中をみると特定の所だけデータがおかしくなっています。

定期的に送信している中、データの送信が一瞬とまる原因って何か考えられますでしょうか?
123デフォルトの名無しさん:2010/04/15(木) 07:06:08
UDPだから
124デフォルトの名無しさん:2010/04/15(木) 07:06:15
UDPなら一瞬どころか何度止まっても文句言えんぞ
125デフォルトの名無しさん:2010/04/15(木) 07:09:36
NICのバッファが溢れて止まってるように見えるんだよ
UDPだからというわけではない
126デフォルトの名無しさん:2010/04/15(木) 07:10:57
>某のTCP/IPスタックがおバカだから
127デフォルトの名無しさん:2010/04/15(木) 07:13:31
linuxとかからping実行してみれ
128デフォルトの名無しさん:2010/04/15(木) 12:09:30
>>118って本当なの?
129デフォルトの名無しさん:2010/04/15(木) 18:02:08
>>128
本当です
130デフォルトの名無しさん:2010/04/15(木) 18:09:18
>>128
合ってるが、ACKはすぐに送信するかは判らない。
こちらの送信データが揃うまで待つかもしれない。
ただし届いた分のデータについてはアプリに渡してしまっても良い。
異常ケースとしてACKを送信しても相手に届かない場合もあるが、
それでもACKまでのデータは確定しているから、
その場合起こる再送信でもACK以前のデータは読み捨てられる。
131デフォルトの名無しさん:2010/04/15(木) 18:25:05
補足するとACK送信はこちらの送信データが無いケースでは、
タイムアウトか受信ウィンドウサイズの限界まで待つかもしれない。
TCP通信においてレスポンスを重視する場合、アプリケーション側で
定期的に相互にデータを送り続けてスタック上のバッファを吐き出させる
戦略を取った方が良い。
片方が無言だったりするとスタックのアルゴリズムまかせになる。
132デフォルトの名無しさん:2010/04/15(木) 20:28:58
>>130
「届いた分のデータについてはアプリに渡してしまっても良い」
筈なのに、(というか渡すべきでしょ?)WinSockではACKを送信
した後になってはじめてアプリに渡すと>>118は言ってると思うのだが。
これは信じ難いので。。。
本当にそんな馬鹿な作りになってるのか試したいんだけど今試せない。。。
133デフォルトの名無しさん:2010/04/15(木) 21:05:30
ここは納期なんてないから
いつまでも待ってやるから
試してからまた来い
134デフォルトの名無しさん:2010/04/15(木) 23:20:53
>>132
それは前後しても構わないし、「後か先か」に意味がまったく無い。
ACKが相手に届くかどうかなんて知ったこっちゃないので。
135デフォルトの名無しさん:2010/04/15(木) 23:29:10
>>125
周期的に送ってるのに稀に数回分も連続してとまるのでしょうか?
また復帰するのも謎です
送受信のバッファが別なら受信ならともかく送信までいかないのが気にかかります
136デフォルトの名無しさん:2010/04/15(木) 23:33:37
基本がなってない気がする
137デフォルトの名無しさん:2010/04/15(木) 23:45:35
>>135
ネットワークプログラミングで重要なのは問題の切り分け。 結局wiresharkは使い始めたの?
138132:2010/04/15(木) 23:53:04
>>133
はい。試しましたよ。
WindowsXP SP3でシステムのデフォルトの遅延ACKの設定にし、
クライアント側から1秒周期でパケットを送り、サーバ側で
パケット受信毎にミリ秒単位の受信時刻を表示するようにし
て、Wiresharkのログと付き合わせましたが、アプリには
ちゃんとデータパケット受信時に渡っていますよ。
遅延ACK送信時じゃなく。
そうじゃない環境(Windowsのバージョン?)があるんですか?


139デフォルトの名無しさん:2010/04/15(木) 23:54:40
>>122
TCPを使いなはれ
140デフォルトの名無しさん:2010/04/16(金) 00:20:38
>>136
基本より深い問題なきがしないこともないですが、
UDPだとソケット自体がおかしくなることもあるってことでしょうか?
141デフォルトの名無しさん:2010/04/16(金) 00:21:08
>>140
ありまくりやがります
142デフォルトの名無しさん:2010/04/16(金) 07:17:58
ソケットが途中でこわれる原因は何でしょうか?

スタック部分が途中でおかしくなったら、ソケット再起動してもかわらないですよね
143デフォルトの名無しさん:2010/04/16(金) 08:05:26
ソケットは壊れねーよ。
144デフォルトの名無しさん:2010/04/16(金) 08:12:46
同じことを書こうとしたら先人が・・・
145デフォルトの名無しさん:2010/04/16(金) 08:31:23
自分のプログラミングのまずさをスタックがおかしいせいに
する癖がついている奴がいるな。ソケットが壊れるってw
146デフォルトの名無しさん:2010/04/16(金) 08:38:48
基本がわかってないから深い問題のような気がするだけなのに
147デフォルトの名無しさん:2010/04/16(金) 13:18:25
>>142
壊れるのはパケット
148デフォルトの名無しさん:2010/04/16(金) 20:47:59
ソケットが壊れるなんてちょっとないよね?と思ってたのに
>>141が壊れるよと言うもんだから
149デフォルトの名無しさん:2010/04/16(金) 20:58:55
最近打ち合わせでは分かり切ったことは飛ばして話を進めているのに
知識として持っててあたりまえのことを質問する馬鹿が増えた
150デフォルトの名無しさん:2010/04/16(金) 21:44:32
http://pc12.2ch.net/test/read.cgi/tech/1268699491/483
コピペ化する予定ですか?
151デフォルトの名無しさん:2010/04/16(金) 23:54:05
ソケットは本当に壊れることがないのだろうか
152デフォルトの名無しさん:2010/04/17(土) 01:18:25
>>97
それは実装依存
プロトコルに違反しないならなんでもOK

153デフォルトの名無しさん:2010/04/17(土) 06:14:38
>>151
普通はsocketが壊れるより先にまずpingが折れると思う
154デフォルトの名無しさん:2010/04/17(土) 07:21:38
pingがおれるとはどういうことでしょうか?
155デフォルトの名無しさん:2010/04/17(土) 07:38:46
CPUだろ
pinとpingをかけたか、素で間違えているか
156デフォルトの名無しさん:2010/04/17(土) 09:06:35
ネットワークプログラマならマイコンのIOピンを自分でON/OFFして
シリアル通信くらいしたことないとな
157デフォルトの名無しさん:2010/04/17(土) 09:10:06
TCP/IPじゃなくてシリアルですか
158デフォルトの名無しさん:2010/04/17(土) 17:25:14
その辺を混同して設計できるのがソケットプログラミングの強みだろ
159デフォルトの名無しさん:2010/04/18(日) 01:24:01
>>158
kwsk
160デフォルトの名無しさん:2010/04/18(日) 01:46:54
でもソケットのスレじゃなくてネットワークプログラミングのスレなんだよね
161デフォルトの名無しさん:2010/04/18(日) 02:04:23
惘網綱綳線縲織
162デフォルトの名無しさん:2010/04/18(日) 12:29:02
GET / POST で HTTP リクエストするけど
相手のサーバによっては拒否される?
163デフォルトの名無しさん:2010/04/18(日) 12:33:10
どっちかというと
クライアントによっては拒否される
が正しいと思う
164デフォルトの名無しさん:2010/04/21(水) 06:24:24
受信割り込みを一時的に受付ないようにするにはどうすればよいのでしょうか?
165デフォルトの名無しさん:2010/04/21(水) 14:01:09
AcceptExなどのmswsock.dllに実装されている関数を、
WSAIoctlで取得した関数ポインタで呼び出すことが推奨されていると以下のページで書かれています。
ttp://eternalwindows.jp/network/winsock/winsock06c.html

実際にAcceptExを直接呼び出しても表面上は特に問題なく動作しているように思えますが、
どのような問題が発生する可能性があるのでしょうか?
御存知の方は教えて頂けると幸いです。
166デフォルトの名無しさん:2010/04/21(水) 14:16:05
>>165
差し換わるかもしれんじゃん。
167デフォルトの名無しさん:2010/04/21(水) 14:30:55
>>165
レス有り難うございます。
差し換わるというのは、コンパイル時に直接記述されたAcceptExのアドレスが、
mswsock.dllの変更やバージョン違いによってアドレスが変わってしまうという解釈で宜しいのでしょうか?
dllに関しての知識が不足してるので、見当違いでしたら申し訳無いです。
168デフォルトの名無しさん:2010/04/21(水) 14:32:26
すいません、レス番ミスです。
>>167 >>166
169デフォルトの名無しさん:2010/04/21(水) 14:48:10
>>167
mswsock.dllじゃなくなるかも。という事だろう。
170デフォルトの名無しさん:2010/04/21(水) 15:18:30
>>169
そういうことでしたか。
教えてくださった方どうも有り難うございました。
171デフォルトの名無しさん:2010/04/21(水) 19:56:30
recvfromって受信割り込みで動くのでしょうか?
デバイスドライバへの割り込みがきたあとに、recvfromをすることによって
データをとれるのでしょうか?
デバイスドライバへの割り込みを禁止してしまうと、データはrecvfromでとれないということ?
172デフォルトの名無しさん:2010/04/21(水) 20:01:01
173デフォルトの名無しさん:2010/04/24(土) 02:39:32
winsockで、アクセプトしてるネットワークカードの
127.0.0.1でないIPを取得する方法はありますか?
174デフォルトの名無しさん:2010/04/24(土) 02:52:22
>>173
アクセプトしているなら接続元のIPを取得できる
175デフォルトの名無しさん:2010/04/24(土) 11:29:51
>>173
getsockname
176デフォルトの名無しさん:2010/04/24(土) 12:32:45
IPってゆうな。クズ。
177デフォルトの名無しさん:2010/04/24(土) 16:44:22
>>176
っ□
178デフォルトの名無しさん:2010/04/24(土) 20:24:54
IPが駄目ならXPで、それでも駄目なら申し訳ないが:Pになる
179デフォルトの名無しさん:2010/04/29(木) 20:51:59
ゆうな、なんて書くなよ恥ずかしい
180デフォルトの名無しさん:2010/04/30(金) 16:02:08
ゆうなってゆうよ
はずかしがったらいかん
181デフォルトの名無しさん:2010/04/30(金) 19:33:45
Windows XPのTCPをオリジナルのTCPに変更したいのだが、
WinSockとかWinPcapとか使えば可能でしょうか?
182デフォルトの名無しさん:2010/04/30(金) 19:47:31
は?
183 ◆0uxK91AxII :2010/04/30(金) 19:50:16
不可能。
184デフォルトの名無しさん:2010/04/30(金) 20:30:06
可能。
185181:2010/04/30(金) 21:25:22
Winsockの呼び出しをフックするか、
winsock.dllのラッパーを作れば良さそうですね。
ありがとうございました。
186デフォルトの名無しさん:2010/04/30(金) 21:26:57
ネトゲに割り込むのかな?
187デフォルトの名無しさん:2010/05/02(日) 10:25:54
質問です。

WinSockで自分のPCのグローバルIPアドレスを取得するには
どうすればいいでしょうか?
188デフォルトの名無しさん:2010/05/02(日) 10:41:13
189デフォルトの名無しさん:2010/05/02(日) 11:52:21
>>187
一般的には、UPnPを使うことになると思います。
winsockでゴリゴリ書いてももちろんかまわないのですが、COMインターフェースが
用意されているので使ってみてはどうでしょうか?
190デフォルトの名無しさん:2010/05/03(月) 09:25:03
NAT越しに通信してるときに
NAT後に利用している送信元ポート番号を知る方法ない?
通信相手に教えてもらう以外で。
あったら教えてください。
191デフォルトの名無しさん:2010/05/03(月) 10:03:19
ない、プロトコルを学ぶべき
192デフォルトの名無しさん:2010/05/03(月) 10:11:05
>>191
プロトコルから外れた標準外の方法でもいいんだけど。
まぁ確かにライブラリを使うってだけの話じゃないから、
難しいってのはわかるよ。
193デフォルトの名無しさん:2010/05/03(月) 10:46:14
横からですが、それできちゃったらNATの意味ないんじゃ・・・・
クラッカーとかはどうか知らんけど・・
194デフォルトの名無しさん:2010/05/03(月) 12:30:20
NATの内側同士でP2Pするソフトがあるから
それのソース見て勉強しなさい
195デフォルトの名無しさん:2010/05/03(月) 20:48:35
Winsock2の質問ですが、
ソケットエラーが返ってきた場合でもclosesocket()は必要でしたっけ?
196デフォルトの名無しさん:2010/05/03(月) 21:23:21
>>195
ソケット作成時以外なら要るだろう。
197デフォルトの名無しさん:2010/05/04(火) 02:28:16
>>196
ありがとうございました。
198デフォルトの名無しさん:2010/05/04(火) 07:57:06
>>193
知られちゃダメなNATの意味ってなんだよ。UPnPなんか許せない死ねという主張か?
199デフォルトの名無しさん:2010/05/04(火) 21:21:47
>>190
NATトラバーサルとかそういうこと?
200デフォルトの名無しさん:2010/05/06(木) 19:01:45
ネットワークについての質問です。
皆さんの力をお貸しください。
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1440449509
201デフォルトの名無しさん:2010/05/06(木) 19:28:45
>>200
普通に共有フォルダでいいだろw
202デフォルトの名無しさん:2010/05/06(木) 21:01:01
>パソコン部の高校での文化祭で展示したいものがあります。
>それが、パソコン2台を接続してハードディスクなどを共有することです。

どこの国の人だよ
203デフォルトの名無しさん:2010/05/06(木) 21:57:30
>>202
パソコンの中、つまり仮想世界なんです

仮想世界の高校での文化祭で展示したいものがあります。
それが、パソコン2台を接続してハードディスクなどを共有することです。
パソコン2台とは1台は仮想世界のパソコンでもう一台は現実世界のパソコンです
204デフォルトの名無しさん:2010/05/06(木) 22:25:18
一部といわず、全部仮想世界の出来事にすればいい
死んでるように見えますが、仮想世界では生きてます
205デフォルトの名無しさん:2010/05/06(木) 22:40:13
matrixの世界だな

君が現実と思っている世界は実は仮想世界なんだ
神の創った仮想世界、それが君達の世界なのだよ
206デフォルトの名無しさん:2010/05/06(木) 22:40:17
今度はどこの漫画なんだろう。
最近チェックしてないからよく分からん。
207デフォルトの名無しさん:2010/05/07(金) 00:20:08
                     _                 (  信.  信   余   )
                      ,r'⌒  `ヽ             )  じ  じ  は  (
                  ( (  ,.  ┴─ .         (   た   ぬ      丿
                     ゝ  ´   /     \        )  く           (
                       「     厂ッヘ ̄\ ',      (    な         )
                  リ    ./  ,==≧v ,ィ}       ノ   い          /
                   /    {  〃   j 「`'}      \             ノ
                     /    .|  r--、_ イ }       ゝ─っ  .-─'′
                    ,イ      | 彳 ̄` ‐.マ}ノ        --==彡 ' 
               r'´ :l  \  .| {_,,_  //
           _/   ゝ.   \\    `´/
        / ̄            ミ≧rrrイ
       /                 ヾツ\
      /         \                \
    /           \                ノ. \
. /        .-‐===キミ、_____∠彡=≧
. '       / ̄ヽ         ∨://///V///// /  ̄\
       /    |  / ̄ ̄ ̄∨////////// /    \
     /      |  / r──-く^V://///// //      ヘ
208デフォルトの名無しさん:2010/05/07(金) 10:40:10
素朴な疑問なのですが、Winsockの
WSAAsync
は何の略なのでしょうか?

WSはWinSockな気がしますが、AAsyncとは…?
syncはsynchronizeでしょうが、それならAASyncとなりそうなもの。
そもそもAAって?
209デフォルトの名無しさん:2010/05/07(金) 10:51:59
WSA: Windows Sockets API
210デフォルトの名無しさん:2010/05/07(金) 10:54:07
WinSockApiASynchronous かな
211デフォルトの名無しさん:2010/05/07(金) 10:55:57
WinSockAPI Async
212デフォルトの名無しさん:2010/05/07(金) 13:07:02
ASync のAは一体・・・
213デフォルトの名無しさん:2010/05/07(金) 13:22:25
アシンクロナスだろ
非同期っつー意味
214デフォルトの名無しさん:2010/05/07(金) 13:50:43
おお、Asynchronous で非同期って意味か
215デフォルトの名無しさん:2010/05/07(金) 13:59:30
うわあ、ネタじゃ無かったのか。
216デフォルトの名無しさん:2010/05/07(金) 14:21:14
Sを大文字にしてる香具師は馬鹿
217デフォルトの名無しさん:2010/05/07(金) 14:22:20
>>216とか>>216とか>>216とか
の事か?
218デフォルトの名無しさん:2010/05/07(金) 15:18:27
質問よろしいでしょうか
gethostbynameは即座に処理が返ってくるとは限らないので、なるべく
WSAAsyncGetHostByName を使った方が良い。

ということだったので使ってみているのですが、
実験として「名前解決に数秒かかる」状態を試してみたいと考えています。

どのようなアドレスを指定すれば、そのような挙動になるでしょうか?
・存在しないアドレスを指定してみる
・LANケーブルをひっこぬいた上で、存在するアドレスを指定してみる
・LANケーブルをひっこぬいた上で、存在しないアドレスを指定してみる
と試してみましたが、どれも1秒もたたないうちに「失敗」となりました。
219デフォルトの名無しさん:2010/05/07(金) 15:32:39
壊れた(Timeout長めにポートフィルタされた)DNSに登録されているドメインのFQDNを指定する
220デフォルトの名無しさん:2010/05/07(金) 15:38:35
>>218
存在しないLAN外のアドレスを指定するといいよ
221デフォルトの名無しさん:2010/05/07(金) 15:47:37
>>219
となると、自前でDNSサーバーを立てなければなりませんね。
仕組みは知っているものの、気軽に立てられるものなのかなどはサッパリです。今ぐぐって勉強し始めました

>>220
存在しないアドレス(LAN外です)を指定してみたのですが、1秒立たずに失敗で返ってきました。
私自身も、仕組み上長い間さまよってくれると期待していたのですが・・・。

試してみたアドレスは以下の通りです。キーボードをめちゃくちゃに打ったものです。
www.fadbiouhfewrw.com
プログラムの間違いも考え、試しにブラウザでも開いてみようとしましたが、こちらも1秒立たずに
「存在しないサーバーです」となりました。
222デフォルトの名無しさん:2010/05/07(金) 15:49:51
>>218
実験するPCのファイアウォール設定でTCP53行きパケットを破棄しておいて実行する
(REJECTじゃなくてDROPね)
223デフォルトの名無しさん:2010/05/07(金) 15:54:22
LAN内の存在しないアドレスをネームサーバとして設定する。
224デフォルトの名無しさん:2010/05/07(金) 15:58:49
>>223
10秒くらい稼げるね
225デフォルトの名無しさん:2010/05/07(金) 16:08:34
>>222-224
アイデアありがとうございます。

>>223
こちらの手法で試したところ、10秒程度の時間無反応にすることができました。
ありがとうございます。

他の人がやる時のために記述しておきます。WindowsXPです。

・コンパネで「ネットワーク接続」
・「ローカルエリア接続」を選択して開く(接続の仕方によって、多分名前違うでしょう)
・プロパティ
・インターネットプロトコル(TCP/IP)を選択し、プロパティ
・「次のDNSサーバーのアドレスを使う」をONにし、優先DNSサーバーに存在しないローカルIPアドレスを割り振って「OK」ボタン
・ウインドウが1つ閉じるので、あらためてこちらも「OK」ボタンを押す(押さないとまだ設定が反映されていませんでした)

この状態で実験。
226デフォルトの名無しさん:2010/05/07(金) 16:24:44
やっぱさ、任意の通信障害を起こせるHUBってほしいよね。
227デフォルトの名無しさん:2010/05/07(金) 17:02:57
>>226
dummynet
228デフォルトの名無しさん:2010/05/07(金) 17:06:08
linuxならnetem、freebsdならaltq使えば、大抵のエラーは起こせるだろ。
fcs壊すようなL2エラーとか、ワイヤレート欲しいとかなら専用ハードになるけど。
229デフォルトの名無しさん:2010/05/07(金) 17:47:27
通信遅延とかそういう現象も全部試験したいなら、GtrcNETという装置があるぞ
230デフォルトの名無しさん:2010/05/07(金) 17:59:43
>>229
netemやdummynetは遅延出来るよ.
231デフォルトの名無しさん:2010/05/07(金) 18:31:39
長いLANケーブル使えばいいじゃん
232デフォルトの名無しさん:2010/05/07(金) 18:33:33
箱ごと何巻も繋いでるのを見たことがあるな
233デフォルトの名無しさん:2010/05/07(金) 18:41:39
まずブラジルに親戚を作ってだな・・・
234デフォルトの名無しさん:2010/05/07(金) 18:44:15
意外と近くて遠い国は北朝鮮とか
235デフォルトの名無しさん:2010/05/07(金) 20:56:51
相談よろしいでしょうか。

gethostbynameに相当する関数は、
・gehostbyname
・getaddrinfo
・WSAAsyncGetHostByName
の3つだと思うのですが、少し悩んでいます。

と言いますのも
SOCKET SocketConnect(address, port, timeout);
こんな感じの関数を作りたいのですが、上記3つはどれもタイムアウトを設定する術が無さそうなのです。

connectは
::WSAEventSelect(socket, hEvent, FD_CONNECT);
こうすることで、タイムアウト付きで呼び出せているのですが…。

何か良い方法はありますでしょうか?
(WSAAsyncを使うのが正道だとは思うのですが…)
236デフォルトの名無しさん:2010/05/07(金) 22:28:58
別スレッドでgetaddrinfoを使って問い合わせる。 MSDNでも推奨

http://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.
237デフォルトの名無しさん:2010/05/08(土) 23:42:08
サーバー側のWinsockプログラムで質問です。
特定のIPからのアクセスを「成立させずに却下する」ことはできないでしょうか?

現在はとりあえず成立させたあと、IPを調べ、NGユーザーなら即座にshutdown & closesocket しています。
つまり、ユーザー側はconnectに「成功」し、即座に切断されます。

ここをconnectにそもそも失敗させてやりたいのです。
238デフォルトの名無しさん:2010/05/08(土) 23:46:37
そんなもんスイッチにやらせりゃいいじゃん
239デフォルトの名無しさん:2010/05/08(土) 23:55:42
スイッチ?とはなんでしょう?
240デフォルトの名無しさん:2010/05/09(日) 00:00:52
ははは
ご冗談を
241デフォルトの名無しさん:2010/05/09(日) 00:12:23
netsh
242デフォルトの名無しさん:2010/05/09(日) 00:28:39
>>239
ルーター、サーバーのファイアウォールでしっしっ
243デフォルトの名無しさん:2010/05/09(日) 00:34:06
アプリケーションでやるのが目的となります。
何か方法があれば教えていただけますでしょうか。
244デフォルトの名無しさん:2010/05/09(日) 00:38:07
FWもアプリケーション
245デフォルトの名無しさん:2010/05/09(日) 00:55:14
すげえ揚げ足取り
246デフォルトの名無しさん:2010/05/09(日) 03:00:09
IPってゆうな。クズ。
247デフォルトの名無しさん:2010/05/09(日) 05:25:01
>>243
acceptする前にackを返すので無理です。
SYN FLOODがなぜ未だに有効な攻撃手段なのかを考えればわかると思いますが、
アプリ側でやれる事といえばせいぜいBACKLOG数を調整するくらいです。
248デフォルトの名無しさん:2010/05/09(日) 09:02:42
何度このリンクを貼ればいいのか
http://ruffnex.oc.to/kenji/text/fire_a/
249デフォルトの名無しさん:2010/05/09(日) 13:01:35
何回目?
250デフォルトの名無しさん:2010/05/09(日) 14:06:19
accept拒否はWSAAcceptのlpfnConditionを使えば出来るんじゃないの?
251デフォルトの名無しさん:2010/05/09(日) 14:30:52
>>237
可能。winsock限定になるが。
MSDNで「SO_CONDITIONAL_ACCEPT」と「WSAAccept」を参照すべし。
252デフォルトの名無しさん:2010/05/09(日) 15:43:20
>>249
もう二度目だよ
いい加減にしてほしい
253デフォルトの名無しさん:2010/05/09(日) 17:37:11
>>248
UNIX版も作って!
254デフォルトの名無しさん:2010/05/09(日) 22:22:10
>250-251
ありがとうございました。
無事できました。
しかしこれ、情報少ないですね。
気になる点としては

SO_CONDITIONAL_ACCEPT ソケット オプションを使用して通信するプログラムを使用すると、ネットワークのパフォーマンスが低下する
ttp://support.microsoft.com/kb/328264/ja

↑これと、後は「CF_REJECT」を返しても2〜3回程度WSAAcceptが反応することでしょうか。
断ってるんだからあきらめろ!
と言いたいところですが、断られたことが相手に通じるまでの間に、再要求が何度も来ているという感じでしょうか?
(もちろん、クライアントは1度のconnectしか呼んでいません)
255デフォルトの名無しさん:2010/05/10(月) 15:25:50
>>254
KBの328264についてはXP Service Pack 2で修正済みとあるよ。
ただそれでもSO_CONDITIONAL_ACCEPTを使わない場合と比較すると
一定時間内に受け付け可能な接続数とかは低下するだろうけど。

>「CF_REJECT」を返しても2〜3回程度WSAAcceptが反応することでしょうか。
えっ?マジで?
サーバからちゃんとRST出てる?
256デフォルトの名無しさん:2010/05/10(月) 17:30:07
>>255
レスありがとうございます。

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は失敗します。
257デフォルトの名無しさん:2010/05/10(月) 17:44:40
反応というのはprintf("%d\n", user);の出力があるという事か?
その時のuserの値は?
258デフォルトの名無しさん:2010/05/10(月) 18:06:34
>>257
はい、printfが2〜3回反応します。ほとんどの場合3回です。
値は -1なのでINVALID_SOCKETです。
259デフォルトの名無しさん:2010/05/10(月) 22:59:12
>>256
調べたけどWinsockではSYNに対するRSTはクライアント側で
無視されるみたいですね。>>248の方が良いかも。
260デフォルトの名無しさん:2010/05/10(月) 23:02:27
まあ>>248でもクライアントは3回SYN出すわけだけど。
261デフォルトの名無しさん:2010/05/11(火) 02:35:32
>>254
3回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
262デフォルトの名無しさん:2010/05/11(火) 09:16:25
とりあえず、正常な動作だということで安心しました
細かくありがとうございました。

以後同じことをやる人は、
setsockopt(sck, SOL_SOCKET, SO_CONDITIONAL_ACCEPT, (PSTR)&flg, sizeof(flg));
は、listenの前にやらなければならないことに注意してください。

マニュアルにもかなりさらっと書いてあって、最初見逃して頭ひねりましたので
263デフォルトの名無しさん:2010/05/11(火) 10:35:07
こういう質問者ばかりだと、答える側も嬉しいのう
264デフォルトの名無しさん:2010/05/11(火) 17:43:34
すいません、また迷い込んでしまったもので相談させてください。
262です。

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自体を失敗させたい」から始めた調査なのですが…。
265デフォルトの名無しさん:2010/05/11(火) 19:57:30
あらかじめ特定のIPがリストアップされてるなら
フィルタしてしまうのが一番良いと思うんだが
266デフォルトの名無しさん:2010/05/11(火) 20:09:35
やはり>>248だな
267デフォルトの名無しさん:2010/05/11(火) 21:07:00
IPってゆうな
これでいいですか? >いつもの人
268デフォルトの名無しさん:2010/05/11(火) 22:07:26
文脈で判るものにいちいち文句たれるのは異常者
269デフォルトの名無しさん:2010/05/11(火) 22:50:08
ホームページじゃないのにホームページとかな
270デフォルトの名無しさん:2010/05/11(火) 23:17:49
>>264
例えば受け入れ可否を判断するのにホスト名文字列とパターンマッチ
しなけりゃいけない様な場合とかフィルタするのにDNS照会が必要な場合は
「一旦は接続を受け入れ、その後身元調査。許可されたら送受信を行う。許可できない身元だったらclosesocketする」
の方が何かと安全だと思いますよ。
それとも他に何か良い方法があるのだろうか?
271デフォルトの名無しさん:2010/05/11(火) 23:34:52
IPと言うなと言ってるやつが何を意図してるのかさっぱりわからんので
解説よろしこ
272デフォルトの名無しさん:2010/05/11(火) 23:41:42
IPはインターネットプロトコル。
IPアドレスと言え。
273デフォルトの名無しさん:2010/05/11(火) 23:42:00
IPってゆうな。クズ。
274デフォルトの名無しさん:2010/05/11(火) 23:52:08
      ,―ヽ_(((((_、―
   ,/  ノ       ヽ  ~\
  /   ノ   IPA    ヽ   ~\
/   ノ           ヽ、  `ヽ
|    ノ / ̄\   / ̄~ヽ ヽ    i
|   ノ              |  ノ
\  |  <●>  <●>  (  )
 \ |      | |       i /
    |      /  ヽ       レ
   i     (●_●)      /  
    i、    ,-――-、   ・ /
    i、  <(EEEEE)> ∵/    どういたしまして
      i、  \   ./  /
       \   ーー   ,ノ       
  ,,.....イ.ヽヽ、ー-―一ノ゙-、.
  :   |  '; \_____ ノ.| ヽ i
      |  \/゙(__)\,|  i |
275デフォルトの名無しさん:2010/05/12(水) 00:29:41
>>272
なるほど。
友達とか仕事やらで
関わりあいたくないタイプだということは分かった。
276デフォルトの名無しさん:2010/05/12(水) 09:02:05
>>265
*.dion.jp とかでNG設定する機能を作りたいものでして

>>270
CF_DEFER が「順番待ちの列の末尾に並ばせる」という機能であれば、現状の仕組み(>>256)でいけそうなのです。
DNS照会中に、他ユーザーまで待たされていまうのが問題なので。
「何かと安全」ということは、CF_?で拒否や許可をする方式は、何か危険性がありそうなのでしょうか?
277デフォルトの名無しさん:2010/05/12(水) 11:03:42
>>276
危険というかCF_DEFER使った場合のシステムの動きがよく分からないから。
>>264
>しかし、次のWSAAcceptでは、先ほどCF_DEFERを返したはずの接続要求をまた取得してしまいました。
>2つ目の接続要求が来ている状態にも関わらずです。
ということは一旦CF_DEFERを返したらその接続要求にCF_ACCEPTかCF_REJECT
を返すまで他の接続は受け付けられないようになっているんじゃないのか?
と思えるし、その状態で1つ目の相手がリトライした場合どうなるのか?とか。

うまく制御出来たら教えてください。
278デフォルトの名無しさん:2010/05/12(水) 11:39:34
知っているわけでも、アドバイスできるわけでもないなら、質問者や場を混乱させるなよ・・・
279デフォルトの名無しさん:2010/05/12(水) 13:04:44
解決法は知っているがIPと呼ぶ質問者には教えない事にしている。
280デフォルトの名無しさん:2010/05/12(水) 16:37:34
>>279
よろしくお願いします。

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自体を失敗させたい」から始めた調査なのですが…。
281デフォルトの名無しさん:2010/05/12(水) 16:41:26
unixならそういう場合preforkしてacceptを並列で待てば終わりなんだが、
windowsはスレッドorプロセス毎に並列でacceptってできないんだっけ?
282デフォルトの名無しさん:2010/05/12(水) 17:00:25
>>281
そもそもunixならaccept以前にSYN/ACK返す方法(一旦受け入れる)しかないでしょ。
283デフォルトの名無しさん:2010/05/12(水) 17:03:21
>>282
方法が無いわけではない
284デフォルトの名無しさん:2010/05/12(水) 19:02:26
またおまえか
285デフォルトの名無しさん:2010/05/12(水) 19:12:22
>>280
IPアドレスと正しく呼んだので教えよう。

while (select()) {
if (fd_isset(listening_socket)) {
CreateThread(accept_func, listening_socket);
}
}
286デフォルトの名無しさん:2010/05/12(水) 20:41:06
>>285
試してみましたが、スレッド側で「CF_REJECTかCF_ACCEPTを返すWSAAccept」が制御を返さない限り、
select()で「次のコネクト要求来たよ」という反応が出ないようです。

>>256でいうCheckThreadの中で::Sleep(10000);として試してみました。
287デフォルトの名無しさん:2010/05/12(水) 21:05:09
やっぱりか。
288デフォルトの名無しさん:2010/05/13(木) 02:30:26
XpだとCF_REJECTしても、REFUSEではなく接続後即切断。
289デフォルトの名無しさん:2010/05/13(木) 10:16:11
>>286
そういう挙動なら、SOCK_RAWで監視するスレッドで先読みしておけば少しは改善する。
時間のかかるのが先に到着してしまったなら、回避出来ないけど。

>>288は嘘だった。
290デフォルトの名無しさん:2010/05/13(木) 10:42:44
時間のかかるのが来た時に、それの影響を受けないようにしたいってのが質問の肝なんじゃね?
291デフォルトの名無しさん:2010/05/13(木) 13:21:45
プロトコルスタックレベルの待ち行列のようだから、プロセス分けてもダメだろうな。
292デフォルトの名無しさん:2010/05/16(日) 21:11:09
結局のところ、コネクト許可してからはじくしかなさそうだね
293デフォルトの名無しさん:2010/05/19(水) 21:47:01
linux上で、HTTP通信の内容をすべてチェックしてパケットを通過させる、させないを制御したいんですが
なにを使って実装するのが一番簡単ですか?
294デフォルトの名無しさん:2010/05/19(水) 21:53:35
例をあげよ
295293:2010/05/19(水) 22:15:37
例えば、URLに特定の文字列が含まれるリクエストがきた場合は、
そのパケットを破棄して、かわりにエラーを返すといったことをしたいです。

なので、ネットワーク上を流れるすべてのHTTPのパケットを監視し
内容をチェックして、制限にひっかかれば破棄するようなプログラムを作り
常駐させることを考えています。
296デフォルトの名無しさん:2010/05/19(水) 22:27:13
>>295
ローカルプロキシとは違うの?
297293:2010/05/19(水) 23:15:50
やりたいことは似ていますが、プロキシを間に挟むことによる制限が都合よくないので
どちらかというとiptablesみたいなものが近いです。
298デフォルトの名無しさん:2010/05/19(水) 23:24:34
例をあげろって言ってんだろボケ
299デフォルトの名無しさん:2010/05/19(水) 23:55:33
>>297
プロキシを間に挟むことによる制限って例えばなに?
300デフォルトの名無しさん:2010/05/20(木) 05:14:54
sctpって使ってる? ふと気がつくと大抵のホストに実装がのっている感じ。 
ためしに簡単なechoサーバー/クライアントの組み合わせでソケットの生成を
socket(AF_INET, SOCK_STREAM,IPPROTO_SCTP)に変えただけでLinux上で
普通に動いた。

tcp上でメッセージの切れ目を探す手間が省けるかなというだけの軽い気持ち
なのだが、実際に使われているのか気になる。
301デフォルトの名無しさん:2010/05/20(木) 08:20:26
302デフォルトの名無しさん:2010/05/20(木) 18:06:43
>>300
現状TCP/UDPでインフラが作られちゃってるから、
SCTPで動くものは非常にすくない。
使ってるのは大抵その人のオナニー。

ただ、遠い未来、SCTPに移行するのは間違いないと個人的には思ってて
色々勉強はしてる。
303デフォルトの名無しさん:2010/05/20(木) 20:33:32
SCTPの特徴を三行で教えてくだしあ
304デフォルトの名無しさん:2010/05/20(木) 20:57:41
305デフォルトの名無しさん:2010/05/20(木) 23:16:07
ルーターは対応してるの?
306デフォルトの名無しさん:2010/05/20(木) 23:39:42
>>305
第3層プロトコルだから通過する限りは別にIPだから必要なし。 ファイアーウォールや
帯域管理なんかはどうだろうね。 

とりあえずググるとIOSのスタック自体はSCTPに対応してるようだ
http://www.cisco.com/en/US/docs/ios/12_2t/12_2t8/feature/guide/ft_sctp2.html
307デフォルトの名無しさん:2010/05/20(木) 23:47:57
>>302
> SCTPで動くものは非常にすくない。

今のところメジャー(?)なのはDiameterぐらいですかね。 しかしシステム内
通信ではかなり使われているんじゃないかと思います。 次のプロジェクトで
このミドルウェアを使おうかと思ってるんですけど
http://www.cs.wustl.edu/~schmidt/ACE.html

中にロッキード・マーティンによって書かれたSCTPソケットのサポートが
寄付されてました。
308デフォルトの名無しさん: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を使うとともに、別スレッドでユーザーたちを監視するような形にすると、今度はスレッド間の排他処理で実装が少し複雑になります。

「定期的に●●する」ようなサーバーを立てる場合、どんな方式でやるのが望ましいのでしょうか?
309デフォルトの名無しさん:2010/05/21(金) 13:24:20
タイマー抜きでポーリングするとCPUパワーを食いつぶすからするなってことじゃない?
チャットならミリ秒で応答する必要もないので数百ミリ秒程度間隔をあけてポーリングすれば大丈夫だと思うけど
310デフォルトの名無しさん:2010/05/21(金) 13:59:08
>>309
すいません、確かにポーリングが怒られているのは
「recvが、期待したデータ量をよこすまで延々ポーリング」
のような、それブロッキングでやれよといった内容についてのようです。

「サーバースレッド自体が永久ループ、その時非ブロッキングソケットを使うこと」について怒っているわけではないようですね。

どうにも非ブロッキングソケットはあまり良い顔をされていない気がするので、使う時「本当に使っていいのかな?」と迷ってしまいます。
311デフォルトの名無しさん:2010/05/21(金) 14:06:32
非ブロッキングソケットは御法度だろ
WSAAsync使え
312デフォルトの名無しさん:2010/05/21(金) 14:18:28
APIのほうで非推奨とかにされてないなら
あとはもう宗教だろw
313デフォルトの名無しさん:2010/05/21(金) 14:26:20
動けばよい
314デフォルトの名無しさん:2010/05/21(金) 14:27:47
非ブロッキングがご法度って、何で?
非ブロッキング+select()って、ブロッキングの次にポータブルだから
何だかんだで良く使われてると思うけど
315デフォルトの名無しさん:2010/05/21(金) 14:28:25
おれselectでグルグルしてるけど
今まで苦情言われたこと無いよ
316デフォルトの名無しさん:2010/05/21(金) 14:41:33
サーバーのメインループでrecv処理なんてしたら、
誰かが高速で大量のデータ送ってきた際に、その処理に時間食われて
肝心のメインループが処理落ちしちまうだろ

recvは別スレッドでやるのが当たり前
317デフォルトの名無しさん:2010/05/21(金) 15:01:13
>>316
効率上の話か
効率が再重要ならWSAAsyncSelect()も勿論ダメで
IOCP + Overlapped I/Oしかないんじゃね
318デフォルトの名無しさん:2010/05/21(金) 15:04:55
>>317
極論すぎるんだよお前は
319デフォルトの名無しさん:2010/05/21(金) 15:29:35
>>308
その遅延機能実装するなら、同じユーザの発言なら遅延するような
アダプタを出力前にかませればよいのであって。ソケットからどう
読むかなんてどうでも良いのでは?
320デフォルトの名無しさん:2010/05/21(金) 15:37:43
>>318
いや、裏タスクは当然裏でやるとして
select, accept, recvを同一のスレッドで走らせると処理落ちすぎるぐらいの
サーバなんだろ?
IOCPしか無いと思うけど
321デフォルトの名無しさん:2010/05/21(金) 15:40:51
CPUが100%から落ちなくてCPUクーラーがぶんまわってウゼエ
ってソフトがあった
322デフォルトの名無しさん:2010/05/21(金) 15:55:50
WMPですね
323デフォルトの名無しさん:2010/05/21(金) 15:57:44
要はWinSock(Windowsのソケット実装)がヘボいんだよ。
まあBSDモドキがMSの目的だったからな。
Windowsでまともなネットワークプログラミングをしたかったら、
モドキなWinSockじゃなくMS謹製のWindows APIを使えってことだ。
324デフォルトの名無しさん:2010/05/21(金) 17:29:21
>>319が意味不明なんだが、誰か説明してくれ
325デフォルトの名無しさん:2010/05/21(金) 18:22:50
>>308
下手の考え休むに似たり
case毎に適した方法でやるのがいい、一般的な解なんてない
326デフォルトの名無しさん:2010/05/22(土) 07:49:22
>>316
まあいいんじゃないの?
327デフォルトの名無しさん:2010/05/22(土) 14:08:35
>>323
WinSockでも、WinSock上でも無いNetwork APIって何?
328デフォルトの名無しさん:2010/05/22(土) 14:58:14
>>327
こまかいな、意味分かるんだからいいだろ。
お前友達いないだろ?
329デフォルトの名無しさん:2010/05/22(土) 15:00:01
>>328
プログラマって細かい性格じゃないとやっていけないと思うので、
これは職業病だと思って放置すれば良いと思いますよ。
330デフォルトの名無しさん:2010/05/22(土) 15:02:32
いや、328はよくない
絶対に許さない
331デフォルトの名無しさん:2010/05/22(土) 15:04:19
>>328
いや、俺も全く意味が分からないぞ

Winsock2使わず
> Windowsでまともなネットワークプログラミングをしたかったら、
って無理だろ

一体何が言いたいの?
332デフォルトの名無しさん:2010/05/22(土) 15:50:56
>>328
「Windowsでまともなネットワークプログラミングが出来る
WinsockじゃないMS謹製のWindows API」について是非教えて頂きたい。
あなたは凄く詳しいようだから。
333デフォルトの名無しさん:2010/05/22(土) 16:51:25
311=316=318=323=328
なのかなあ
334デフォルトの名無しさん:2010/05/22(土) 18:51:07
winsockじゃないTCP/IPのAPIってあんの?
おせ〜て
335デフォルトの名無しさん:2010/05/22(土) 18:51:24
nagleアルゴリズムについての質問です。
これを無効にした場合、順序性は保たれるのでしょうか?

たとえば以下のように再送の必要が出た場合、'B','A','C'とあべこべに届くのですか?
[クライアント]                  [サーバ]
'A'-------------->あぼん
'B'------------------------------->

<================================= NACK ('A')

'A'------------------------------->

<================================= ACK ('B')

'C'------------------------------->

<================================= ACK ('A')
<================================= ACK ('C')
336デフォルトの名無しさん:2010/05/22(土) 19:02:10
>>335
順序とnagleとは関係ないだろう。
337デフォルトの名無しさん:2010/05/22(土) 19:06:28
>>335
そのACK ('B')なんて出ないよ。
nagleアルゴリズム無効にしたからって順序性が崩れるわけがありません。
教科書読み直してガンバレ
338デフォルトの名無しさん:2010/05/22(土) 19:14:50
>>336,337
ありがとうございます。
どうも覚え違いのようですね。
もう一度勉強し直してみます。
339デフォルトの名無しさん:2010/05/22(土) 22:10:49
>>307
職業プログラマじゃないからよくわからんのだけど、
「システム内通信」って何?
あと、ACEはよく知らない(使ったことない。超重量級のライブラリだってことは知ってるw)
から、参考意見だせないなぁすまそ
340339:2010/05/23(日) 00:50:37
>>339
「システム内通信」とはいわゆる、1つのシステムとして密に通信するプロセス間の通信。 
1ハードウェア上のプロセス間もあるし、複数のハードウェア間の通信もありうる。 普通はシンプルな
システム内だけで使われる独自メッセージングプロトコル。 
341デフォルトの名無しさん:2010/05/23(日) 08:17:57
ドメインソケットによる通信とか、LAN内のRPCのことだとはわかるけど、
「システム内通信」は初耳だなぁ
342デフォルトの名無しさん:2010/05/23(日) 08:51:59
いや普通にあるだろ。会社によって呼び方は違ったりすろけど。
343デフォルトの名無しさん:2010/05/23(日) 11:34:31
会社によって呼び方は違ったりするなら、それは普通にあるとは言わないんじゃないか?
344デフォルトの名無しさん:2010/05/23(日) 11:47:14
クローズド・システムにおける、
(しばしば独自のアプリケーション層プロトコルを使った)IPCってことか
昔なら電文とか言ってた奴だな

いやそういうものは確かに普通にあるけど
「システム内通信」なんて単語は、ぐぐっても、ズバリこれだってのが出てこねーぞ
閉じた世界でしか通じない隠語ならやめて欲しい
345デフォルトの名無しさん:2010/05/23(日) 12:36:43
システムの中で閉じた通信 ってことで字面でわかるんじゃね?

そんなことより SCTP って表記が紛らわしいというか
STCPってつい書きたくなっちまうだろなんとかしろ!
346デフォルトの名無しさん:2010/05/23(日) 12:46:07
まあ呼び名はどうあれ、主題(システム内通信? 独自プロトコル?)そのものは
誰も誤解していないと思われるから、細かい議論はいいんじゃねえか?

ところで、>>307に「しかし(SCTPは)システム内通信ではかなり使われて
いるんじゃないかと思います」とあるが、ホントなんだろうか。
>>340に「(システム内通信とは)シンプルなシステム内だけで使われる
独自メッセージングプロトコル」という定義があって、自分はそれに同意するんだが、
わざわざSCTPを使う目的が分からない。シンプルなメッセージングならTCPで無問題では?
347デフォルトの名無しさん:2010/05/23(日) 12:58:47
>>346
データグラム型TCPという、聖なる矛盾に満ちた神プロトコルだからだろ。

電文がぶつぎりになったり後ろとくっついたりしないのは
ほんとにほんとうに便利だお
348デフォルトの名無しさん:2010/05/23(日) 14:58:56
複数ルート使った冗長性も
349デフォルトの名無しさん:2010/05/23(日) 16:01:42
通信伝聞って書いて誰も違和感を感じなかったウチの社内。
350デフォルトの名無しさん:2010/05/23(日) 16:08:16
「電文」って90年代後半から使われなくなった気がする
やっぱWindows95以降かな
351デフォルトの名無しさん:2010/05/23(日) 16:57:59
>>350
マジか?
うちの仕事じゃ毎日のように使う用語なんだが遅れてるのかな・・・
352デフォルトの名無しさん:2010/05/23(日) 16:59:01
会社次第じゃない
353デフォルトの名無しさん:2010/05/23(日) 17:04:11
>>347
電文の切り出しなんかTCPでも電文長を頭に付ければ簡単に
出来るんだからSCTP使う理由になるわけない。
354デフォルトの名無しさん:2010/05/23(日) 17:26:52
>>353
>電文長を頭に付ければ
プッ
355デフォルトの名無しさん:2010/05/23(日) 17:29:15
>>353
電文長だけじゃダメだろ。
ヘッダ、電文長、本文、フッタ、サム
最低でもこんくらいいるだろ、齟齬無くやろうとしたら。
356デフォルトの名無しさん:2010/05/23(日) 18:03:10
TCPなのに?
357デフォルトの名無しさん:2010/05/23(日) 18:17:21
>>356
えっ?
データがおかしくなってもそのままおかしくなったまま被害が増大するのをほっとくの?
358デフォルトの名無しさん:2010/05/23(日) 18:46:55
勝手に要件追加するなよ
359デフォルトの名無しさん:2010/05/23(日) 18:47:36
>>357
ヘッダ、フッタにサム付きなんて、まるでベーシック手順全盛の時代を想い出すなぁ。
あぁ、そういやメッセージじゃなくて電文だったw

冗談はさておき、TCPだからサム(チェックサムのこと?)は不要。
もしやるなら、アプリケーション層で論理メッセージ全体のサムを計算させる。
たとえばファイル転送プロトコルなら、転送ファイル全体のサムだ。電文単位は無意味。

あれ、それともSCTPって信頼性の保証されないプロトコルなのかな。だとしたらUDP以下だ。
360デフォルトの名無しさん:2010/05/23(日) 19:11:18
>>357
TCPならデータはおかしくならないよ。
361デフォルトの名無しさん:2010/05/23(日) 19:40:25
IPは届いたデータがおかしくならない事を保証している。
362デフォルトの名無しさん:2010/05/23(日) 19:43:31
>>356
ストリームだからだろ。
363デフォルトの名無しさん:2010/05/23(日) 19:45:07
>>359
だから通信順序の保証されたUDPみたいな使い方が出来て便利だよ
364デフォルトの名無しさん:2010/05/23(日) 19:46:09
>>362
どこまで話を戻したいんだよw
ストリームだと「なぜ」チェックサムが要るんだか言ってみろ
365デフォルトの名無しさん:2010/05/23(日) 20:00:29
最低限ヘッダかフッタは必要だな
366デフォルトの名無しさん:2010/05/23(日) 20:01:35
そういう意味じゃ改行ってフッタだな
367デフォルトの名無しさん:2010/05/23(日) 20:06:20
まあ、もちついて、ここらでも読んでそれからだ

http://www.ibm.com/developerworks/jp/linux/library/l-sctp/
368デフォルトの名無しさん:2010/05/23(日) 20:07:29
>>367
マルチストリーミングのところがよくわからん
解説してくんろ
369339:2010/05/23(日) 20:38:29
>>353
簡単ではあるが、それがカーネル内でやってくれるというのは効率上大きな意味があると
思います。 切り分けが、カーネルと往復せずに処理されるという所に意味があると。
370デフォルトの名無しさん:2010/05/23(日) 20:48:14
ちょっと質問
TCP通信で、途中のパケットが失われることってある?

A,B,C と送信してきて、Bが失われたとき、Cの受信時に
Bが失われたことを検知できるっけ?
371デフォルトの名無しさん:2010/05/23(日) 20:52:27
>>370
入り口から入ったものと出口から出てきたものが同じであることを保障してくれるのがTCP

パケットが欠落したらTCPの中の人が再送してくれるよ、ユーザーからは見えない

372デフォルトの名無しさん:2010/05/23(日) 21:06:14
>>368
一つの接続の中に複数のストリームを流せると読んだ
373デフォルトの名無しさん:2010/05/23(日) 21:18:26
>>368
>>370のときに、BとCが別ストリームだったらCだけ受信できる。
TCPだと1コネクション内に、TLV等でストリーム多重化しても、一つのパケットが落ちたら後続もブロックされる。
TCPで複数コネクション張れば同じだけど、今度は複数コネクションを一つのセッションとして扱う
めんどくささが生まれる。
1セッションに3ストリーム必要で、同時接続2セッションまで、みたいな制限かけるときとか。
374デフォルトの名無しさん:2010/05/23(日) 21:18:45
こにちは。C#2010入れたみたけど、C#でのTCPクライアントプログラムングでお勧めはあるますか?
ttp://www.yoihon.com/sc/product-84512.html
この本はいかがでしょうか?感想お知らせください。ませ。
375デフォルトの名無しさん:2010/05/23(日) 21:26:57
SCTPの利点は以下の通り。

マルチ・ホーミングのサポート。
コネクションのエンドポイントは複数のIPアドレスを持つことができ、ホストやネットワーク・カードの障害時にフェイルオーバーが可能。
別個のストリーム内のチャンクによるデータ転送。
これにより、TCPのバイトストリーム転送に見られるような、不必要なhead-of-the-lineブロッキング (待ち行列の先頭のデータがその後ろの転送を妨げること) を解消することができる。
経路選択とモニタリング。「プライマリ」データ転送経路を選択し、その転送経路の接続性をテストする。
検証と応答確認メカニズム。
フラッディング攻撃からの保護や、重複あるいは欠損したデータ・チャンクの通知を提供する。
376デフォルトの名無しさん:2010/05/23(日) 22:15:21
>>371
つまり、Bが失われたときはCは来ないってことでおk?
377デフォルトの名無しさん:2010/05/24(月) 00:00:15
>>376
Bの再送が失敗に終わればCは来ない
378デフォルトの名無しさん:2010/05/24(月) 08:54:49
>>377
ありがとう!
379デフォルトの名無しさん:2010/05/24(月) 22:40:17
レイヤ7でいれるチェックサムはTCPでのチェックサムっていう意味じゃなくて、
(フレーム単位でのチェックサムではなく、)
セキュリティ的に改竄されてるかどうかとかそういうチェックサム。
(レイヤ7上でのプロトコルで改竄検出をするための)
380デフォルトの名無しさん:2010/05/24(月) 23:50:00
>>379
セキュリティを語りたいのなら、「ハッシュ」とか「ダイジェスト」という単語を
選ばないと誤解されて当然だと思われ。「チェックサム」は誤り検出の文脈で使われる単語。
ところで IPSEC は知っているかな。レイヤ3(ネットワーク層)のプロトコルだけどね。
381デフォルトの名無しさん:2010/05/27(木) 21:42:01
wininetのInternetOpenとInternetOpenUrlとInternetReadFileを使って、
yahooのページも何ページもダウンロードするプログラムを作ったのですが、
何ページ目かのInternetOpenUrlがerror code12152(ERROR_HTTP_INVALID_SERVER_RESPONSE)を返します。
yahooが連続アクセスを拒否したという事なのでしょうか?
382デフォルトの名無しさん:2010/05/27(木) 23:09:23
>>381
そういうことです
383デフォルトの名無しさん:2010/05/28(金) 05:08:01
【社会】 図書館HPにアクセス3万3千回で、会社社長逮捕。1秒に1回アクセス繰り返すプログラム作る…愛知
http://tsushima.2ch.net/test/read.cgi/newsplus/1274928007/
384デフォルトの名無しさん:2010/05/28(金) 07:09:15
21回も鯖落としても給料に反映無しってのがお役人さね。
Windows Server 2003 Microsoft-IIS/6.0 26-May-2010 202.238.45.27 Okazaki City Library
IIS6で5クライアント超えただけとかいうオチなら笑いもの
385デフォルトの名無しさん:2010/05/28(金) 10:30:29
>>382
やはりそうですか・・・。

>>383
タイムリーにこんな事件が起きていたのですね。
しかし、1秒に1回というペースでも問題になってしまうとは。
ロボット型サーチエンジンなんかはどうしているんだろう・・・。
386デフォルトの名無しさん:2010/05/28(金) 11:02:37
図書館の検索なんかは GET リクエストじゃなくて POST リクエストだから、
普通のロボットは retrieve しない。
387デフォルトの名無しさん:2010/05/28(金) 13:19:49
鯖を落としたとは書いてないんだけどな。

閲覧しにくい状態が続いた。
21回停止されていた。

サーバへの攻撃と判断して、一時的にhttpdを停止させたのかも知れない。
サーバ保護のための措置(緊急回避)なんだから、管理者が責任を問われることはないだろ。
388デフォルトの名無しさん:2010/05/28(金) 17:17:25
1tpsで重くなるって弱っちすぎる。
地方自治体の図書館なんてどこもヘボが作ってるんだろうな。

動機は、しばらくアクセスしにくい状態にしておいて、「うちで開発しましょう、
快適になりますよ」とか売り込むつもりだったんじゃないかな。

オレの地元の図書館もヘボっちすぎて作り直してやりたいと常々思ってるから、
理解できる。
389デフォルトの名無しさん:2010/05/28(金) 22:12:26
たしてちょうど15になる7個の自然数の組合せをすべて列挙するとともに、
すべての組合せを表示し終えたら、それらの組合せが全部でいくつあるの
かも出力するプログラムを作成しなさい。

#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;
}

現在ここまで作りましたが、プログラムがわかりません。
誰か教えてください。
390デフォルトの名無しさん:2010/05/28(金) 22:13:54
言語はC++
環境はVisual です。
391デフォルトの名無しさん:2010/05/28(金) 22:16:46
数十文字のスレタイも読めなんだから入門書なんて読みもしないんだろうな
392デフォルトの名無しさん:2010/05/28(金) 22:29:21
>>391
すいません。間違えました。
393デフォルトの名無しさん:2010/05/29(土) 14:10:09
>>388
うちもだよ
蔵書検索に30秒くらいかかる
394デフォルトの名無しさん:2010/06/04(金) 23:18:12
>>381なんですが
ttp://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のシステム次第だと思いますが、
一般的にアクセスを拒否する仕組みはどのような物があるのでしょうか?
なんとかしてプログラムでダウンロードしたいです。
395デフォルトの名無しさん:2010/06/04(金) 23:36:34
>>394
エラーの詳細は?
396デフォルトの名無しさん:2010/06/04(金) 23:56:35
>>395
>>381の3行目に書いた事しか分からないです。
397デフォルトの名無しさん:2010/06/05(土) 04:16:12
専用ブラウザの書き込み通信をモニターして、書き込みがあった場合
次の書き込み可能な時間が来るまでのカウントダウン表示をする
アプリを作りたいのですがどのようにすればいいのでしょうか?
398デフォルトの名無しさん:2010/06/05(土) 15:16:17
>>396
バケットキャプチャは?
399デフォルトの名無しさん:2010/06/05(土) 19:26:32
>>398
Wiresharkで見てみたんですけど、データの見方がわからないです。
通信は難しいなぁ・・・。
400デフォルトの名無しさん:2010/06/05(土) 22:15:48
>>399
なんかコードがバグってる気がするな
10秒間隔でWebブラウザで開く分には問題よね?
401デフォルトの名無しさん:2010/06/06(日) 02:19:42
総務省が日本のISPを巻き込んで検閲するって本当なの?
それもパケットキャプチャレベルじゃなくてISPでキャプチャするユーザパケットレベルで検閲する(広告利用とか言ってるけど実際は検閲のこと)ってので、
現在中国やグーグルがやってる検閲以上のを検証してるようだけど。
402デフォルトの名無しさん:2010/06/06(日) 03:55:26
ゆくゆくは総務省が財務省や外務省の通信内容を全部検閲しようって腹積もりだよ。
403デフォルトの名無しさん:2010/06/06(日) 04:10:05
既に中国やアメリカからハッキングされて筒抜けなのに、さらに国策レベルで自分の首をしめるようなものだよな。
404デフォルトの名無しさん:2010/06/06(日) 05:24:44
なんの話?児童ポルノ対策の話?
405デフォルトの名無しさん:2010/06/06(日) 06:55:25
406デフォルトの名無しさん:2010/06/06(日) 09:01:36
>>400
ブラウザで更新ボタンを何回も押すのは問題なくできます。
再度、コードをチェックしてみます。
407デフォルトの名無しさん:2010/06/06(日) 09:31:24
>>405
こういうのって、昔から過剰に反応する人がいるんだよな
昔はパソコンに疎いおっさんが、中の動作を知ったときにわめくことが多かったけど
408デフォルトの名無しさん:2010/06/06(日) 09:39:38
>>403 みたいな病人もいるしな
409デフォルトの名無しさん:2010/06/06(日) 09:49:11
一般人には専門的なことはわからんよ。
重要なのは恐怖だ。
410デフォルトの名無しさん:2010/06/06(日) 10:34:11
いや、違反者への罰則は外患誘致みたいに死刑のみにしないと、
クズがデータを転売するに決まっている。
411デフォルトの名無しさん:2010/06/06(日) 10:52:54
WindowsでTCP/IPサービスが利用できるかチェックするいい方法はありますでしょうか?
たとえば、LANならロカールエリア接続が有効になっていて、TCP/IPプロトコルが有効になっていて、
とかそういうのをひっくるめて。しかもすごい頻繁にチェックするのですが。
412デフォルトの名無しさん:2010/06/06(日) 11:01:33
>>411です。
ああ、頻繁じゃなくてもいいです。タイマーか何かで定期的にチェックして
その結果でフラグセットしますので。
413デフォルトの名無しさん:2010/06/06(日) 13:14:53
>>405
ネット情報すべて解析する技術 利用者から「使用やめろ」の大合唱
6月5日18時12分配信 J-CASTニュース

だが通信の秘密は、通信当事者の同意があれば侵害とはならない、とも書かれていた。こうなると、同意があればDPI技術を利用してよいと読み取れなくもない。
総務省はDPIによる行動ターゲティング広告を容認したのだろうか。
総務省消費者行政課に取材すると、「そのような事実はありません」と明確に否定した。

 同課によると、そもそも「提言」は、DPIの課題を研究会で検討した内容を整理したものに過ぎず、この段階で「容認した」という類のものではない。それを踏まえたうえで、「同意」の内容について大変厳しい解釈を示していると主張する。
例えばサイト上での周知だけ、契約約款に規定を設けるだけでは「同意あり」とはみなさないという。
一方で、ISPと新規契約する際の契約書に、「行動ターゲティング広告への利用を目的として、DPI技術を使って通信情報を取得することに同意する」という欄を設けた場合は、
「個別かつ明確な同意」として認められるという。仮に同意した後でも、「やはりDPIの使用はやめてほしい」となれば簡単に中止を求められる「オプトアウト」の機会を提供するよう、ISPに求めるとしている。
これらは、「一部の法学者から『厳しすぎる』との声があったほど」(消費者行政課)高いハードルだという。
414デフォルトの名無しさん:2010/06/06(日) 15:17:34
リアルだと警察が街中に監視カメラ設置して、個人商店には警察協力と称して設置を強要してやりたい放題でしょ。
警察がやりたい放題になっている社会の方が問題だと思うよ。
イスラエルとかジャマイカとかだと警察官が気に食わない奴の家に上がりこんでそいつを当たり前の表情で殺してる。
日本だと警官が人殺しをすることは無いけど、警察利権を作るだろうね。たとえば交通道路とか風俗・警備会社許認可権、最近だと監視カメラ利権でしょ?
銃刀法も扱ってるから、例えばなんでもないプラモデル屋やフィギア屋にすら「ナイフだろ!」とか言いがかりつけて、気に食わなければ逮捕とかも可能だろうね。
警察が幅を利かせるようになると国家の監視どころじゃなく警察に統治されるようなそういう世界がまっている。
ネットよりリアルの方が窮屈で監視社会(全体主義的な検閲社会)になってるなって感じはする。
415デフォルトの名無しさん:2010/06/06(日) 15:28:39
>>411
netsh
416デフォルトの名無しさん:2010/06/07(月) 01:15:42
>>411
acceptして放置
417デフォルトの名無しさん:2010/06/07(月) 01:19:22
ネットワークを扱った書籍で、子供だましな誰得?なサンプルアプリとか
やってはいけない馬鹿の見本なサンプルコードとかじゃなく
まじめにきちんと設計されたアプリを書き上げた書籍ってありますか?
418デフォルトの名無しさん:2010/06/07(月) 01:44:33
>>417
UNIXネットワークプログラミング<Vol.1>
がもっとも要求に近い。
419デフォルトの名無しさん:2010/06/07(月) 05:13:07
>>417
なんでオープンソースのコードを読まないの?
420デフォルトの名無しさん:2010/06/07(月) 19:55:48
TCPDUMPについて質問させてください

tcpdumpからソースIPとあて先IPをスプリクトで抜き出し
エントロピー値を取ろうと思うのですが

スプリクトは直接TCPDUMPは読み込めないので
tcpdumpをtxtファイルに変換させることは可能でしょうか?

Wiresharkで読み込ませて、txtにしようと思ったのですが
うまく行きません

レベルの低い質問ですが
どうかご教授お願いします
421デフォルトの名無しさん:2010/06/07(月) 20:04:02
>>418,419
半角カタカナという基本的なネットのリテラシも無い、やってはいけない馬鹿の見本のような
カキコを平気でする>>417みたいなのに何を言っても無駄なだけ。
>>418の挙げた書籍には大いに同意するし自分にはバイブルだったけど>>417には豚に真珠。
>>419が何を言っても馬の耳に念仏だお。
422デフォルトの名無しさん:2010/06/07(月) 20:30:14
近所にミニブタ飼ってて奥さんが颯爽と散歩兼ねてジョギングしてる。
真珠かイミテーションか知らんが結構似合うモンだぜ?豚に真珠。
423デフォルトの名無しさん:2010/06/07(月) 20:38:55
で、>>417には似合うのか?
424デフォルトの名無しさん:2010/06/07(月) 20:54:13
>>420
IPってゆうな。クズ。
425デフォルトの名無しさん:2010/06/07(月) 23:06:15
>>420

スクリプトから直接読み込みたけりゃリダイレクトして標準入力から読めばよろし

ファイル経由でよいならtcpdumpの出力をファイルに落とすオプションがあったと思うぞ
426デフォルトの名無しさん:2010/06/07(月) 23:43:59
そういえば、「バイト数の節約になるんだ」とかいって
EUCやUTF8でも半角かなを使っている人がいたな。
今でも元気にしてるかな・・・
427デフォルトの名無しさん:2010/06/07(月) 23:49:13
そういう奴ほど元気で長生きなものだ
428デフォルトの名無しさん:2010/06/07(月) 23:50:15
半角カナ駄目とかいう暴論者は10年ほど前に絶滅したと思ったらまだいたんだな…
429デフォルトの名無しさん:2010/06/07(月) 23:52:00
半角かなの特性を正しく理解せずに使っているのが癇に障るんだろう
430デフォルトの名無しさん:2010/06/07(月) 23:55:30
今時7ビットしか受け付けないメールサーバなんてあるんですか?
431デフォルトの名無しさん:2010/06/07(月) 23:57:46
悪魔の証明は不可能だよ
432デフォルトの名無しさん:2010/06/08(火) 00:02:52
そういえば外人って°とか℃とかuとかどうやって入力してるんだろう?
433デフォルトの名無しさん:2010/06/08(火) 00:32:10
degreeとかdegree celsiusとかsquare meterとか書いちゃうよw
434デフォルトの名無しさん:2010/06/08(火) 01:32:36
>>421のせいで基本的なネットのリテラシも無い、やってはいけない馬鹿の見本のような
カキコを平気でする奴が出てきた。もう何を言っても馬の耳に念仏だお。
435デフォルトの名無しさん:2010/06/08(火) 08:19:40
>>420
tcpdump > tcpdump.txt
436デフォルトの名無しさん:2010/06/08(火) 09:17:04
結局半角カナを使う馬鹿って生き残っちゃったよな
437デフォルトの名無しさん:2010/06/08(火) 09:58:26
>>436
(゚∀゚)これも半角だしNE!
438デフォルトの名無しさん:2010/06/08(火) 09:58:26
文字コードとして割り当てがあるのに使ってはいけないとか言う子の意図がわからんな
439デフォルトの名無しさん:2010/06/08(火) 10:03:53
>>438
8bit->7bit変換のときに単純に8bit目を落とす馬鹿鯖があるからだろ
440デフォルトの名無しさん:2010/06/08(火) 10:27:00
ISO-2022-JPでは使わないことになってるエスケープなのに、使っていいとか思ってる子の意図がわからんな
441デフォルトの名無しさん:2010/06/08(火) 11:44:09
>>440
ISO-2022-JP以外なら使ってもいいってことだから問題ないよ。
ISO-2022-JPに変換しなければおk
442デフォルトの名無しさん:2010/06/08(火) 11:52:15
バカっぽく見えるから使わない方がいいよ。逆にバカっぽさを強調したい場合には使うのもあり。
443デフォルトの名無しさん:2010/06/08(火) 12:31:39
こいつらの作るアプリはさぞ使いにくいだろうなw
444デフォルトの名無しさん:2010/06/08(火) 13:52:53
黙れ
ネトウヨ
445デフォルトの名無しさん:2010/06/08(火) 14:22:12
>>444
極めて正しい用法。
446デフォルトの名無しさん:2010/06/08(火) 14:34:03
>>442
イッテヨチ!
447デフォルトの名無しさん:2010/06/08(火) 18:19:01
>>442
半角かなを使わないに越したことは無いが
半角かなを受け入れられないソフトは糞だ。
448デフォルトの名無しさん:2010/06/08(火) 18:37:39
半角カナ駄目とか30年前からタイムスリップしてきたのか?w
449デフォルトの名無しさん:2010/06/08(火) 18:57:57
半角カナ使う奴の方が30年前からタイムスリップして来てるのだが
450デフォルトの名無しさん:2010/06/08(火) 19:53:41
両方使えるようにすればいいだけじゃん。
エンドユーザーなんて何するかわからん。
451デフォルトの名無しさん:2010/06/08(火) 21:46:57
梢レ?
452デフォルトの名無しさん:2010/06/08(火) 21:58:09
>>440
つまり@A……も禁止か?"−"もだめそうだが?
453デフォルトの名無しさん:2010/06/08(火) 22:04:14
潔く捨てるのがルータの教え。
利用者に使えないんだと理解させるためにicmpで通知してあげればいい。
454デフォルトの名無しさん:2010/06/08(火) 22:06:26
icmpてピングでしょ?どうやって通知するの?
455デフォルトの名無しさん:2010/06/08(火) 22:10:29
昔はメールを書く時には半角カタカナや機種依存文字を使うなとしつこく言われたものけど、
最近は初体験で日常的なメールというのがケータイであるという奴が増えているから、
半角カタカナや絵文字について何も違和感を持たず、同じ感覚で2chにカキコしてるんだろね。
で、社会人になってから、常識の無い奴とドヤされるわけだ。
456デフォルトの名無しさん:2010/06/08(火) 22:14:26
昭和時代はカタカナでメールを打つのが常識だったんですか?
457デフォルトの名無しさん:2010/06/08(火) 22:35:17
ポケベルで数字打つってのが常識でした。
458デフォルトの名無しさん:2010/06/08(火) 22:39:27
53 93 65 05
459デフォルトの名無しさん:2010/06/08(火) 23:38:50
実に滑稽w
そのうち時代後れな事を言ってる奴が”文字化けするから「表」「予」「申」「能」「十」「ソ」なんかの文字も使うな!”とか言いだしそうだぜw
460デフォルトの名無しさん:2010/06/08(火) 23:43:18
\表
461デフォルトの名無しさん:2010/06/08(火) 23:56:26
森鴎外叱る
462デフォルトの名無しさん:2010/06/09(水) 00:00:06
>>459
俺鬱
JIS-X2010
463デフォルトの名無しさん:2010/06/09(水) 00:04:13
>>459 半角カナを使うような無神経な奴ほど、トラブルに対してそういう対応をするけどな。俺の経験上。
464デフォルトの名無しさん:2010/06/09(水) 00:27:49
エスケープするなら表\だろ。
465デフォルトの名無しさん:2010/06/09(水) 01:01:47
>>463
おまえの負け
466デフォルトの名無しさん:2010/06/09(水) 15:59:50
検索で半角カナと全角カナを厳密に区別するソフトとかあるからなー
必要に迫られない限り、使わないにこしたことないでしょ。機種依存文字なんだし
467デフォルトの名無しさん:2010/06/09(水) 17:44:39
バカっぽい雰囲気を出したいときは必須。
468デフォルトの名無しさん:2010/06/09(水) 17:52:08
一般の人の反応: 昔は使えなかったとかごちゃごちゃ言ってるけど、
今は使えてるんだからい〜じゃん、あほくさ
469デフォルトの名無しさん:2010/06/09(水) 19:17:06
>>420
Wireshark(Ethereal)に付いているコマンドラインツールのどれかに、
そういう機能があったと思う。

Wireshark Manual Pages
ttp://www.wireshark.org/docs/man-pages/
470デフォルトの名無しさん:2010/06/10(木) 10:46:48
プゲラ
471デフォルトの名無しさん:2010/06/11(金) 01:21:14
初歩的な質問
UDPのパケットがフラグメントとかされて途中で分断されてても
アプリケーション層でrecvfrom成功した時は送信されたパケットと同じサイズの
データの取得は保証されてる?

UDPはパケットの到着順は保証されないけど、パケット単位での再結合が成功済みの
パケットしかアプリケーション層までは到達しないんだよね・・・?
472デフォルトの名無しさん:2010/06/11(金) 01:27:40
眠いのかい?
473デフォルトの名無しさん:2010/06/11(金) 01:47:34
>>471
到達しない。

というか、フラグメンテーションはIP層で行われているからUDPは
完全なIPパケットしかもともと受け取らない。
474デフォルトの名無しさん:2010/06/11(金) 09:01:50
>>473
thx

さらにもう一個質問。

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毎の独立バッファ
で受信しないといけなくて凄く実装が面倒なんだけど・・・
475デフォルトの名無しさん:2010/06/11(金) 09:14:32
>>474
ない。
もしどっかでちょん切れたら最後の50はうしなわえう
476デフォルトの名無しさん:2010/06/11(金) 10:45:36
>もしどっかでちょん切れたら最後の50はうしなわえう
ちょっと待て。
「最後の50」だけ失われるケースはありえないだろ。

ちょん切れて飛んできても勝手に結合してくれるし、もし結合できなかったら「最初の50すら捨てる」だろ。
そうじゃなきゃUDP使えないってのw
477デフォルトの名無しさん:2010/06/11(金) 11:21:44
データ部が548バイトまでなら絶対分割されないから、分割が心配ならそのサイズまででやればいい。
548バイト超えると分割されたり、再送がどうだの発生したりで性能劣化していくし

あってるよね?
478デフォルトの名無しさん:2010/06/11(金) 17:02:49
IPヘッダ内に「分割(フラグメント)可否フラグ」というのが存在している。
サブネット間に位置するルータは、パケット転送時に分割が必要な場合、
このフラグを参照し、もし不可であれば単純にそのパケットを破棄する。
で、一般的なUDP実装では、このフラグは「常に」不可に設定される。
だから(>>474のような)ネットワーク上を分割されたUDPデータグラムが
流れる現象そのものが起こりえない。

ただし、このフラグを許可に設定するような「行儀の悪い」UDP実装が
送信者であった場合、どうなるかは知らない(予測できない)。
分割されたUDPデータグラムを単純に破棄する受信者が大半であると思われる。
479デフォルトの名無しさん:2010/06/11(金) 20:26:35
>>476
分割するハメになったら破棄されるんだから、結合はないよね?
もしかしてあるの?
480デフォルトの名無しさん:2010/06/12(土) 10:35:20
パケットロスや順番入れ替えが無かったと仮定して。
sendtoで"A""B"..."Z"と一文字ずつ26回送った場合
受信側はrecvfrom一回で"ABC..."とかくっついて受信されずに
recvfromを26回、一回につき一文字ずつ受信できるのは保証されてるのかな?

TCPだとrecvの戻りはいくつかのパケットがくっついたりパケットの途中で戻ってくるけど
UDPではsendto/recvfromは1:1対応してる、と想定して作っていいんだよね?
481デフォルトの名無しさん:2010/06/12(土) 11:45:55
そもそも、そんなことを気にしなきゃならないような通信を
UDPで実装しようって設計が間違ってる気がする
482デフォルトの名無しさん:2010/06/12(土) 11:59:34
>>480
それが書いていない教科書はクソだし、検索すればいくらでも出てくる。
483デフォルトの名無しさん:2010/06/12(土) 12:04:43
>>480
作るときはパケットの区切りは、どこか分からないものとして作るんだよ
ここが区切りですなんて情報はくっついて来ないから


入り口から入れたものが同じ順番で出口からでてくるのがTCP
順番が狂ったり出て来ないのがあるのがUDP
そんだけ
484デフォルトの名無しさん:2010/06/12(土) 12:30:19
>>483
> 作るときはパケットの区切りは、どこか分からないものとして作るんだよ
それはTCPだけ。 UDPはおk。
485デフォルトの名無しさん:2010/06/12(土) 12:40:33
>>482
とりあえず1冊入門書読んだんだけど見つからなかったんだ・・・
UDPのRFC読んだけどそう動作するよう実装するべし、みたいなのが見つからなくって
ネットで探した限りSUNのページにそれらしい記述があったけどSUNの実装が
そうなってるだけでBSDソケットと名乗るなら必ずそう動作する、って保証はあるのかなぁ、と

>ただし、このフラグを許可に設定するような「行儀の悪い」UDP実装が
みたいにソケット実装者の気分次第でどう動作するように実装してもよくて
たまたま多くの実装がそうなってるだけとかだと嫌だなぁと
486デフォルトの名無しさん:2010/06/12(土) 13:00:20
>>485

スタックを使う側はそういうのは考えなくてよろしいのよ

スタック自体を実装するのなら、思いっきり考えてくださいまし

自分とこで使ってるスタックの実装に合わないパケットはスタックが捨ててくれるんだから
よそ様が何をつかってても関係ないでしょ
487デフォルトの名無しさん:2010/06/12(土) 13:04:31
>>485
UNIXネットワークプログラミング<Vol.1>
を買ってこい。今すぐ!ダッシュでだ!
488デフォルトの名無しさん:2010/06/12(土) 13:08:52
>>486
UDPではsendto/recvfromは1:1対応してると期待していいのかどうか、
で使う側の実装はまったく違うものになると思うが・・・

で、二種類の異なるハード・OS(両方BSDソケットは使えると言ってる。ちなみにWinでもLinuxでも無い。CPUもIntelじゃない。)
がNAT下にあってUPnP/STANでNATのUDPの穴あけは相互にできるけどTCPは保証できない、
という環境でUDP使ってP2Pで通信してね、というお仕事を引き継いだんだけど
UDP使うの初めてで色々わからんのよ・・・
489デフォルトの名無しさん:2010/06/12(土) 13:26:39
>>488
>UDPではsendto/recvfromは1:1対応してると期待していいのかどうか、

それ以前に到達することすら保障されてないわけだが、そこはいいの?

良く分からない仕様で悩んでるよりも
出てきたデータをストリームとして扱えば、1対1だろうが多対1だろうが問題ないんじゃね?

490デフォルトの名無しさん:2010/06/12(土) 13:34:59
>それ以前に到達することすら保障されてないわけだが、そこはいいの?
UDP使うしか無い以上その保証はアプリ側で対処するしか無いです。車輪の最発明は嫌だけど・・・

>出てきたデータをストリームとして扱えば、1対1だろうが多対1だろうが問題ないんじゃね?
順番が保証されないデータのストリーム前提の実装って、無理じゃないけどえらい面倒+メモリ&CPU資源の
無駄が多そう。あんまり富豪的なプログラムできるほどリッチなハードでも無いし。

BSDソケット使えると言ってるならアプリケーション層までたどり着いた
UDPパケットは1:1保証されてるんだよ、となればその前提で組めるので
助かるなぁ、と・・・

491デフォルトの名無しさん:2010/06/12(土) 13:42:53
>>488
期待しなきゃだめだろ
その代わり順番も入れ替わるし無くなることもあるというだけの話
492デフォルトの名無しさん:2010/06/12(土) 14:21:44
>>491
だよね

前任者のコードで
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対応を期待できるなら大丈夫だね。
493デフォルトの名無しさん:2010/06/12(土) 15:14:45
>>492
rfc1180
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ソケットの位置づけを誤解している。
494デフォルトの名無しさん:2010/06/12(土) 17:24:35
>>478
> で、一般的なUDP実装では、このフラグは「常に」不可に設定される。
いつからそうなった?

少なくとも, 4.2 BSD の実装時点ではそうできてないし,
unix 系の実装でそうなっているやつは見かけないんだが...

で, 今, 手元にある FreeBSD あたりだと
% sysctl net.inet.udp.maxdgram
net.inet.udp.maxdgram: 9216
てなことになってるが
495デフォルトの名無しさん:2010/06/12(土) 18:20:02
>>493
RFC1180にあったのか。これってTCPだけじゃなくUDPについても書いてあったんだね。
UDPだからRFC768を見てた。さんくす

>後、キミはBSDソケットの位置づけを誤解している。
SDKのドキュメントに"BSDソケット準拠のソケットライブラリ"と書かれていたから
"ANCI準拠"とかと同じ統一規格の一種かと思ってたんだど、誤解かな?
496デフォルトの名無しさん:2010/06/12(土) 20:23:52
>>495
BSDソケットはAPI, プロトコルではない。

> BSDソケットと名乗るなら必ずそう動作する、って保証はあるのかなぁ、と
という表現はおかしい。
497デフォルトの名無しさん:2010/06/12(土) 20:44:30
> BSDソケットはAPI, プロトコルではない。
「Berkeley 互換を名乗るなら動作を含めて互換にしてほしい」ってのはわがまま?
組み込み用途のスタックとか Berkeley 互換をうたいながら全然互換じゃない実装って結構あるのな
まぁ, メモリに余裕があれば移植してしまえば済む話ではあるが...
498デフォルトの名無しさん:2010/06/13(日) 11:54:44
> 「Berkeley 互換を名乗るなら動作を含めて互換にしてほしい」ってのはわがまま?
やっぱりAPIだと言う事を理解していない
APIだから、socket(PF_INET,...)がEPROTONOSUPPORTを返したってBSDソケットの正しい実装。
499デフォルトの名無しさん:2010/06/13(日) 12:10:10
APIって、セマンティック含めてAPIだろ。
名前が同じならいいってもんじゃない。
500デフォルトの名無しさん:2010/06/13(日) 12:35:56
BSDソケットは、特定のプロトコルの実装を要求していない。
501デフォルトの名無しさん:2010/06/13(日) 14:02:52
>>498
API ってのは, 仕様があってはじめて API って名乗れるもんではないのか?
Berkeley の仕様なんてどこにもないんだが…

# 強いて言えば, posix の要求仕様程度かな?

初期の Postscript 互換言語なんて bug も含めて互換性を求められてたぞ
xterm に至っては忠実に vt100 の bug まで再現してた
502デフォルトの名無しさん:2010/06/13(日) 14:17:33
下らない言いがかりをつけるのはキミの自由だけど、世の中の大部分の人はAPIだと考えている。
http://en.wikipedia.org/wiki/Berkeley_sockets

どうしてもBSDソケットはAPIじゃ無いと言いたいなら、理由を列挙して署名入り記事でも発表しなよ。
503デフォルトの名無しさん:2010/06/13(日) 15:07:30
>>501
manすら見たことない事を全力で告白しなくても良いぞ。
504デフォルトの名無しさん:2010/06/17(木) 19:16:24
Windows でネットワークプログラミングを始めました。
Linux ではちょっとやっていたことがあります。

マルチスレッドで処理をしようと考えているのですが、Winsock のいくつかの関数がスレッドセーフなのかどうかがよくわかりません。
1つのスレッドで 1つの socket を扱っており、例えば recv の後で WSAGetLastError を呼び出しているのですが、
WSAGetLastError はスレッドセーフなのでしょうか。
スレッドセーフではない場合、どう対処するものなのでしょうか。

gethostbynameなどはスレッドセーフじゃないという情報があったので、mutex を使って排他しています。
しかしながら recv から WSAGetLastError までを排他すると、マルチスレッドのメリットが無くなってしまうんじゃないかと思う次第です
(この socket はブロックモードです)。
505デフォルトの名無しさん:2010/06/17(木) 19:36:19
>WSAGetLastError はスレッドセーフなのでしょうか。

いいえ

>スレッドセーフではない場合、どう対処するものなのでしょうか。

WSAGetLastError を使わない
506デフォルトの名無しさん:2010/06/17(木) 19:57:55
http://msdn.microsoft.com/en-us/library/ms741580%28VS.85%29.aspx

The return value indicates the error code for this thread's last Windows Sockets operation that failed.
507504: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
508デフォルトの名無しさん:2010/06/17(木) 20:19:09
ただのアホの戯言ですよ
509デフォルトの名無しさん:2010/06/17(木) 23:48:19
>>502 すまんな、急な出張が入ってた
それは *nix とか, Windos とかの資源が潤沢なところの世界の話だ
510デフォルトの名無しさん:2010/06/18(金) 01:02:25
>>504
1つのスレッドで 1つのsocketを扱っているならWSAGetLastErrorを
複数スレッドで同時に呼んでも全く問題なし。
511デフォルトの名無しさん:2010/06/18(金) 01:13:42
1つのスレッドでWSAGetLastErrorを*同時に*呼ぶ事はできないから
WSAGetLastErrorの使用に関して条件を付ける必要は無い。
512デフォルトの名無しさん:2010/06/18(金) 05:30:22
>>510
アホはいい加減黙れ
513デフォルトの名無しさん:2010/06/18(金) 14:55:10
メールのプロトコル(SMTP/POP3)に関して勉強したいのですが、お勧めの書籍などありますでしょうか?

とりあえずAmazonで
http://www.amazon.co.jp/dp/4873110289
http://www.amazon.co.jp/dp/479810941X
の二冊を見つけましたが、お読みになっている方のインプレ、または他にお心当たりがありましたら是非ご教授ください

※ライブラリやアプリケーションの使い方の質問ではない、ということでこのスレで質問させていただきました。
 他に適切なスレがありましたら誘導していただければ幸いです
514デフォルトの名無しさん:2010/06/18(金) 15:19:01
SMTP と POP3 だけなら RFC(の日本語訳)サイト で十分じゃね?
515デフォルトの名無しさん:2010/06/18(金) 15:38:12
ちょww誰がうまい事をいえと言ったw
http://stream.everywebhost.com/hitec/sport/j7.html
516デフォルトの名無しさん:2010/06/18(金) 18:50:25
これ見てよ↓
http://livedoor.blogimg.jp/tekepo/imgs/3/4/3414dfca.jpg
ばらまこうぜ!
517デフォルトの名無しさん:2010/06/18(金) 19:50:36
>>516
自分で拡散してお前がアク禁食らえ。カス。
518513:2010/06/19(土) 00:23:33
>>514
いや、まぁ、確かに最後に見るのはソコなんでしょうが・・・。
出来ればもう少しナンパな本は無いでしょうか?(苦笑
519デフォルトの名無しさん:2010/06/19(土) 00:25:40
最後じゃねえよ最初に見ろドアホ
520デフォルトの名無しさん:2010/06/19(土) 01:21:29
>>518
> ※ライブラリやアプリケーションの使い方の質問ではない
ということから、少なくともソケット操作はできる前提
→ なら SMTP POP3 のプロトコルの話
→ 結局 RFC が全て
こういうことだ。 で、その部分だけを書籍化するのは… …(とても少ないという意で)厳しいか?

メールのペイロードの部分(ヘッダとBODY)で、MIME関連まで網羅しだすと
一気に大爆発するがね。
521デフォルトの名無しさん:2010/06/19(土) 01:25:29
優秀wな人材wが束になって時間wと金wをかけて作ったメーラーが
十年単位でバグだらけだった事実
522デフォルトの名無しさん:2010/06/19(土) 03:05:35
OE
523デフォルトの名無しさん:2010/06/19(土) 12:08:04
メーラーでトラブルのは文字のエンコード/デコード周辺じゃねーの?
SMTP で送る/POP3 で受ける 部分はそんなに複雑じゃないと思われ
524513:2010/06/20(日) 11:18:12
なるほど、申し訳ありませんでした。
メールに関しては、RFC<MIMEや文字エンコード、なのですね。
では改めて、そのあたりも含めて、(大爆発しない程度に(汗))解説している書籍などはありますでしょうか?
とりあえず>>513は二冊とも通販で注文を出しました。

>>520
はい、その前提でOKです。
直接、ポート25や110を叩きます。
525デフォルトの名無しさん:2010/06/20(日) 11:34:42
人の話をきけよ!
526デフォルトの名無しさん:2010/06/20(日) 23:47:31
>>524
RFCに全部書いてあるし変な本より読みやすいから
直接読むのをおすすめする

書籍は結構省略されていて結果的に使い物にならない
分かった気になりたいだけならおすすめ
527デフォルトの名無しさん:2010/06/21(月) 01:33:06
なんつーか
"RFC読める俺かっこいい"とか
"俺はRFCを読んで苦労してるんだおまえも苦労しろ"
みたいな意味を含んだレスって読んでて痛いよなぁ
こう言う事言う人って生産性のない学生に多いのよね…
528デフォルトの名無しさん:2010/06/21(月) 02:26:21
そんな人はいないように見えるんだが、君はそんな風に感じたのかい?
529デフォルトの名無しさん:2010/06/21(月) 02:28:45
世の中には辞書が読みやすいという変態がいる
だからrfcが読みやすいとかいう変態がいても不思議ではない
530デフォルトの名無しさん:2010/06/21(月) 02:31:06
rfcは辞書じゃないし
531デフォルトの名無しさん:2010/06/21(月) 03:24:29
>>527
RFCが何だかわかって言っているの?
532デフォルトの名無しさん:2010/06/21(月) 10:15:36
生産性のある社会人はRFCを読まずに俺様解釈とコピペで仕事するので、
クズ実装を非常に高い生産性で排出するわけですね、わかります。
533デフォルトの名無しさん:2010/06/21(月) 10:24:52
>>527
三流底辺技術者の言いそうな台詞だなw
534デフォルトの名無しさん:2010/06/21(月) 11:53:02
>>532
マイクロソフトの悪口はそこまでだ
535デフォルトの名無しさん:2010/06/22(火) 22:04:42
初歩的な質問ですみません
connect/acceptでクライアントとサーバが接続状態であるなか
どちらかがclosesocketしたら、recvが失敗して初めて切断されたと分かるんですか?
536デフォルトの名無しさん:2010/06/22(火) 23:29:45
>>535
同期ソケットなら普通はrecvの前にselectして検知するな
537デフォルトの名無しさん:2010/06/23(水) 00:55:27
>>536
えらいなー。俺面倒だから切断処理は全部recvでやっちゃうわ。
つーか通常切断されるとselectは正常に抜けてきちゃうから
readとかで0バイト受信かどうかを見るのが一番ラクダと思う
538デフォルトの名無しさん:2010/06/25(金) 02:05:54
WindowsXPとUPnP対応のルータで、NAT超えの簡単な通信プログラムの
サンプルはないでしょうか?

また、ネットワークを一つのPC内で擬似環境を
作ったりするツールとかないのでしょうか・・?
539デフォルトの名無しさん:2010/06/25(金) 07:22:13
>>538
vmware
540デフォルトの名無しさん:2010/06/25(金) 13:33:19
541デフォルトの名無しさん:2010/06/25(金) 21:01:18
>>538
VC++でよければ晒すが
542デフォルトの名無しさん:2010/06/26(土) 12:51:18
socketを使ったプログラミングって、受信と送信の両方をプログラミングしないとダメなんですか?
543デフォルトの名無しさん:2010/06/26(土) 12:55:14
一方通行のプロトコルならば片方でOK。
544542:2010/06/26(土) 13:16:51
>>543
thx
545デフォルトの名無しさん:2010/06/26(土) 14:43:24
>>543
ミサカネットワークに接続するんですね
546デフォルトの名無しさん:2010/06/26(土) 16:55:00
誘導されたんで転載
ネット対戦ゲーム作ろうと思ってるんだけどさ
プロトコルがUDPでUDPの特徴としてコネクションレスであることが挙げられると思うけど、
それってつまりクライアント側の「準備完了」メッセージをうっかり取りこぼしたら永遠に準備完了にならないってこと?
サーバーから「受け取りました」メッセージ届くまで送り続けないといけないの?
547デフォルトの名無しさん:2010/06/26(土) 16:59:46
うんそうだよ
自分でプロトコルを実装しないといけない。
548デフォルトの名無しさん:2010/06/26(土) 18:22:57
>>546
たいした量じゃないなら毎回「状態」を送るのも手だな。
エッジトリガじゃなくてレベルトリガで動作するようにする、と。
549デフォルトの名無しさん:2010/06/26(土) 21:29:43
>>546
そういうのはゲームが開始されるまではTCPで面倒見るのが楽。
1:1なら開始するまでリトライすればいいから楽だが、
1:他になったときにUDPだけだとスゲー面倒だよ。
参加者のうち一人がサーバーになって、皆でTCPでサーバーに接続して
ゲーム開始情報とかはサーバーから一貫した情報送るとかいう仕様にすれ。
550デフォルトの名無しさん:2010/06/26(土) 22:25:49
よくよく考えたら全部TCPでよかったわ
ありがとう
551デフォルトの名無しさん:2010/06/28(月) 00:12:28
writeとかsendが嫌いなんでfdopenでfprintfとかで使えるようにしたんだけど、
どうもうまく動作しない。
一番最後の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");
552デフォルトの名無しさん:2010/06/28(月) 02:15:56
そうですか。
553デフォルトの名無しさん:2010/06/28(月) 08:37:18
>>551
winsock fgets でぐぐる

_open_osfhandleがキモだけど、
自分ならこんなキモい命令使わされるくらいならsend/read使う
554デフォルトの名無しさん:2010/06/28(月) 17:48:16
>>553
そうしようかな。。。
というかずっと疑問でrecvを使わなかったんけど、recv()の引数の受信サイズってどうやって知るの?
文字列なんて長さが一様なはずがないからどうにかして文字列長を取得しなくちゃいけないと思うんだけど。
先に受信サイズだけ送っておくとか?
256とかって設定しちゃったらそれ以上のデータを送りたいときどうするの?
という疑問がずっと解消されてないんで、誰か解説お願い。
555デフォルトの名無しさん:2010/06/28(月) 17:54:57
いくらなんでも基本中の基本すぎて、釣りにしか見えん。
でも釣りじゃなかったら可哀そうだから答えるけど

send1回で送ったデータが、recv1回でとれるとは決まっていない。
なので文字列長とかは自前で受信側に通知する。

・文字列長を最初に送ってから、実際の文字列を送る
・'\0'を受け取るまで受信側がrecvを繰り返す
のどちらかが一般的だな。
556デフォルトの名無しさん:2010/06/28(月) 18:09:13
>>555
'\n' を受け取るまで受信側が recvを繰り返す (fgets を意識した感じ
recv の受信バイト数が 0 になるまで繰り返す (=切断されるまで読みっぱー)
もありそうな話やね
557デフォルトの名無しさん:2010/06/28(月) 19:21:13
釣りじゃないッすorz
ほんと可哀そうなやつで申し訳ない
んで丁寧に教えてくれてほんとにありがとう
558デフォルトの名無しさん:2010/06/28(月) 19:39:33
俺は>>551の1行目で釣りとわかったぜ
559デフォルトの名無しさん:2010/06/28(月) 20:21:51
おまいら叩き過ぎだろ。できの悪い本なら
Send1回につきRecv1回で取れる保障がないこと自体書いてないぞ
ネコわかとかな。
560デフォルトの名無しさん:2010/06/28(月) 21:47:35
できの悪い本の話なんてどうでもいいんだが?
561デフォルトの名無しさん:2010/06/29(火) 00:18:02
できの悪い本手に取ったならそういう質問がでてもおかしくないって話してるんだが。
まー最初からWinsock Programmer's FAQあたり読んだほうがマシだな。
562デフォルトの名無しさん:2010/06/29(火) 00:19:25
そんな話してないよ?
563デフォルトの名無しさん:2010/06/29(火) 00:53:58
2chもレベル落ちたな
564デフォルトの名無しさん:2010/06/29(火) 00:55:57
>>553でrecvをreadって書いちゃったはずかひい

そういやスレッド間通信にUDP使うクソ害虫がいた。
内部通信だから大丈夫です(キリッ)って言ってたけど、
案の定負荷かけたらボロボロ落ちまくりわろた
565デフォルトの名無しさん:2010/06/29(火) 02:16:14
CMSを自作したいんですが
javaサーブレットとPHP どっちがいいですか
データベースはたぶん使いませんん
Webアプリケーションとの連携がしたいです
566デフォルトの名無しさん:2010/06/29(火) 22:40:58
なんで設計をすっ飛ばして製造に入ろうとするんだろうな
567デフォルトの名無しさん:2010/06/29(火) 22:45:23
早漏でござる早漏
568デフォルトの名無しさん:2010/06/29(火) 23:45:31
P2PのDHTを作ってるのだけれども
UDPで実装なんだけども
UDPはパケットサイズ512以下じゃないと届かないことがあるとか言いますが
未だにそんなごみルーターがごろごろしてるの?
今時サイズなんて気にしなくてもたいして支障はないのかな?
569デフォルトの名無しさん:2010/06/29(火) 23:55:52
サイズが小さくても届かないときは届かない
570デフォルトの名無しさん:2010/06/30(水) 00:08:23
>>569
そんなことは分かってる
DHTは最初からそれを考慮して設計されてるから問題ない
聞いてるのは最近のルーター事情において
512と1024では届く確率に差が出るのかということ
571デフォルトの名無しさん:2010/06/30(水) 00:14:17
pgr
572デフォルトの名無しさん:2010/06/30(水) 00:16:02
>>570
1500超えなきゃまず大丈夫じゃね?
1500超えてもIPパケット分割されっし結構いけるんじゃね?
573デフォルトの名無しさん:2010/06/30(水) 00:56:12
log2n2の確立で差異が出るが、ルーター事情によるものではない。
送信間隔はどのくらいのしてる?
10ms以下のインターバルで送信しまくったりしてないよね?
574デフォルトの名無しさん:2010/06/30(水) 00:58:24
MTUの設定値が低い場合は差異がでるかもしれんね
575デフォルトの名無しさん:2010/06/30(水) 12:04:20
>>572-574
なるほど、その言葉を信じてとりあえずやってみる
576デフォルトの名無しさん:2010/06/30(水) 13:25:20
tracerouteでテストしてみると、tracerouteの許す最大32768バイトあっても結構通るな。

$ 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
 
577デフォルトの名無しさん:2010/06/30(水) 13:36:46
ルーター事情ならだめなものはだめ、いけるものはいけるで
確立云々ではないだろう
確立的に届いたりとどかなかったりするのは、回線事情のほうでしょ

578デフォルトの名無しさん:2010/06/30(水) 14:38:47
>>577
P2Pって書いてる通り特定の経路を前提にしてないから
古いルーターにぶち当たる確率です
579デフォルトの名無しさん:2010/06/30(水) 15:39:10
>>578

古いからじゃなくてファームのバグじゃないの?
あるいはファイヤーウォールの設定?
回線業者がそれを放置したら苦情殺到だからまずありえない

エンドユーザーのルーターならそれを使いたいやつは
ファームの更新するか買い換えるだろうから気にしなくていいんじゃね?

企業内のネットワーク事情?、ゴッドノウズw
580デフォルトの名無しさん:2010/06/30(水) 22:20:07
>>579
そういうのに当たる確率の話でしょ
581デフォルトの名無しさん:2010/07/01(木) 13:59:05
>>579
古いというかバグというか、それ以前のルータが氾濫してるんだ。

フラグメントされたパケットはTCP/UDPのポート指定されたフィルタには
適用されませんだとか、フラグメントされたパケットはNATに対応してませんだとか、
そもそも仕様さえ無くサクっとdiscardしてicmpも返さない糞ルータが
世の中にはたくさんあるからな。
582デフォルトの名無しさん:2010/07/01(木) 14:36:40
世の中のルータがアホである確率をAとちたとき
n回ルータ通るときにアホに引っかからない確率
(1-(1/A))^n
583デフォルトの名無しさん:2010/07/01(木) 15:07:22
1/Aって?
584デフォルトの名無しさん:2010/07/01(木) 15:16:34
>>583
間違いだ
585デフォルトの名無しさん:2010/07/01(木) 18:37:59
(1-A)^nだね
586デフォルトの名無しさん:2010/07/01(木) 19:09:55
で、Aは?
587デフォルトの名無しさん:2010/07/01(木) 19:41:19
A<<1
よって
1
588デフォルトの名無しさん:2010/07/08(木) 02:23:31
でも、確立は確定じゃないからね
589デフォルトの名無しさん:2010/07/08(木) 03:31:10
確率が確定する確率は確立してない
590デフォルトの名無しさん:2010/07/08(木) 14:49:41
確率を確立する確率を書く律
591デフォルトの名無しさん:2010/07/08(木) 22:19:43
リッチャアアアアアアアアアン!
592デフォルトの名無しさん:2010/07/09(金) 02:52:41
PINGのような即答パケットの場合はタイムアウトはどれくらい取ればいいんだろう?
あんまり短いとタイムアウトが頻発するだろうし、
あんまり長いと応答待って次の行動を起こすような処理ではかなりの遅延になる
593デフォルトの名無しさん:2010/07/09(金) 08:49:48
>>592
悪いが1秒だ
594デフォルトの名無しさん:2010/07/09(金) 12:46:18
>>592
何が目的のPINGなの?
593じゃないがゲームとか速度が要求される通信するなら
1秒超えるやつは無視でいいかもね
595デフォルトの名無しさん:2010/07/12(月) 22:10:20
socket layer ってosi参照モデルのネットワーク層でいいんですか?
596デフォルトの名無しさん:2010/07/12(月) 22:19:47
>>592
固まったのと勘違いしない程度にできるだけ長くだろ

>あんまり長いと応答待って次の行動を起こすような処理ではかなりの遅延になる

返事が来なけりゃ待つしかねえだろ

返事が要らないんなら、はじめから待つ必要ないし
597デフォルトの名無しさん:2010/07/12(月) 22:41:21
>>595
ちゃいます
ネットワーク層からトランスポート層まで幅広く受け持っています > socket
ものによっては物理層までも
598デフォルトの名無しさん:2010/07/13(火) 20:45:21
DION規制で遅レス(三週間前)になったけど、一応カキコ

>>524
もし真面目にネットワークプログラミングと付き合う気持ちが有るなら、
RFCが原典であることを忘れないでください。書籍はあくまでもRFCの解説書です。
(>>513等の)書籍でプロトコル仕様を「大まかに把握する」のはかまいません。
でも、そのプロトコル(今回はSMTP/POP-3)を実装する段階になったら、
RFCを読み通す必要があります。(読み通す必要性に迫られることになるでしょう。)

もし「RFC=英語 --> 難解」と感じているなら、たとえば「RFC 日本語」で
ググってみてください。有志による日本語訳サイトが見つけられるはずです。
有志(ボランティア)による翻訳ですから、細かい違訳/誤訳は我慢すること。
読んでみて「変だな」とか「意味が分からん」と思う箇所があったなら、
そこだけは辞書を片手にして原文(英語)にあたりましょう。
いくら英語が苦手でも、全文を翻訳する苦労と比較すれば、楽なものなはずです。
あるいは、ここで書籍(解説書)の助けを借りてもかまいません。
最後に、RFCの原文(英語)が原典であり、この日本語訳も参考にすぎないことを忘れずに....。
599デフォルトの名無しさん:2010/07/13(火) 21:06:21
>>595
ソケット(socket)は、層(layer)ではなくてAPIとして分類される用語です。
OSI参照モデルは、その名の通り(抽象的な)階層化モデルであり、
TCPやUDPがトランスポート層に、IPがネットワーク層に対応(相当)します。
ですから、「ソケット層(soket layer)」という用語は、意味不明な誤った造語です。

なお、一般的にソケットといえば、TCP(あるいはUDP)のサービスを提供するAPIを指します。
ですから、

・(一般的に)ソケットはOSI参照モデルにおけるトランスポート層のサービスを提供する

というのが、適切な表現でしょう。

ただし、(>>597が書いているように)ソケットの実装によっては、
IPやEthernetを直接的に操作できるサービスを提供している場合があります。
これは「rawソケット」とも呼ばれ、自力でIPルータやEthernetキャプチャのアプリを
開発しようとする場合には、知っておく必要があります。
600595:2010/07/13(火) 21:08:19
>>597>>599
お前ら優しいな
ありがとうよ
601デフォルトの名無しさん:2010/07/15(木) 21:40:18
ところで、何作っているんですか?
602デフォルトの名無しさん:2010/07/15(木) 23:07:53
>>599
元々のバークレイの思想だと 「ソケットは端点定義を抽象化した概念」
ソケット作って, ファイルにコネクトすれば open が出来上がるんだが
603デフォルトの名無しさん:2010/07/17(土) 16:27:28
サーバープログラムでもクライアントプログラムも
close()やflush()はした方がいいんですよね?
604デフォルトの名無しさん:2010/07/17(土) 17:38:46
>>603
close()は必須。flush()は程度による。
605デフォルトの名無しさん:2010/07/17(土) 17:49:27
クライアントですぐ終了するならclose省略可能
サーバーは動作内容によってはcloseしないとfd足りなくなる
どっちにしても同時にいくつもプロセス起動した場合はfd足りなくなる恐れあり
出来るからといってやっていいかどうかは別
606603:2010/07/17(土) 18:08:30
>>604-605
参考になったよ
感謝する
607デフォルトの名無しさん:2010/07/18(日) 05:47:24
特定の通信手順を使ったデータ送受信アプリをWinsockを使って作っている
のですが対Winだと送受信とも問題ないのですが対Unix系だと送信が極端に
遅くなってしまいます。
Win(自作/他作) <--> Win(自作) 問題なし
Unix系(他作) ---> Win(自作) 問題なし
Unix系(他作) <--- Win(自作) 通信自体は成功するが遅い

多分send-send-ack問題だと思うのですが、これをWin(自作)の対策で
解決する方法はあるでしょうか?
608デフォルトの名無しさん:2010/07/18(日) 06:16:23
2番目と3番目の違いは何?
609デフォルトの名無しさん:2010/07/18(日) 07:05:19
まず「特定の通信手順」と「send-send-ack問題」という
>>607が(あるいは>>607の所属する組織が)定義した独自の用語を定義(説明)してくれ。
エスパーはいないから、スレ住人の各自が独自な推測を元に助言をすれば混乱するだけ。
610デフォルトの名無しさん:2010/07/18(日) 08:09:58
「send-send-ack問題」とはこれの事。これを知らない>>609はモグリ。
http://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も必読
611デフォルトの名無しさん:2010/07/18(日) 08:25:04
自分で答えを書いてるのでは?www
612デフォルトの名無しさん:2010/07/18(日) 08:34:55
モグリは引っ込んでろよ。>>608 != >>610
613609:2010/07/18(日) 08:48:03
>>610
おぉー、リンクの紹介ありがとう。知らなかったよ。勉強になった。
WinSockには詳しくないので、モグリと言われてもしかたない。
というか、WinSockにはこんなクソな問題があるの?ポカーンという感想だ。

UNIXの場合、NODELAYオプションを使うのはtelnet/sshみたいに1文字単位での
データ交換の必要なプロトコルに限定して使われるよ。(だから「オプション」なんだ。)
リンク先の例にあるようなファイル共有やオンライントランザクション処理みたいに
パフォーマンス(性能)が重視されるプロトコルではNODELAYは指定しない。
NODELAYは「TCPスタックでのバッファリング機能を無効にする」という指示だからね。

これで自分は落ちる(ROMに廻る)ので、WinSockに詳しい住人さん達、
>>607へ良いアドバイスを与えてやってくださいませ。
614デフォルトの名無しさん:2010/07/18(日) 09:02:52
厳密に速度が必要ならUDPを使うべきだよ
TCP自体が効率の悪いプロトコルしてる
ACK確認が取れるまで次のデータを送信しないからね
常に送信し続けて、ACKを並列的に処理すると数十倍の速度になる
しかし実装するのは難しいけど
作ろうとしたけどうまくいかない
615デフォルトの名無しさん:2010/07/18(日) 09:57:05
サーバ側が他作だからTCP_NODELAYで逃げるのかね。
作り直すならSCTPも面白い。
616デフォルトの名無しさん:2010/07/18(日) 11:37:30
暇なのでP2PのDHTを実装しようかなって思っているんですが、
それなりに難易度高いですかね?
617デフォルトの名無しさん:2010/07/18(日) 12:10:33
>常に送信し続けて、ACKを並列的に処理すると数十倍の速度になる

ん?
618デフォルトの名無しさん:2010/07/18(日) 14:41:05
>TCP自体が効率の悪いプロトコルしてる
>ACK確認が取れるまで次のデータを送信しないからね
このスレって知ったかでデタラメ言う奴多すぎ。
619デフォルトの名無しさん:2010/07/18(日) 15:04:51
>>617,618

>>614はTCPを(ベーシック手順のような)交互応答プロトコルだと勘違いしているみたいだけど、
人にUDPを勧めておきながら(「UDPを使うべき」)、自分では実装できないレベルの人だから、
スルーしてあげるのがいいのではないかと思われる。
620デフォルトの名無しさん:2010/07/18(日) 16:03:50
>>619
違うの?ACK来なかったら再送するでしょ
再送分を送ってる間は結局待ってるようなもんだし
実質的に交互応答になってるんじゃないの?

それと実装出来なかったとは言ってないTCPより早く出来なかっただけw
621デフォルトの名無しさん:2010/07/18(日) 16:17:23
>>620
「ウインドウサイズ」とか、
その制御の仕方はご存じですか?
622デフォルトの名無しさん:2010/07/18(日) 16:33:15
>>620
>それと実装出来なかったとは言ってないTCPより早く出来なかっただけw

「厳密に速度が必要ならUDPを使うべき(>>614)」であり、それを実証しようとしたけど、
失敗した(「TCPより早く出来なかった」)のだろ?当初の目的が達成できなかったのだから、
それは一般的に「実装できなかった」と呼ぶのだよ。動かなかったなんてのは論外だ。
この期に及んでのいい訳は見苦しい。
623607:2010/07/18(日) 18:17:38
「特定の通信手順」はDICOMという医療関連の規格なのですが、すでに多くの対応ソフトが
存在するので問題はこっち(自作)側で対応する必要があり、今回の質問となりました。

「TCP_NODELAY」は受信側が遅延ACKをやめて即ACKするためのものと思ってましたが、送信側が
ACK待ちしない為のものだったのですね。確かにこれならうまくいきそうです。
ただし、今回問題となったUnix系サーバとの接続テストは、次回何時やるか分からないので
実際の動作確認はすぐには取れそうにありません。
624デフォルトの名無しさん:2010/07/18(日) 20:23:15
>>623
パケットキャプチャソフトで覗いてやるということはしないのか?

想像だけでやってるよりよっぽど近道だぞ






625609:2010/07/18(日) 22:31:39
>>623
まず、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程度)に収まるはずです。

(続く)
626609:2010/07/18(日) 23:17:07
(>>625の続き)

次に、原因が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を無効にしても無問題であるはずです。
627デフォルトの名無しさん:2010/07/18(日) 23:24:36
>>623
>「TCP_NODELAY」は受信側が遅延ACKをやめて即ACKするためのものと思ってましたが、送信側が
>ACK待ちしない為のものだったのですね。

まだ違うよ。
628デフォルトの名無しさん:2010/07/19(月) 00:10:48
send-send-ack問題なんてそんなの用語として確立しているものじゃないし、
そんなバグは今時のWinSockでは当然の事ながら解決されてるだろ。
パケットキャプチャもやらないで「たぶん〜問題のせい」ってモグリにも程
があるって感じ。

629デフォルトの名無しさん:2010/07/19(月) 00:16:37
納得行くまでやらせて桶
630607:2010/07/19(月) 11:18:44
DICOMの仕様まで調べてもらってありがとうございます。
現時点の実装では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サイズを調整したり、ログ出力とか
出来るようにしいろいろ試してみたいと思います。
また、みなさんが言われるようにパケットキャプチャを行なえる環境を準備できるか
調整してみたいと思います。
631デフォルトの名無しさん:2010/07/19(月) 13:57:03
環境準備って、フリーソフトでいいがな
632デフォルトの名無しさん:2010/07/20(火) 21:55:42
ソケットディスクリプタはソケットを識別する物ってことで、おk?
633デフォルトの名無しさん:2010/07/21(水) 10:19:58
ファイルディスクリプタみたいなもの
634デフォルトの名無しさん:2010/07/21(水) 11:06:20
同じものみたいな
635524:2010/07/21(水) 18:03:42
>>598
ご丁寧なお返事、ありがとうございます。
おっしゃるとおり、書籍は所詮「概説」でしかない事は読んでいて実感しているところです。
特に>>520の御指摘どおり、MIME関係は本当にややこしい&本には書いてないコトだらけですね。

RFCの日本語訳については、googleの先頭に出てくるのが↓ですね
http://www5d.biglobe.ne.jp/~stssk/rfcjlist.html
細かいコマンドなどについては、こちらで逐一確認することにしましょう。
ありがとうございました。
636デフォルトの名無しさん:2010/07/21(水) 18:12:05
メールは世の中に適当実装があふれてるから
それ全部対応しないといけないし勉強とかが目的ならあまりお勧めしない
何年も掛かる
637デフォルトの名無しさん:2010/07/21(水) 18:20:02
>>636
指示されたエンコードで可視可したら文字化けトラップ ですな
638デフォルトの名無しさん:2010/07/21(水) 20:33:38
>>635
> http://www5d.biglobe.ne.jp/~stssk/rfcjlist.html

ひさしぶりに眺めたらこれにワロタ

RFC 864 文字が湧いて出るプロトコル
639デフォルトの名無しさん:2010/07/22(木) 08:33:21
>>637
半角カナを平気で使うリテラシの無いユーザもいるから、メーラの実装は大変だよね
640デフォルトの名無しさん:2010/07/22(木) 14:20:18
WinsockとUDPを使った送信プログラムを作成しています。
ある異常系の試験を行っていて気がついたのですが、
サーバーへの接続後、サーバー側のLANケーブルを抜いた場合の挙動が
OSによって異なることが分かりました。

具体的にはWindowsXPではsendtoでデータを送信しても即座に処理を戻すのですが
(GetTickCountでとると0ms)
WindowsVistaや7では500msから3000ms程度sendto関数の応答が帰ってこなくなりました。

UDPは信頼性がないため、送りっぱなしと思っていたのですが、Vista以降の
ネットワーク実装が変わったんでしょうか???(ICMPでもチェックしてる???)

スレチならすいません・・・
641デフォルトの名無しさん:2010/07/22(木) 15:04:11
>>640
vistaからarpの挙動が変わったようだけど。
642デフォルトの名無しさん:2010/07/22(木) 15:19:11
>>641
レスありがとうございます

↓この辺が関係ありそうですね。
http://support.microsoft.com/kb/949589/ja
調べてみます。
643デフォルトの名無しさん:2010/07/22(木) 15:32:07
>>639
本文に使用する分には問題なくね?
644デフォルトの名無しさん:2010/07/22(木) 15:36:53
「問題なくね?」とか書く30代がきもいんですが。
645デフォルトの名無しさん:2010/07/22(木) 15:49:46
本文に半角は問題ありますが、人格を責めるような書き込みがきもいです。
646デフォルトの名無しさん:2010/07/22(木) 17:48:33
「きもい」なんて表明しないと気が済まない人がきもいんですが。
647デフォルトの名無しさん:2010/07/22(木) 19:51:43
>>640
> 具体的にはWindowsXPではsendtoでデータを送信しても即座に処理を戻すのですが
> (GetTickCountでとると0ms)
間に何が入っているかにもよると思うんだが
648デフォルトの名無しさん:2010/07/22(木) 20:41:44
>>640
別々のネットワークに置いても、挙動は同じなの?
っと。
649デフォルトの名無しさん:2010/07/22(木) 23:08:24
はぁ?
650デフォルトの名無しさん:2010/07/23(金) 12:54:05
低レベルなパケットのやり取りをすると
いくら待機を制御しても連続してパケットがくるとCPU使用率が100%になる
本来ならカーネルがやってるからCPU使用率には反映されないだけなんだろうけど
ユーザーサイドのアプリケーションだと出てくる
結局は同じことだとしても気持ちが悪い
CPU使用率を下げる方法ってあるの?
651デフォルトの名無しさん:2010/07/23(金) 13:02:04
>>650
カーネル、ユーザランド間の状態遷移。イベント通知、全然同じじゃない。
652デフォルトの名無しさん:2010/07/23(金) 13:25:39
>本来ならカーネルがやってるからCPU使用率には反映されないだけなんだろうけど

???
653デフォルトの名無しさん:2010/07/23(金) 13:50:49
>>652
パケットの並び替えとか再送処理とかをカーネルモードドライバがやってて
ドライバのCPU使用率は画面には出てこない
小さいパケットをループで回して処理するようなことをユーザーアプリでやったら
CPU使用率に反映されて100%になる
カーネルレベルでやろうがユーザーレベルでやろうが同じことをやろうとしたら
リソースコストは同じだけども、見た目が悪いのでCPU使用率に反映させない
方法はないものだろうか
654デフォルトの名無しさん:2010/07/23(金) 14:13:56
sleepはさめばいいんじゃね
655デフォルトの名無しさん:2010/07/23(金) 14:30:34
>>654
sleepしたら通信が遅くなるでしょ
656デフォルトの名無しさん:2010/07/23(金) 14:42:25
> 連続してパケットがくるとCPU使用率が100%になる
連続してパケットが来たときに、自前処理やってるんだから100%になっても不思議じゃないよね。
その処理分を「CPU使用率」から除外したいってこと?

無理なんじゃね?
657デフォルトの名無しさん:2010/07/23(金) 14:46:59
>>653
>カーネルレベルでやろうがユーザーレベルでやろうが同じことをやろうとしたら
>リソースコストは同じだけども

違うことをやってるから、結果CPU使用率が異なるんだとは思わないんだろうか。
658デフォルトの名無しさん:2010/07/23(金) 14:55:03
専用のドライバ書くとかw
659デフォルトの名無しさん:2010/07/23(金) 14:59:37
え、これってネットワークが鬼畜に速いかPCが遅すぎるとかいう話?
それともリアルタイムで糞重いエンコーディングとか画像処理系のフィルタリングかけてるとか?

だったらもっと速いPC買おうぜ
要するに処理能力が足りてないんだよ
660デフォルトの名無しさん:2010/07/23(金) 15:11:24
>>659
UDPデータが連続して来るのにネットワーク速度はあんまり関係ないよね
ローカルLAN同士の通信で1000バイトやそこらのパケットの連続を
ループでまわすと処理の大小はあんまり関係ないと思うのだけど
661デフォルトの名無しさん:2010/07/23(金) 15:57:32
sleep っつーか yield 挟むだけでも遅くなるような処理なの?
そんな膨大なデータやりとりするなら、しゃーないんじゃないかなあ
662デフォルトの名無しさん:2010/07/23(金) 15:58:14
え?UDPの話なの?
663デフォルトの名無しさん:2010/07/23(金) 16:02:18
UDPでsocket使ったユーザレベルアプリがCPU使用率100%になるって話?
664デフォルトの名無しさん:2010/07/23(金) 17:06:42
UDP受信ね
665デフォルトの名無しさん:2010/07/23(金) 17:32:28
なんかこの話題振ってる人不愉快
666デフォルトの名無しさん:2010/07/23(金) 18:13:05
>>653
CPU使用率って誰が管理してんの?
667デフォルトの名無しさん:2010/07/23(金) 18:17:58
単に非blockモードでreceiveを連続的に発行しているから
CPU使用率が100%になっているだけだと推測。
selectあるいは(Win32の)イベントオブジェクトで
UDP受信を非同期処理で実現していれば、
(一般的には)CPU使用率が100%になることはありえない。
668デフォルトの名無しさん:2010/07/23(金) 18:25:57
>653
>>見た目が悪いのでCPU使用率に反映させない方法はないものだろうか

 今日の晩ご飯はカレーライスがいい、カレーライスじゃなきゃ絶対にイヤダ!!

と言っているガキの戯言にしか聞こえない。あるいは、

 中間試験の英語と数学で赤点をとってしまった。母親に知られるとやばいので、
 それを隠し通せる方法はないものだろうか?

でもいい。質問の内容がプログラミング相談室向けでは無い。
お子様向け人生相談室に合う話題だ。
669デフォルトの名無しさん:2010/07/23(金) 18:40:53
>>667
もちろんロックを実装して何も無い時にCPU負荷が上がらないようにしてるけど
データベースの1レコードを1つのパケットにして何十件かをまとめて送るんだけど
もちろん転送効率を落としたくないから可能な限り早く発送して再送をする
ローカル環境では50ミリ秒前後の遅延がロスが少ない感じだけど
この頻度でも受信側はループして処理すると100%になるよ
670デフォルトの名無しさん:2010/07/23(金) 18:53:17
>>669
プラットフォームはWindows(WinSock)でいいのかな?以下、Yesとして答えるよ。

>>もちろんロックを実装して何も無い時にCPU負荷が上がらないようにしてるけど
ロックというのはWin32 APIのクリチカルセクションのことかな?
これは資源の排他制御に使う操作だから、これをループに組み込めばCPUを無駄に消費するのは当然。
>>667で書いたように、selectあるいはイベントオブジェクトで実装する必要がある。
671デフォルトの名無しさん:2010/07/23(金) 19:19:58
>>667はそういう意味で言ってないよ
言語はC#でWaitHandleというものがある
恐らくWaitSingleObject APIをラップしたものだろうと思う
確かにコストは大きいけどCPU使用率に極端に影響するほどのコストではないと思うけどな
672デフォルトの名無しさん:2010/07/23(金) 19:21:52
どっちかというと受信したデータを加工する作業が負担になってるし
これは省略出来ない処理なんでどうしようもない
673 ◆0uxK91AxII :2010/07/23(金) 21:30:57
>>650
kernelでCPUを喰っているなら、HWを買い換える。
userでなら、糞なprogramを書き換える。
674デフォルトの名無しさん:2010/07/27(火) 12:39:17
Windows のコマンドラインアプリで netsh ってあるけどこれってシスコCLIみたいだなーと思ったら、まんま移植したものっぽいね。
netsh ってWindowsでサーバー構築してる人が使うものなんですか?
675デフォルトの名無しさん:2010/07/27(火) 12:53:44
べっ、別にサーバー以外で使ってもいいんだからねっ
676デフォルトの名無しさん:2010/08/11(水) 02:17:22
Winsock2について質問です。

クライアント側で FD_CLOSE が呼ばれるのはどういうときでしょうか?
・サーバ側がclosesocketしたとき
・サーバ側がshutdownしたとき
・クライアント側がclosesocketしたとき
・クライアント側がshutdownしたとき
677デフォルトの名無しさん:2010/08/11(水) 11:08:45
>>676
上3つじゃね
678デフォルトの名無しさん:2010/08/11(水) 12:50:50
何故ドキュメントを読まないのだ。

http://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.
679デフォルトの名無しさん:2010/08/11(水) 16:01:56
誰か訳してください
680デフォルトの名無しさん:2010/08/11(水) 19:31:15
プログラミングは中学卒業してからにしましょう。
681デフォルトの名無しさん:2010/08/11(水) 22:52:07
>Winnyの場合,待ち受けポート番号は1024番以上からランダムに選ばれます。
何故、ランダムに待ち受けポートを変更しても通信が出きるんですか?
682デフォルトの名無しさん:2010/08/11(水) 22:56:33
>>680
英語力も高くなるよ、まじめにプログラミングすれば…
683デフォルトの名無しさん:2010/08/11(水) 23:54:35
>>681
相手が何番ポートか分かってるから。
684デフォルトの名無しさん:2010/08/12(木) 00:11:01
いやそのポートの話じゃねえし
685デフォルトの名無しさん:2010/08/12(木) 00:12:21
ランダムに待ち受けポートを変更しても「相手が何番ポートか分かってるから」。
686デフォルトの名無しさん:2010/08/12(木) 02:19:57
>>681
その選んだポート番号と自分のIPアドレスを自ノード情報として拡散するから。
687デフォルトの名無しさん:2010/08/12(木) 02:46:42
>>679
>>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を受取り次第、
  残りのデータが存在するかを確認すべきである。
688デフォルトの名無しさん:2010/08/12(木) 03:27:08
自演乙
689デフォルトの名無しさん:2010/08/13(金) 17:44:10
>これは送信側のリモートエンドによるshutdownの実行、あるいはclosesocketに起因する。
つまりどういうことですか?
690デフォルトの名無しさん:2010/08/13(金) 21:35:43
>>689
リモート側アプリケーションが恣意的に回線を閉じたということ。

それともshutdownとclosesocketの意味が分からないのかな?
691デフォルトの名無しさん:2010/08/13(金) 23:57:53
× 送信側のリモートエンドによるshutdownの実行
○ リモートエンドによる送信面のshutdownの実行
692デフォルトの名無しさん:2010/08/14(土) 00:10:47
つまり、相手側がshutdown(sock,SD_SEND); 、またはclosesocketを実行した場合ってこと?
相手側がshutdown(sock,SD_RECEIVE); を呼んだ場合や、自身がclosesocketを呼び出した場合はFD_CLOSEは発生しないって事ですか?
693デフォルトの名無しさん:2010/08/14(土) 00:25:31
TIME_WAITに遷移するのは自分がcloseした時。従って自分がclosesocketした時も
FD_CLOSEが飛んでくるはず。
694デフォルトの名無しさん:2010/08/14(土) 22:44:40
test
695デフォルトの名無しさん:2010/08/21(土) 10:20:38
http://ymir.la/loda/src/ymir_10144.zip.html
たとえば上のサイトでは ダウンロードキーに moemoe と入力すると
ダウンロードできるようになりますが、
これをプログラムで行うにはどのように行うのでしょうか?
696デフォルトの名無しさん:2010/08/21(土) 11:15:56
>>695
先生、病院はこっちです
ttp://www.pri.kyoto-u.ac.jp/index-j.html
697デフォルトの名無しさん:2010/08/21(土) 12:58:53
夏だな
698695:2010/08/22(日) 10:19:19
めんどくさいんです><
お願いしますm(_ _)m
699デフォルトの名無しさん:2010/08/22(日) 18:55:19
お前みたいなバカの相手するのが、皆めんどくさいんです><
700デフォルトの名無しさん:2010/08/22(日) 19:09:47
>>695
そのページだと>>695レベルじゃ作れないかもな〜
cookie関係のプログラミング面倒くさいもん

LLで作るんだろうけど、www::mechanizeでも調べればいいと思うよ
701695:2010/08/23(月) 19:55:55
説明できないほどのどアホなんですね><
すいませんでしたm(_ _)m
702デフォルトの名無しさん:2010/08/23(月) 20:09:12
>>700
LLって何の略?
703デフォルトの名無しさん:2010/08/23(月) 20:12:02
あーなるほど、Lightweight Languageの略なのか
bashとかwshとかああいうののことか。知らなかったわ
704695:2010/08/23(月) 22:16:22
アホなのでレスの内容が理解で来ませんでした><
すいませんでしたm(_ _)m
705695:2010/08/24(火) 17:42:33
おまえらのようなクソゴミ役立たずに質問するよりも
買ったほうが作者にもいいし、経済にもいい
つまりおまえらはアマチュア同人作家以下のとんでもなくくっさいゴミむしのキチガイがはいたゲロを
食べて生きている下等生物以下のミジンコの卵
さっさとクソしてしね
706デフォルトの名無しさん:2010/08/24(火) 21:42:01
プログラミングに必要な能力は技術じゃなくて根気
面倒臭がってたら何も産み出せない
707デフォルトの名無しさん:2010/08/24(火) 22:27:43
それだけじゃない。
708デフォルトの名無しさん:2010/08/24(火) 22:29:29
意外と適性も必要らしい。
709695 :2010/08/24(火) 22:52:51
>>705
これは、俺になりすました人です
迷惑かけてごめんなさい
710デフォルトの名無しさん:2010/08/24(火) 23:29:33
>>706
下手な根気は誤った方向へ延々とハマるという場合もある。
適度に「これめんどくせ〜、もっといい方法無いかな?」というのも必要。
711デフォルトの名無しさん:2010/08/24(火) 23:35:25
>>710
いい方法ばかり探しすぎて何をすればいいのかわからなくなって何もできないのがお前
712デフォルトの名無しさん:2010/08/25(水) 02:16:33
>>711
自己紹介乙としか
713デフォルトの名無しさん:2010/08/25(水) 09:32:45
>>711
「めんどうくさがり」ってのはプログラマーに必ず必要な資質
714デフォルトの名無しさん:2010/08/25(水) 09:38:19
いい方法を探すのすらめんどくさいやつはどうするの?
715デフォルトの名無しさん:2010/08/25(水) 09:54:02
>>714
それは「めんどうくさがり」ではなく、ただの「なまけもの」だ。
一見そっくりだが大きな違いがあるので注意しよう。
716デフォルトの名無しさん:2010/08/25(水) 10:11:24
へりくつだな
717デフォルトの名無しさん:2010/08/25(水) 10:14:05
屁理屈も理屈のうちだよ
718デフォルトの名無しさん:2010/08/25(水) 10:16:23
それもまたへりくつだな
719デフォルトの名無しさん:2010/08/25(水) 10:20:42
その屁理屈も理屈のうちだよ
720デフォルトの名無しさん:2010/08/25(水) 10:22:49
それもまたまたへりくつだな
721デフォルトの名無しさん:2010/08/25(水) 10:27:58
ただ、めんどくさがるだけじゃ何もならない。 めんどくさがる為に手を動かすという資質が必要。 
めんどくさがらずにめんどくさがる。 
722デフォルトの名無しさん:2010/08/25(水) 10:31:29
それはめんどくさがりとは別の資質だ
改善したがりという資質だ
723デフォルトの名無しさん:2010/08/25(水) 10:47:11
めんどくさがりは向いていない
724デフォルトの名無しさん:2010/08/25(水) 10:53:50
そのとおり
725デフォルトの名無しさん:2010/08/25(水) 12:05:04
>>715
じゃあ、めんどくさいから他人に仕事を押し付ける人はめんどくさがり?
726デフォルトの名無しさん:2010/08/25(水) 12:11:19
PacketShader
GPUを利用したPCベースのソフトウェアルータで40Gbpsを達成

http://shader.kaist.edu/packetshader/

これからはネットワークプログラミングもGPGPUの時代ですよ!
727デフォルトの名無しさん:2010/08/25(水) 12:13:24
しかしGPGPUってハックだよなぁ。
元々GPU自体は画像処理のための物だし、
CPUが超並列化してくれる方が正統だと思うんだけどなぁ。
728デフォルトの名無しさん:2010/08/25(水) 13:51:36
頭が固いと苦労するぞ
729デフォルトの名無しさん:2010/08/25(水) 16:05:03
頭が堅い俺はCometが流行った時も批判しまくってた。
今ではHTML5で遊んでる。
730デフォルトの名無しさん:2010/08/26(木) 13:09:27
下記と同じようなことをCLRアプリで実現させたいです
HttpWebRequestでやって見ましたが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();
731デフォルトの名無しさん:2010/08/27(金) 01:45:23
732デフォルトの名無しさん:2010/08/27(金) 02:04:42
MSDNは基本的に機械翻訳だが?
733デフォルトの名無しさん:2010/09/04(土) 03:43:11
クライアント側のプログラム作ってテストしたいがサーバ側となる機器が手元に来ない
でも、自分でサーバー側応答プログラムを書くのは面倒くさい。
こんなときに使えるらくちんツールって無い?
734デフォルトの名無しさん:2010/09/04(土) 07:10:02
VM
735デフォルトの名無しさん:2010/09/04(土) 10:13:26
めんどくてもサーバー側は作る
736デフォルトの名無しさん:2010/09/04(土) 10:54:20
>>733
inetdやxinetdを使う
737デフォルトの名無しさん:2010/09/10(金) 19:34:01
テスト用の返答返すだけならクライアント書くのと大してかわらんだろう?
738デフォルトの名無しさん:2010/09/10(金) 21:10:36
結構違う場合もある
739デフォルトの名無しさん:2010/09/11(土) 00:50:06
djbのツールにいいのが有ったような
740デフォルトの名無しさん:2010/09/14(火) 11:31:53
>>733
プロトコルがテキストならnetcatとか。
741デフォルトの名無しさん:2010/09/14(火) 22:08:38
dhtの実装って難しいのか
742デフォルトの名無しさん:2010/09/18(土) 00:31:53
広く、といっても資格の勉強などはおすすめしません。資格というのはあくまで仕事に直結したものを取るべきです。
採用時に資格は一切評価しないといった建前も世間ではよく耳にしますが、折角の機会ですから本当の事を言います。評価します。マイナスの評価です。
仕事に就いていないのに資格の取得などに時間を浪費していたという事実は、少なくとも一分一秒を争う企業活動への参加を目指すなら、悪です。
学生時代のいまから時間の使い方をしっかり意識して生活してください。
社会に出れば仕事を覚えるために学生時代の10倍も20倍もハードな勉強が求められます。
もちろん必要な資格があればその中で取得します。しかしその学習量は社会人が仕事の中で日々習得する知識量のうちのほんのごく一部に過ぎません。
学生が資格の勉強に貴重な時間を費やすのは、子供が折角もらったお年玉を老後の生活資金に貯めておくようなものです。
子供のお小遣いと大人の生活費では一円の重みが違います。同様に、学生と経験を積んだ社会人とでは同じ一時間でも脳の仕事量が全く違うのです。
743デフォルトの名無しさん:2010/09/18(土) 01:36:56
どこの誤爆
744デフォルトの名無しさん:2010/09/18(土) 04:37:53
まだ人間じゃない
745デフォルトの名無しさん:2010/09/18(土) 10:07:03
>>742
お前ニートだろ?w
746デフォルトの名無しさん:2010/09/18(土) 10:41:32
天才プログラマいる?
747デフォルトの名無しさん:2010/09/18(土) 10:50:39
>>746
俺天才プログラマだけどなに?
748デフォルトの名無しさん:2010/09/18(土) 11:00:55
俺超天才プログラマだけどなに?
749デフォルトの名無しさん:2010/09/18(土) 11:06:26
天才を超えたら天才じゃないじゃん。
750デフォルトの名無しさん:2010/09/18(土) 11:08:49
おれ人災プログラマだけどなに?
751デフォルトの名無しさん:2010/09/18(土) 11:11:07
>>750
あんま迷惑かけるなよ
752デフォルトの名無しさん:2010/09/18(土) 11:12:09
MessagePackをネトゲプロトコルに使おうと思うんだけどどう思う?
753デフォルトの名無しさん:2010/09/18(土) 13:42:42
>>752
テーブルゲーム系ならいいんじゃね?
754デフォルトの名無しさん:2010/09/29(水) 22:47:12
ipsendwinというツールを使ってパケットを飛ばしてテストをしていたのですが、
ツールを終了してもパケットの送信が止まらずに困っています。
パソコンを再起動しても止まりません。
どなたか解決方法を知りませんか?
755デフォルトの名無しさん:2010/09/30(木) 05:40:00
バグってんじゃね?
756デフォルトの名無しさん:2010/09/30(木) 10:53:54
>>754
パソコンを再起動しても止まらないなら、それは受信側が悪い。
757デフォルトの名無しさん:2010/09/30(木) 13:23:23
受信側のせいでパソコンを再起動しても送信が止まらなくなる。。。
悪魔祓い師を呼ぶしかなさそうだな。
758デフォルトの名無しさん:2010/09/30(木) 13:39:29
受信側のバグで送信し続けてるように見えるんじゃね?ってことだろ。
本当にツールを終了してもPCを再起動しても送信し続けてたらそっちの方がオカルトだわ。
759デフォルトの名無しさん:2010/09/30(木) 15:58:02
質問です。

HTTPでファイルをダウンロードしたとき、
サイトにファイルのチェックサムなどが書いていない場合、
正しくファイルがダウンロードできたかをチェックする方法ってありますか?
760デフォルトの名無しさん:2010/09/30(木) 16:12:56
もう一度ダウンロードして比べてみるか、壊れていませんようにと神に祈る
いちおうTCPのレイヤではチェックサムを確認しているはず
761デフォルトの名無しさん:2010/09/30(木) 17:09:12
TCP的には内容が壊れてないことと順序は保証されてるはずなので、
Content-Lengthヘッダと、実サイズが合ってれば壊れてないはず。
762デフォルトの名無しさん:2010/09/30(木) 17:21:04
>>760
なるほどTCPは信用できますが、
プロキシを通して間接的にHTTPをやりとりしている場合はどうなのでしょうか。

>>761
> Content-Lengthヘッダと、実サイズが合ってれば壊れてないはず。
サイズで比較するのは良いアイデアですね。
早速実装してみたいと思います。
ありがとうございました。
763デフォルトの名無しさん:2010/09/30(木) 17:21:51
イラっとくるな、こいつ
764デフォルトの名無しさん:2010/09/30(木) 17:23:27
>>763
未熟者でして、イライラさせてしまい申し訳ありません。
765デフォルトの名無しさん:2010/09/30(木) 17:46:47
信用できないプロキシを使うユーザが悪いということにすればいいです
766759:2010/09/30(木) 18:38:30
実装してみましたが、プロキシ経由の場合はヘッダが書き換えられていて
内容が壊れているかどうかをContent-Lengthで比較してもわかりませんでした。
767デフォルトの名無しさん:2010/09/30(木) 19:41:04
だからチェックサムがあるんだよ。
わかれよそれくらい
768デフォルトの名無しさん:2010/09/30(木) 19:45:11
俺の股間にチェックサム!!!
769デフォルトの名無しさん:2010/09/30(木) 20:47:58
毎度大量のパケットを破棄するのですな。
770デフォルトの名無しさん:2010/10/04(月) 19:21:21
信用できないproxy挟んでいた場合、ファイルの内容やContent-Lengthどころか、
ページ内容のチェックサムだって改竄されている可能性だってあるぞ。

いろいろレイヤが混ざってるが、
・HTTP的にファイルが完全にダウンロードできたかどうかは、Content-Lengthのチェックで十分。
もしContent-Lengthが無かった場合は、HTTPのコネクションが切れた時点で転送終了と見なすしか方法はない
・ファイルの改竄を防ぐには信頼できる鍵でSSL使うしかない
771デフォルトの名無しさん:2010/10/05(火) 09:05:30
>>770
そういうことは実際に野良プロキシ大量に扱ったあとに言いなさいよ。
ファイルが壊れる原因は一度のアクセスでの転送量に制限を加えている鯖が多いからだよ。
悪意で改竄する鯖はほとんどない。
772デフォルトの名無しさん:2010/10/05(火) 09:27:06
悪意があるないなんてどうでもいいし>>770もそんなことに触れてない
773デフォルトの名無しさん:2010/10/05(火) 09:37:51
悪意があろうとなかろうとHTML以外のファイルの内容を破壊せずに弄る野良プロキシは多くない。
774デフォルトの名無しさん:2010/10/05(火) 10:50:11
>>771
そもそもそれ立派な悪意だろ
775デフォルトの名無しさん:2010/10/05(火) 11:30:58
>>774
いや、悪意じゃないでしょ。
通信量は有限なんだし、パンクしないように制限を加えるのは合理的だよ。
776デフォルトの名無しさん:2010/10/05(火) 11:31:45
× 通信量
○ 帯域
777デフォルトの名無しさん:2010/10/05(火) 11:51:38
>>775
合理的では無いだろ
778デフォルトの名無しさん:2010/10/05(火) 11:53:33
うん、日本語が変だ。
そこで合理的という言葉が出てくるのはおかしい。
779デフォルトの名無しさん:2010/10/05(火) 12:11:23
じゃあなんて言うんだよ。
WEBサーフィンの支援を目的とした中継サービスを広く提供することを目的とするなら、
ダウンロード目的の利用を牽制することも含めて
通信量に制限を加えて一回のアクセスが回線を占有し続けないようにするのは
手段として合理的だろ。
780デフォルトの名無しさん:2010/10/05(火) 12:13:46
合理的か非合理的か、悪意か善意か、なんて問題はどうでもいいよ
必要なのは修正が加えられることがあるという事実にどう対処すればいいかってことだけじゃないのん
781デフォルトの名無しさん:2010/10/05(火) 12:19:04
>>780
おっしゃるとおり。
改変が加えられることに対処する方法が無いから
ファイルのMD5をページに書いて自前で比較してくださいね、
っていうダウンロードサイトが多いんだろうなぁ。
782デフォルトの名無しさん:2010/10/07(木) 11:26:38
プログラミングの話なの?
783デフォルトの名無しさん:2010/10/07(木) 11:42:38
コードは出てこないけどプログラミングの話だよ。
技術的な話題。
784デフォルトの名無しさん:2010/10/10(日) 21:00:54
winsock の質問はここでよろしいでしょうか?

WinSock 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));
785デフォルトの名無しさん:2010/10/10(日) 21:05:35
>>784
それはルーター依存だ
ルーターによってはLAN側からWAN側のアドレスにアクセスできないものがある
最近の事情は知らんが、ちょっと昔はできるもののほうが少なかったよ
786デフォルトの名無しさん:2010/10/10(日) 21:14:08
>>785
ということは、完全に外のマシンからなら普通に繋がる可能性もあるということでしょうか。
別環境を用意して試してみます。ありがとうございます!
787デフォルトの名無しさん:2010/10/10(日) 22:08:22
TCP/IPについてなんとなくわかったつもりで体系的な知識をまるでもっていないと気付きました
勉強するのに良書があれば教えて下さい
788デフォルトの名無しさん:2010/10/10(日) 22:11:52
>>786
router が間に挟まっていて, 複数アドレスもってなければ,
router の外側 == 割り当てられているグローバルアドレス
router の内側 == プライベートアドレス + あなたのマシンもプライベートアドレス
ってのが, 普通じゃないのか?

割り当てられているグローバルアドレスにパケット投げても router に行くだけちゃうか?
その, パケットを router がどう処理するかは router の機種と, 設定次第.
789デフォルトの名無しさん:2010/10/10(日) 23:35:44
>>787
UNIXネットワークプログラミング〈Vol.1〉
を頭っからケツまで1文字も飛ばさずに読む。
読むだけでもいいからとにかく全部読む。
790デフォルトの名無しさん:2010/10/11(月) 00:06:58
>>789
ネットワークプログラミングとTCP/IPの理解はまた別物
いい加減なレスはしないように
791デフォルトの名無しさん:2010/10/11(月) 00:26:32
覚えたい目的はインターネット上で動かすアプリのデバッグでつまんないところでハマリたくないからだろ?
そうするとTCP/IPだけ覚えても、結構ハマるネタは残ってるぞ
その上にのっかってるDNSやらDHCPやらいろんな物の挙動も知っておかなきゃな


俺はそれっぽい本を見ながらlinuxマシンで実際にいじり倒して遊んで覚えた

792デフォルトの名無しさん:2010/10/11(月) 01:11:08
一冊じゃもちろん無理だし、既存のソフトの動きを調べたり、色々やることあるよね
793デフォルトの名無しさん:2010/10/11(月) 16:08:16
>>790-792
そういうのを全部ひっくるめて、一冊とにかく読めという話だ
794デフォルトの名無しさん:2010/10/11(月) 16:34:36
だったらそう言えば?最初から
つっこまれて条件後出しは無様だよ
795デフォルトの名無しさん:2010/10/11(月) 21:28:12
>>794
「頭っからケツまで1文字も飛ばさずに読む」しか書いてないよ。
それ以外の理屈は正直どうでもいい。とにかく読む。
796デフォルトの名無しさん:2010/10/11(月) 21:44:14
じゃあ全部ひっくるめとか言い出すなよ
ほんとにカスだな
797デフォルトの名無しさん:2010/10/11(月) 21:55:16
まったくだ。
798デフォルトの名無しさん:2010/10/11(月) 23:15:49
何を言っているんだお前らは
799デフォルトの名無しさん:2010/10/11(月) 23:26:09
本や資料を読む努力しない馬鹿はいい加減実務畑に来るなとしか言えない
しりませんは言い訳にならないのにいつまで甘えてるんだか
800デフォルトの名無しさん:2010/10/11(月) 23:32:55
何を言っているんだお前は
801デフォルトの名無しさん:2010/10/12(火) 00:26:11
誤爆?
802799:2010/10/12(火) 00:58:17
ぎゃー、別のところで同じような流れだったんで誤爆したごめん
803デフォルトの名無しさん:2010/10/12(火) 01:42:18
いまどきUNIXとか言われてもなあ
804デフォルトの名無しさん:2010/10/12(火) 11:03:06
>>803
UNIXじゃないネットワークなんてねーよ
805デフォルトの名無しさん:2010/10/12(火) 11:42:54
UNIXネットワークプログラミング(Vol.1)は池沼には理解できない。
池沼はネットワークプログラミングを行ってはいけない。
UNIXネットワークプログラミング(Vol.1)を読む事は資格試験。
806デフォルトの名無しさん:2010/10/12(火) 12:32:20
>>805
理解できなかったのか?
807デフォルトの名無しさん:2010/10/12(火) 13:17:27
>>806
キミでも100回読めば理解出来るかも知れませんよ。
808デフォルトの名無しさん:2010/10/12(火) 15:28:16
おまいら全員黒猫だと思えば癒される
809デフォルトの名無しさん:2010/10/12(火) 22:44:56
>>808 すまん黒猫の意味がわからん、教えてたもれ???
810デフォルトの名無しさん:2010/10/12(火) 22:53:05
MMOの小規模な奴を作ってみようと思うんだが

クライアントはC、C++で作って
サーバーをどうするか悩んでる

OSはWindowsサーバーかLinuxか

多数接続する場合、ソケット1つにつき、スレッド1つ割り当てるか
Selectで一つづつ見ていく処理にするか

あまり高速な処理が要求される内容じゃないんだが
助言求む
811デフォルトの名無しさん:2010/10/12(火) 22:56:45
各プラットフォームで最速な奴を使うべきだろ。
IOCP/epoll/kqueueとかその辺。
812デフォルトの名無しさん:2010/10/12(火) 23:01:29
linuxには詳しくなかったからその辺勉強してみます
サンクス
813デフォルトの名無しさん:2010/10/12(火) 23:22:09
>>810
もし「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〉クライアント‐サーバプログラミングとアプリケーション
あたりがバイブル的な存在で、個人的なお勧めかな。
814デフォルトの名無しさん:2010/10/12(火) 23:39:10
サーバーには玄箱を使おうと思うんだが

無謀かな?

PowrePC 233M

無謀だわな・・

ゲーム内容はWIZのオンラインみたいなのを考えてるから
リアルタイム性はそんなに高くない

けど・・

玄箱じゃ無謀だわな
815デフォルトの名無しさん:2010/10/12(火) 23:50:02
同時20人くらいならそのくらいのスペックでOKだったよ
コントロールやチャット程度ならね
画像もあると、ちと苦しい
816デフォルトの名無しさん:2010/10/13(水) 00:05:26
PPC/233ってことは初代の玄箱で、あれってメモリが64MBしか搭載されていないよね。
そうであれば、

>多数接続する場合、ソケット1つにつき、スレッド1つ割り当てるか
>Selectで一つづつ見ていく処理にするか

のどちらか(= シングルプロセス構成)にしないと厳しいだろね。

それでも、ゲーム内容にもよるが、同時100TCPコネクション程度は耐えられるんじゃないかと思う。
もちろんメモリがキツキツだから、LinuxをDebian(Sarge?)に入れ換えて、
カーネル再構築や不要なデーモン停止といった、チューニング(スリム化)作業必須が大前提になるけど。

自分なら、安い中古ノートPC(Cell/700Mhzクラス)にメモリ512MBくらい入れて、>>813
マルチプロセス構成にするんだけどね。まぁ検討しているうちが最も楽しいから、色々考えてみるが良し。
817デフォルトの名無しさん:2010/10/13(水) 00:06:29
>>813
クライアント同士でのデータのやりとりが多発するMMOでクライアントごとにプロセスはないだろ・・・
818デフォルトの名無しさん:2010/10/13(水) 00:16:25
>>817
まったくだ >>813 のド素人振りがよくわかるレスだよな
819デフォルトの名無しさん:2010/10/13(水) 00:18:13
>>814
そのスペックあれば, ネットワークのレイテンシーさえビハインド出来れば問題ないよ
動的生生成ページでを秒あたり100程度のトランザクションは何とかなる
ただし, いかに2次記憶を動かさないかが腕のみせどころになるが………
820デフォルトの名無しさん:2010/10/13(水) 00:19:44
全部UDPでやったろうか

パケット紛失しまくり
821デフォルトの名無しさん:2010/10/13(水) 00:20:50
>>818 ならどういう設計がいいんだ?
822デフォルトの名無しさん:2010/10/13(水) 00:23:50
いまゲームのロゴ用フォント作ってる
タイトルはWearezardryにしたい

フォント作り難しい・・・
823デフォルトの名無しさん:2010/10/13(水) 00:48:41
しーん
824デフォルトの名無しさん:2010/10/13(水) 03:19:37
>>810
クライアントのターゲットがWindowsなら、サーバーもWindowsにしておいた方が
コードを共有できる部分も増えてらくなのではないかと思う。
Windows Direct Accessとか使うと、楽できるかもしれないし。

クライアントの数が数百とかになるなら、
クライアント毎にスレッドを起こしていたらサーバーが持たない。

>>820
リアルタイム性の高いゲームならUDPもあり。
TCPで再送している間に遅延が起こるくらいなら、UDPで遅延したデータは捨てる。
825デフォルトの名無しさん:2010/10/13(水) 04:35:40
>>817
いや、「単純」という文脈であれば間違ってないよ。

「スケーラビリティ」とかって単語が出てくるようであれば、
言語云々は別として、ステートマシンしかないけど。

Pythonが書けるなら、twistedをおすすめするのだが…
826デフォルトの名無しさん:2010/10/13(水) 09:05:04
Wearezadryのロゴできたーうぉー
慣れないInkscapeと一晩格闘してやっとこできた・・
普段絵なんぞ触らんからスゲー時間かかったわ

どう?それっぽいかな?

http://uproda11.2ch-library.com/268426saK/11268426.gif
827デフォルトの名無しさん:2010/10/13(水) 10:06:53
>>825
ねーよ
828デフォルトの名無しさん:2010/10/13(水) 10:59:07
>>825
言語としてPythonはねーわ・・・
829デフォルトの名無しさん:2010/10/13(水) 11:07:59
>>825
fork方式でプロセスわけちゃうとスレーブ同士のIPC通信が必要になるケースなんだから
全然「単純」にはならんのじゃまいか?

それとtwistedって並み居る非同期フレームワークの中で、何がいいの?
今だとnode.jsとかも流行りだけどさ
Pythonでもeventletなら、コルーチン+モンキーパッチを利用して
非同期特有のコールバックでなく、同期のソケットとと全く同じpull型の
記述が出来るので、FSM書き下すより楽ですよって主張と受け取れるんだけどさ
eventletみたいなのは、さすがに動的言語でないと無理だなあと思う
ゲームでコルーチン使いたくてスクリプティングにluaとかが使われるのと同じだよね

なんか思いつきで適当なことホザいてるようにしか見えない
830デフォルトの名無しさん:2010/10/13(水) 11:16:27
forkフルボッコでわらた
831デフォルトの名無しさん:2010/10/13(水) 12:17:03
> それとtwistedって並み居る非同期フレームワークの中で、何がいいの?
楽なのはlibeventを使う方法
パフォーマンスも悪くない
832デフォルトの名無しさん:2010/10/13(水) 12:40:38
>>831
いやそういうことじゃなくて
何でtwistedなんか薦めるの?という突っ込みだったんだが…

まあいいか(どうでも)
833デフォルトの名無しさん:2010/10/13(水) 14:09:10
>>832
知るかボケ >>825 にレスしろよ
834デフォルトの名無しさん:2010/10/13(水) 14:21:30
>>833
は?
>>831が俺(>>829)に(的外れな)レスをつけてるみたいだから答えただけなんだが?
835デフォルトの名無しさん:2010/10/13(水) 14:26:29
>>834 = >>832 = >>829 かよw
どれも馬鹿まるだしのレスだなw
836デフォルトの名無しさん:2010/10/13(水) 18:25:53
python って asyncore で間に合っちゃうよね
twisted に拘るメリットって何があるのか教えて欲しい
(煽りじゃなくてマジで)
837デフォルトの名無しさん:2010/10/13(水) 20:01:26
今理解できてるものでやれ
何をデバグしてるのかわからなくなるぞw
838デフォルトの名無しさん:2010/10/13(水) 20:05:51
>>826
剣が鉛筆みたいだ、そこいじればカコイイ
839デフォルトの名無しさん:2010/10/14(木) 00:00:43
eventletもそれなりに重いがtwistedは選択技にすら上がらねー
840デフォルトの名無しさん:2010/10/14(木) 00:12:53
なんでerlangが出てこないんだ
841デフォルトの名無しさん:2010/10/14(木) 11:37:28
>>840
選択肢としてふさわしくないからでしょう。
842デフォルトの名無しさん:2010/10/19(火) 06:16:18
Windows環境のJavaのソケット通信で質問させてください。

ソケット常時接続で通信を行うサーバ・クライアントモデルの
クライアント側アプリケーションを作っています。

OSはWindow 2003、JavaはJDK6を使用しています。

クライアント - サーバ間は、
[クライアント] - [スイッチングハブ] - [ルータ] - [サーバ]
という構成になっています。

クライアント側からアクティブオープンでソケット接続後、
常時read用スレッドおよび、write用スレッドの2つの非同期
スレッドでソケットを共有して使用しています。

ここで [スイッチングハブ] - [ルータ] 間のLANケーブルを
抜き、しばらくするとクライアントのread処理で例外
「SQLException(connection reseted)」が発生します。
843842:2010/10/19(火) 06:19:50
Wiresharkで確認してみたところ、LAN線を抜いた後の
write処理でTCP PSHのリトライを繰り返しており、
リトライを7〜8回繰り返した後に、上記の例外が
出力されます。

このとき、クライアント側からFINもRSTも出力されていません。
クライアント側の実装で、shutdownもcloseもしていませんでした。

別途クライアントをJavaのプログラムからWinsock2.0を使用した
ツール(SocketDebugger)を使用してサーバに接続し、LAN線を
抜いた後にツールからデータ送信(write)を行ったところ、
Wiresharkのログは上記と同じものが出力され、ツールには
WSAECONNABORTED(10053)が発生したと出力されました。

WinsockがTCP PSHのリトライオーバによりソケットを
破棄したものと思われるのですが、このソケットの破棄が
行なわれないようにすることは可能でしょうか?
可能な場合、どのようにすればよいか、ご教示願います。

上記現象でソケット破棄されることがWinsockの仕様(避けられない)
場合、TCPのリトライ回数やリトライ間隔(時間)を増やすことは
可能でしょうか?

以上、よろしくお願いします。
844デフォルトの名無しさん:2010/10/19(火) 10:34:41
頑張ってる様子が伺えるが、混乱してるよ。例えば

・「SQLException」->SQL使ってんのか。通信の上にいろんなのかぶりすぎでは
エスパー以外わからんよ。
・「ソケットを破棄したものと思われる」->「思われる」じゃだめだろ。
ここが発端で「ソケット破棄を防ぐには〜」とおかしな方向に行ってる。

察するところ
TCP接続が切れてもアプリとしては何事もなかったように通信を続けたいのか?
それなら、エラーを適切に判断して適切に再接続して元の処理に戻るだけ。

(俺が作るなら関数コールでの制御じゃなくて状態変数を使って制御するが
それはまあ別の話)

アドバイス:
いきなり難しいことをやろうとして技術が追いついてないっぽいががんばれ。
自分が作ろうとしてるものをちゃんとレイヤ化して考えといい。
エラー発生箇所をもっと(OSのAPIまで)絞り込むくせをつけるといい。
845デフォルトの名無しさん:2010/10/19(火) 10:39:40
一時的にケーブルが引っこ抜けたとしてもTCPのコネクションは切断したくないって話じゃないかなぁ
846デフォルトの名無しさん:2010/10/19(火) 10:39:45
大事なこと削っちゃった。

ソケットは「破棄」されてないと思うぞ。
847デフォルトの名無しさん:2010/10/19(火) 10:53:52
>>845 それなら、
・接続時にキープコネクションを有効にせず
・切れてる間に一切通信しようとしなかった
なら可だが、それ以外なら無理ジャネーノ。

まずは本人が何をやりたいのかだな
848842,843:2010/10/20(水) 03:57:56
みなさん、回答ありがとうございます。
つたない内容の文章を読んでいただき恐縮です。

>> 844 さん
「SQLException」は、「SocketException」の誤りでした。
 申し訳ありませんでした。

> 察するところ
> TCP接続が切れてもアプリとしては何事もなかったように通信を続けたいのか?

 ご指摘の件ですが、私個人としては「例外を検知したので、
 ソケットの再接続を行う」という実装にしたい(している)のですが、
 サーバ側のアプリ開発の方から、
 「経路のチェックは、アプリレベルのヘルスチェック送受信の
  タイマーでのみ管理すべきであり、それ以外の制御下でソケットを
  切断することは、基本認められない」と言われており、

 >> 845 さんが言われました、
 > 一時的にケーブルが引っこ抜けたとしてもTCPのコネクションは
> 切断したくないって話じゃないかなぁ

を実現する方法がないかを模索しているところです。

# アプリレベルのヘルスチェックについて、前回説明しておりませんでした。
  申し訳ありません。
849842,843:2010/10/20(水) 04:36:44
# またヘルスチェックのほかに、アプリレベルで電文の
 送達管理(電文送信時、相手から電文受信電文が送付される)
も行っております。

さらにサーバ側アプリ開発者からは、
「Javaで実装しても、LANケーブル断線時にソケットが
勝手に切断されることはないはず」
ということを言われ、できる術を探しているところです。

# サーバ側開発者の方に対策方法を聞ければよいのですが、
  立場的に聞けない関係なのです・・・。

現状、調査があいまいな状況なのですが、私見では
>>847 さんが言われた
> ・接続時にキープコネクションを有効にせず
> ・切れてる間に一切通信しようとしなかった
> なら可だが、それ以外なら無理ジャネーノ。

ではないかと思っております。

いずれにしても、>>845 さんからもアドバイス
いただいたとおり、もう少し深く調査し、原因を
絞り込んでみます。
850デフォルトの名無しさん:2010/10/20(水) 05:32:37
宿題は宿題スレへ
851デフォルトの名無しさん:2010/10/20(水) 09:07:41
>>849
原因と言うか、送信タイムアウトでソケットが切断されるのはTCPの仕様なので、
その要求を満たそうとするなら必然的にTCPを使用しないと言う選択肢しかないと思うよ。

通信経路のヘルスチェックが、厳密にはソケット自身でしか出来ないですしね。
間に介在しているすべてのルーターやHUB、プロキシをクライアント側の
ヘルスチェックでどうこうできるものでもないし。

とりあえず、その要求仕様を突き付けている馬鹿に、サンプルプログラムでも
書いてもらうしかないじゃない?
852デフォルトの名無しさん:2010/10/20(水) 09:18:20
その要求仕様を突き付けている馬鹿は >>849 自身のことだろ

だから

># サーバ側開発者の方に対策方法を聞ければよいのですが、
>  立場的に聞けない関係なのです・・・。

こんなことになってんだよw
853デフォルトの名無しさん:2010/10/20(水) 13:29:14
サーバ屋さんが言ってるのが正しく、切断はされないと思う。
ケーブル抜いてタイムアウトしたら、writeかreadでEWOULDBLOCKが返ってこないか?

ただし、期間が余り長いとDHCPのリース期間終了とか他の要因で切断はある。
854デフォルトの名無しさん:2010/10/20(水) 14:10:38
855 ◆0uxK91AxII :2010/10/20(水) 18:41:24
Windows で TCP/IP のメディア検出機能を無効にする方法
http://support.microsoft.com/kb/239924/

んゆ。
856デフォルトの名無しさん:2010/10/20(水) 19:12:09
>>855
無効にならねーよバカ
857デフォルトの名無しさん:2010/10/21(木) 00:43:29
メディア検出は、サーバPCもクライアントPCも有効のままだよね。
PCが直接つながってる線のリンクはダウンしないって話でしょ。



手元の資料によると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
には載ってない。
858842:2010/10/21(木) 08:08:33
>>851 さん
その後、サーバ側のアプリ実装者からソケットの実装処理を
抜粋し、紙で提供していただく機会があったのですが、
java.net.Socketを使用した一般的な実装で、特別なソケット
オプション指定やロジックを使用しているようには見えない
ものでした。

その実装で、問題(TCP自動切断)が発生したことがないと
言われており、ますます混乱しているところです・・・。
(その方の実行環境は、WindowsXP SP3だそうです。)


>>852 さん
私がその立場にいたのでしたら、「すいません」と言って
仕様変更するという調整もできたかもしれないのですが・・・(;_;)
859842:2010/10/21(木) 08:12:51
>>853-857
情報提供ありがとうございます。
現在行っている調査の参考にさせていただきます。

# 進展のない話を書いてもスレ汚しですね。
  調査結果がなんらか出てから書き込むようにします。
860デフォルトの名無しさん:2010/10/21(木) 19:39:47
Windows
http://support.microsoft.com/kb/158474
MaxConnectRetries
MaxDataRetries
Linuxなら
tcp_retries1,tcp_retries2とか?
861デフォルトの名無しさん:2010/10/22(金) 19:57:54
リトライ回数=無限を設定できない限り解決にならないし
大きな値を設定したとしてもリトライ間隔がえらいことになるぞ
(リトライ毎にタイムアウト時間が倍々になったり。。。)
ワケの分からないことは止めて普通に再接続処理しなきゃダメだよ
862デフォルトの名無しさん:2010/10/23(土) 16:29:22
winsockで質問です。
相手から送られてくる文字列って何バイトか分からないと思うんです。
なので、あらかじめ文字列バッファを適当に確保しとくしかないと思うんですが、
なんとか送ってきたデータのサイズをチェックして動的確保したバッファにrecvできるような
方法ないですか?
863デフォルトの名無しさん:2010/10/23(土) 16:41:58
それを書くのがプログラマの仕事だ
864デフォルトの名無しさん:2010/10/23(土) 16:43:23
わかったよ
865デフォルトの名無しさん:2010/10/23(土) 21:12:46
>>862
最初にバイト数を書いといてもらう
で、バイト数が書いてある所だけ読んで確保する
866デフォルトの名無しさん:2010/10/23(土) 22:28:35
>>865
素晴らしい発想ですね。ありがとうございます。
867デフォルトの名無しさん:2010/10/24(日) 00:48:57
つ[車輪の再発明]
HTTPって本当に良く考えてるなと思うわ
868デフォルトの名無しさん:2010/10/24(日) 01:11:57
俺は学校で行なわれている教育を車輪の再発明とは表現しないが、する人もいるのかな?
869デフォルトの名無しさん:2010/10/24(日) 09:15:40
>>867
なぜそこでHTTP・・・
ストリームもので必ずついて回る問題だから
車種も無限にあるし、車輪は無限にあるよ
870デフォルトの名無しさん:2010/10/24(日) 09:32:27
HTTPは>>862の要望にはそぐわないけどな。
ヘッダサイズが不明だから。
871デフォルトの名無しさん:2010/10/24(日) 09:32:54
「車輪の再発明」と言い出す奴は「私バカです」と言っていると思っても、99%までは間違いない。
872デフォルトの名無しさん:2010/10/24(日) 11:20:49
>>868
ここは学校じゃないぞ?宿題スレでもないし
873デフォルトの名無しさん:2010/10/24(日) 11:41:12
MacBinary は偉大だったというオチ
874デフォルトの名無しさん:2010/10/24(日) 12:08:33
>>869
でも解決策は無限にないよね
どれもこれも似たような解決策ばっかり
まあ、ひねったプロトコル書かれても面倒くさいだけなんだが
875デフォルトの名無しさん:2010/10/24(日) 12:13:21
すごく重要なサーバーを書く場合はやっぱりCが一番かな
C#とかJavaは危険かな
876デフォルトの名無しさん:2010/10/24(日) 12:17:20
危険ねえ
877デフォルトの名無しさん:2010/10/24(日) 12:34:41
危険か安全かならCの方が危険だと思う。
878デフォルトの名無しさん:2010/10/24(日) 13:08:44
危険って言ってる奴がCでsegmentation faultとかの例外も書かないのが世の常
879デフォルトの名無しさん:2010/10/24(日) 13:10:19
書くとろくなコードが生まれないからそのままでおk
880デフォルトの名無しさん:2010/10/24(日) 13:10:31
例外が出るほうがおかしいでしょ
881デフォルトの名無しさん:2010/10/24(日) 13:14:30
何の危険か知らんが、言語で判断するとか無いわ
そういう妄信的なブランド志向は、品質を見定めるのに邪魔になるぞ
882デフォルトの名無しさん:2010/10/24(日) 13:15:19
はげどう
883デフォルトの名無しさん:2010/10/24(日) 13:17:54
例外が出るほうがおかしいってI/Oで読み取りエラーとかブロッキングソケットが切断されたとか
どうすんだ?Cでお得意の無視?
884デフォルトの名無しさん:2010/10/24(日) 13:18:27
例外でも何でも無いなあほうが
885デフォルトの名無しさん:2010/10/24(日) 13:19:33
例外hookしないといけないの?
886デフォルトの名無しさん:2010/10/24(日) 13:21:30
なんだ例外hook一度も書いたことない奴の煽りか、つまんね
887デフォルトの名無しさん:2010/10/24(日) 13:22:48
自分のミスを例外のせいにしたいだけでしょ
888デフォルトの名無しさん:2010/10/24(日) 13:23:33
>>878
このスレって応用利かない奴がいるんだよな
単に例外ってだけ書いて具体例を挙げないほうが良いみたいよ
889デフォルトの名無しさん:2010/10/24(日) 13:31:13
これまでの流れ

Cが一番、JAVAは危険

そんな奴に限って例外処理しない

例外出るほうがおかしい

じゃあ例外出たときは?

自分のミスが原因
890デフォルトの名無しさん:2010/10/24(日) 13:49:19
>>880
そんな想定外な事をしでかしてくれるのが、ユーザとか悪意ある者なんじゃね?
891デフォルトの名無しさん:2010/10/24(日) 13:51:44
無限と有限の使い分けが中で出来てないからでしょ
892デフォルトの名無しさん:2010/10/24(日) 14:09:46
単にケースバイケースって事じゃないか、馬鹿らしい
893デフォルトの名無しさん:2010/10/24(日) 14:11:47
一般人の感覚で実装してますから、何があっても不思議じゃありませんから
894デフォルトの名無しさん:2010/10/24(日) 20:37:39
>>883
> I/Oで読み取りエラーとか
仕様レベルでどうするか決めようね

> ブロッキングソケットが切断されたとか
c じゃなくても eof 扱いで, 想定外の通信終了処理をするのでは?
895デフォルトの名無しさん:2010/10/24(日) 23:33:07
仕様w
896デフォルトの名無しさん:2010/10/25(月) 21:58:38
ここは住人のレベルのバラエティが広いんだな。
>>876-882 みたいな鋭い示唆に富んだ書き込みもあるが…
もうちょっと親切に書いてやろうよ。


>> どうすんだ?Cでお得意の無視?

sorryだなトホホ
オマエさんは(昔の俺みたいに)自分のバグを他人のせいにするタイプじゃ
ないか?気をつけなよ。(俺は>>887じゃないけどさ)

つづく
897デフォルトの名無しさん:2010/10/25(月) 21:59:50
つづき

プログラム言語を本当に使えるアタマのいいひとは、オブジェクト指向や
例外機構も、整数エラーコードでのエラー処理も、単なる道具の一つとして
適材適所で使いこなすもんだぜ。例外だけがエラー処理じゃないよ。
>>886 例えば、crt0(=mainの外)での例外処理仕様をわかったうえで
あえて書かなくて済むようにプロセス分割設計するひともいるんだぜ)



一般的には、IPネットワークの通信エラーって言うのは、割と頻繁に
(+自分以外の機械のせいでも)起こりうるものなんだ。
最近の言語(C#とか)のAPIには通信エラーを例外で返すようなものがあって
その場合はしょうがないけど、頻繁に起こりうるエラーは整数戻り値
(エラーコード)で処理したほうが、速くてスマートなプログラムが書けるんだよ。

例外っていうのは元々は、自分の担当してる責任範囲では手に負えないエラーを
大外で捕らえるためのものなんだよ。
メイヤーの「契約に基づくプログラミング」手法のアナロジーで言うと、
「いろいろ手を尽くしたけど、どうしても契約を履行できないことを
(偉い人が頭を下げて)お客(呼び元)に謝るような場合」ってこと。

I/O で読み取りエラーとかブロッキングソケットが切断されたときってのは、
Cだと普通に戻り値でエラーが返ってきて、
それを自分のプログラムで(利用元がカスタマイズ可能な)回数リトライして、
それでもダメだったら例外で返すってのが、スマートだぜ。


例外がないって書き込みは、そういうこと(と俺は理解してるよ)。
エラー処理しないってことじゃない。
898デフォルトの名無しさん:2010/10/25(月) 22:16:03
>> (利用元がカスタマイズ可能な)回数リトライ

って書いたけど、そのカスタマイズ方法っていうのは、
「関数呼び出しごとに呼び元がパラメータで指定」なんかじゃなくて、
「プログラム起動前にレジストリや環境変数に設定しておく。設定が
なければ事前に決めたデフォルト回数」
っていうレベルでいいんだぜ。


>>896が言ってる「仕様レベルで決めような」ってのはね...

リトライ回数なんかは、通信プロトコルを設計するような
設計工程(=プログラミングより前)で、普通は決めるんだ。

やらしい話だが、
「リトライ回数は、顧客との仕様調整で決定。変えるなら、
プログラム変更して再コンパイル」にしておいて、
「簡単な仕様変更」として顧客から金を取れる、
新人教育のメシの種にするっていうこともあるんだよ。


俺なら、面倒だからカスタマイズ可能な項目としておいて、
客に勝手にしろ、といいたいけどな。
899デフォルトの名無しさん:2010/10/25(月) 22:16:45
すまん >>894
900デフォルトの名無しさん:2010/10/26(火) 11:27:54
おーい、>901
>896-898な、ちょいくどいし長すぎるんだわ
スマートになるように3行ぐらいに要約しておいてくれ
901デフォルトの名無しさん:2010/10/26(火) 15:37:15
すまんかった

>>883 >>886 >>889 はレベルが低い
もっと勉強しろ

これでいいか
902デフォルトの名無しさん:2010/10/26(火) 16:55:12
最終的に>>892
903デフォルトの名無しさん:2010/10/26(火) 22:25:48
ぱっと見は例外なんだけど、実際にはただの条件分岐 みたいな書き方って
うまい方法ないかな

プログラムの7割がエラー処理になっちゃうからあんまり美しくないというか
904デフォルトの名無しさん:2010/10/27(水) 00:00:31
ぱっと身は条件分岐なんだけど, 実は例外ってのなら結構見掛けるが
逆は, あまりみたことない

うまいやつだと, 「実は例外」の部分さえ条件分岐しないことあるからなぁ

Java 辺りだと普通は条件分岐するようなところまで例外になるしな
905デフォルトの名無しさん:2010/10/27(水) 02:25:53
通信プロトコル制御の場合は7割がエラー処理だから、
必然的にエラー処理を想定したロジックになるんだよね。
言い換えると(プログラミング言語の例外機構ではなく)
エラーを条件分岐で扱うロジックによって組立てることになる。
エラー処理を正常処理に持ち込む、あるいは正常とは
エラーの一種であるという発想による設計が求められる。

アプリケーションプログラムであれば、エラーが発生しても
メッセージを表示して続行するか、あるいはダイアログでユーザに
判断を委ねることが可能だから、例外機構に頼ることは間違いじゃない。
ただし、通信プロトコル制御はシステムソフトウェアの一種だから、
例外発生は、即システム停止(UNIXであればpanic、Winであればblue screen)、
あるいはアプリケーション全体の強制異常終了の場合にしか使い道が無い、
といっても間違いではないと思う。
906デフォルトの名無しさん:2010/10/27(水) 07:44:11
そこで検査例外に意味がでてくるのですよ。

いや言ってみただけ。
907デフォルトの名無しさん:2010/10/27(水) 09:58:44
panicとかブルースクリーンまで行かなくても、例外の使い道あるよ。
プロトコルデーモンだったら単にプロセス終了するため、でいいと思う。


C++で標準になった「テンプレートライブラリ」にはリンクリストやらが
用意されてて、要素追加のときにメモリブロックの追加確保が発生して
万一メモリ確保失敗するとbad alloc 例外を投げる仕様になってる。

C++ではユーザプログラムが拾ってない例外は、crt0がアボート処理
(メモリ全解放してプロセス終了)してくれる仕様になってる。

ということは、bad alloc例外は、いちいちプログラムで拾わずにcrt0に
まかせてプロセス終了し、あとはプロセスの生存監視をしてクラスタ切り替えする
仕組みに任せる、でOKってこと。
リンクリストの追加削除でいちいちメモリエラー拾うコードがなくなってすっきり。

最大数設定とか最大通信負荷のテストを結合テスト以降で必ずやるから、
本番環境でメモリ不足が発生することは基本的にありえないしね。


通信エラーなんか例外で扱うことじゃない、正常系の一部だってことで同意見。
JavaやC#のライブラリつくったやつは、例外の意義がわかってないアホ。
908デフォルトの名無しさん:2010/10/27(水) 18:28:53
>>905
だからそれがなんとかならないかな という話なんだが。
仕方ないで済ますのは進化が無い
909905:2010/10/27(水) 19:52:16
>>907
>プロトコルデーモンだったら単にプロセス終了するため、でいいと思う。

それが>>905の「アプリケーション全体の強制異常終了」に相当するのかな、と。

>JavaやC#のライブラリつくったやつは、例外の意義がわかってないアホ。

自分はUNIX Cしか知らない(C++/Java/C#は無知)のでコメントしづらいが、
もしシステムソフトウェア向けのライブラリに例外機構を前提とするAPIが存在するとしたら、
そんなライブラリを設計した奴らは「例外の意義がわかってないアホ」だ、という意見に同意。
おそらく周囲の開発環境は異なるけど、本質的な意味では同じ視野で問題を俯瞰している気がする。

>>908
>>905で書いたのは、システムソフトウェア(カーネル/デバドラ/低レベル通信ライブラリ)を
対象にして書いたし、もしそうであれば間違った(勘違いした)主張ではなかったはずだ、と思う。
ただし、今はネットワークプログラミングが(特殊な技能を持つ)システムプログラマだけでなく、
アプリケーションプログラマあるいはエンドユーザレベルでも一般化しつつある事も認める。
(それが、こんなスレがPart.26もの長寿スレとして継続している現実を意味していると思う。)

だから、そんな普通のプログラマが普通のアプリをネットワーク対応させようとした時に、
(>>908の言う)「なんとかならないか、仕方ないで済ますのは進化が無い」という意見も理解したい。
910デフォルトの名無しさん:2010/10/27(水) 22:05:12
>>908

どうしてもやりたいならプログラムをデータ化すればできるんじゃないの。

構造体の第一変数がやるべきことで
第二変数がパラメータで
構造体の配列で「次にやるべきこと」を作って
エンジンに渡す
みたいなアレ。よくあるだろ。
GPU(グラフィック専用プロセッサ)とか
NPU(ネットワーク専用プロセッサ)に対する指示はそういう感じだよ。
細かいエラー処理は1レベル下に隠れる。


それか、「処理実行クラス」というか、ワーカクラスをつくって
そいつらを少し賢くする。作業指示するやつは、端的に指示するだけ。
そうすりゃ、「端的な指示」のソースから細かいエラー処理が消えてすっきり。
人間のチームにリーダーとメンバーがいるのと一緒よ。


ま、2つとも同じこと言ってるな。つまりメタレベルを1個上げれば
ソースの抽象度も1個あがる。
けど、ネットワークと関係ないコーディングテクの話じゃね?
911デフォルトの名無しさん:2010/10/27(水) 22:07:09
まつもと?
912デフォルトの名無しさん:2010/10/27(水) 22:13:12
あーすまん、そんで結局、
「例外投げるようなすっきり度、かつ分岐のような軽さで」
エラー処理したきゃ、

エラー処理選任のワーカを作れってこと。
第一線で処理しているワーカじゃなくて
エラー処理者にやるべき処理が回っていくような
プチフレームワークをつくればいいだけってこと。

クラス構成設計の基本テクな。
913デフォルトの名無しさん:2010/10/27(水) 23:15:55
> エラー処理選任のワーカを作れってこと。
これが出てくる意味がわからん.

話の流れとしては, お前らの言う 「エラーも含めて通常処理にしてしまえ」 って,
ことじゃねぇの?
だとすると, エラー用のワーカってのは本末転倒じゃねぇの???
実際, ネットワークコード書くときにエラーなんてのは起って当たり前だし,
いちいち例外投げたり, 特別なワーカに投げたりするとコード汚くなるし...
914デフォルトの名無しさん:2010/10/28(木) 17:33:37
うん。俺も「エラーも含めて通常処理にしてしまえ」派だけど
>>903 >>908 がしばらく考えこんでくれればそれでいい
915デフォルトの名無しさん:2010/10/28(木) 19:42:50
うーんどうだろ
10年以上ネットワークいじってるけど答がでねぇ
916デフォルトの名無しさん:2010/10/28(木) 20:07:50
エラーがでたら殺してしまえ - Erlang
917デフォルトの名無しさん:2010/11/12(金) 01:48:13
VC++&WinSock2.2で、
HTTPサーバーに接続してデータ取得する関数を作った

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の使い方を間違ってるんでしょうか?
どなたか詳しい方、ご教授願えませんか?
918デフォルトの名無しさん:2010/11/12(金) 02:04:46
>>917

tcpは遅延有りOKなので
データー来ないからって即終了しちゃだめよ
919デフォルトの名無しさん:2010/11/12(金) 02:04:48
5って必要なんだっけ?
920デフォルトの名無しさん:2010/11/12(金) 02:11:23
>>918
えーと…最低一回recvするまでは
shutdown(TCPソケット, SD_SEND)
しないほうがいいってことでしょうか?

>>919
ワシの送信は終わったよって伝えないと
相手が「まだ通信してくるかも」と思って0を返してくれない
だからrecvでブロックしたまま固まってしまう
っていう認識なんだけど不要なの?
921デフォルトの名無しさん:2010/11/12(金) 02:14:03
> ワシの送信は終わったよって伝えないと
そんなこと考えなくていいのでは?
922デフォルトの名無しさん:2010/11/12(金) 02:27:28
>>920
shutdown システムコールは close でソケットを閉じる場合と違って
「輸送中のデータを破棄しても構わない」という意味があるから。
send直後にshutdownすると、OSがsend中のデータを破棄して、データが相手に
届かず、異常を察知した通信相手から接続を切られる可能性があるぞ。
recv で0が返ってきてるのは、そうゆう意味でないかい?
923デフォルトの名無しさん:2010/11/12(金) 11:08:30
>データー来ないからって即終了しちゃだめよ

どうやって終わったことを確認するの?
924デフォルトの名無しさん:2010/11/12(金) 12:01:14
recvで0が帰ってきたら
925デフォルトの名無しさん:2010/11/12(金) 12:24:37
とりあえずデータ受信おわるまでshutdownするとまずいのはわかったが
こちらがshutdownかcloseしないとエラーが発生するか
タイムアウトするかしないと0が帰ってこないと思うんだけど
どうやって相手の送信が完了したのを認識するのかなーって思いました
926デフォルトの名無しさん:2010/11/12(金) 12:54:05
select
927デフォルトの名無しさん:2010/11/12(金) 13:14:19
受信側は、受信したサイズやその内容によって、
電文の区切りを判断する。(判断できるように電文設計する)

>>924 の 「recv でゼロが返ったら」っていうのは、
相手が通信路を閉じたことを判断する方法。

今のHTTPはつないだままで複数の電文(GET〜その応答など)を流せる仕様だから、
内容見ないと区切り判断は無理。
928デフォルトの名無しさん:2010/11/12(金) 13:23:36
補足。>>927 は、HTTP等、TCP上のプロトコルの話な。

TCPは
・送信側のレコード境界が保障されない
(相手がsendしたサイズ区切りの通りはrecvできない)
・バイトの順番がひっくり返ることはない

一方UDPは
・レコード境界が保障される
(相手がsendしたサイズの通りにrecvできるか、パケットロストかのどっちか)
・パケットの順番がひっくり返ることがある
929デフォルトの名無しさん:2010/11/12(金) 17:32:15
HTTP 1.1 移行の KeepAlive 接続だと
鯖から切断 ≠ リクエストに対するレスポンスの終了 だものね。

Content-Length で bodyサイズを確認
タイムアウト付きで bodyサイズ を満たすまで読む (途中で recv() == 0 なら、切断発生で異常脱出)

タイムアウト付けてるのは Content-Length があてにならない鯖への対応
930デフォルトの名無しさん:2010/11/12(金) 17:36:56
> Content-Length があてにならない鯖

え、そんな鯖あるの
今まで考慮したことなかったぜ・・・ なんという嫌がらせ
931デフォルトの名無しさん:2010/11/12(金) 17:47:30
>>930
繋ぎ先の想定範囲を広く取った場合に、レアケースで有りえるかもしれない、という話ね。

串経由で Content-Length 落されたり
CRLF を 2Byte ではなく 1Byte で勘定しやがったり
CRLF であるべき部分が LF で送ってて なのに CRLFで勘定してたり
932デフォルトの名無しさん:2010/11/12(金) 18:25:30
Lengthはそのままに文字コード変換されてたことならある
933デフォルトの名無しさん:2010/11/12(金) 18:59:02
HTTP/1.1のコマンドパイプライニングはまともに実装できるとは思えない。
934デフォルトの名無しさん:2010/11/13(土) 01:40:55
自作の鯖プログラムはあてにならないのは確か
935デフォルトの名無しさん:2010/11/13(土) 01:57:25
俺はWEB鯖もSSH鯖も自作で24時間運用してるよ
936デフォルトの名無しさん:2010/11/13(土) 03:17:56
自作メル鯖SPAMフィルタ24時間稼働中
937デフォルトの名無しさん:2010/11/15(月) 10:39:07
とりあえず、recvしたあとにshutdown(send)することで解決しました。おまいらありがとうございました。
938デフォルトの名無しさん:2010/11/15(月) 22:23:12
どういたしまして。
939デフォルトの名無しさん:2010/11/24(水) 17:38:44
940デフォルトの名無しさん:2010/12/05(日) 07:57:08

次のことを判定するWindows用のソースコードは
ないでしょうか。できればVC++で書かれたものがよいのですが。

・現在ネットワークに接続しているか。
・ネットワークに接続として選べるのは
 LAN接続か、ダイアルアップか。

よろしくお願いします。
941デフォルトの名無しさん:2010/12/05(日) 10:12:33
>・現在ネットワークに接続しているか。

物理的に繋がっているだけとか
実際にLANにしか接続出来ないとか
グローバルなインターネットちゃんと見れるとか
どこまでの「接続」を期待している?
942デフォルトの名無しさん:2010/12/05(日) 16:30:07
>>941
こういうのは「グーグルとヤフーが見れる」ってのが接続判定条件だよ。
質問に質問で返すのはもうそろそろ卒業した方がいい。
仕様とは、聞くものではなく、押し付けるものだ。
943デフォルトの名無しさん:2010/12/05(日) 20:40:27
人はそれをエスパーと呼ぶ
そして間違っていた場合「ちげえよこの勘違い馬鹿が」とこき下ろす
944デフォルトの名無しさん:2010/12/05(日) 20:50:51

VC++で、.netを使わず、

Process.Start("http://www.google.co.jp");

みたいなことが実現したいのですが、
既に作られたソースコードのようなものがあるでしょうか。
よろしくお願いします。
945940:2010/12/05(日) 20:59:22

>>941

どうもありがとうございます。

グローバルなインターネットがちゃんと見れる状態
になっていることの確認です。

アップデート情報のあるサイトにアクセスして
アップデートが可能か問い合わせたいのですが、
もし、ネットに接続可能でない状態ならば、
その問い合わせを
行わないようにしたいのです。

よろしくお願いします。
946デフォルトの名無しさん:2010/12/05(日) 21:17:46
接続してみないと接続できるかどうかわからん
947デフォルトの名無しさん:2010/12/05(日) 21:32:35
>>943
でもあってただろ?
948デフォルトの名無しさん:2010/12/05(日) 22:00:04
>>947
で、間違っていた場合は勘違いが勘違いを呼んで質問者そっちのけで話が進むわけだ。
エスパーじゃない俺としては
「接続=インターネットに繋がってる事」を最初に提示した上で回答するのが好ましいと思うけどな。
949デフォルトの名無しさん:2010/12/05(日) 22:05:35
>>945
仮にそのサイトがダウンしてるときはどうするの?
無条件で問い合わせして、失敗したら何もしない。で良いんじゃないの?
950デフォルトの名無しさん:2010/12/05(日) 22:58:17
>もし、ネットに接続可能でない状態ならば、
>その問い合わせを
>行わないようにしたいのです。

無駄
951デフォルトの名無しさん:2010/12/06(月) 02:09:37
>>945
おおざっぱに思いつくのは以下

0. アクティブな(またはアクティブにできる)インターフェースが存在する
ローカルなアクセスは可能かもしれない
1. default route が存在する
外部に接続されているかもしれない
2. DNS サーバにアクセスできる
外部に接続されているかもしれない
3. DNS で外部のアドレスが引ける
ゲートウェイが生きていれば外部に接続可能かも知れない
4. DNS で引いた任意のアドレスにアクセス可能
proxy経由かも知れないが外部にアクセス可能
5. 目的のサイトにアクセスしてみる
運が良ければ目的のサイトが生きていてアップデート情報を取得可能

てなわけで, アクセスしてみるまでは無理
952デフォルトの名無しさん:2010/12/08(水) 16:59:09
最初からサイトにアクセスしてみて駄目なら諦めるでいいじゃんw
953940:2010/12/12(日) 23:06:03

>>941
>>942
>>946
>>949
>>950
>>951
>>952

皆様、どうもありがとうございます。
貴重なご意見を参考に次のようにしました。

(1)自動的にアップデートを行うかどうかは、
   設定で利用者に選んでもらう。

(2)アップデートの問い合わせをして
   繋がらなかったら、タイムアウトして
   処理を終了する。

本当に助かりました。ありがとうございます。
954デフォルトの名無しさん:2010/12/12(日) 23:55:24
間抜けな思いつきにもかかわらず、無難なところで決着したな。
大抵はカオスになるんだけど。
955デフォルトの名無しさん:2010/12/15(水) 17:07:42
ネットは奥が深いし、今のインターネットは変な物が間に挟まってるのが普通な歪な状態だから仕方が無い。
956デフォルトの名無しさん:2010/12/16(木) 08:42:04
> 今のインターネットは変な物が間に挟まってる
たとえば?
957デフォルトの名無しさん:2010/12/16(木) 10:20:07
>>956
NAT
958デフォルトの名無しさん:2010/12/16(木) 12:50:59
そもそもプロバイダが挟まってるのも変だお
インターネットじゃなくてインターツリーだお
959デフォルトの名無しさん:2010/12/17(金) 17:20:39
元々は亜米利加のティア1に国際専用線を引いて自前で繋ぐのが基本だしね。

バランサとかファイヤウォールも昔は無かった。
960デフォルトの名無しさん:2010/12/17(金) 23:53:55
>>958
「internet は network と network をつないだものだ」と 30年近く信じきってたんだが
provider の持っている network は network じゃないのか?
961デフォルトの名無しさん:2010/12/18(土) 00:07:25
an internet と The Internet の違いじゃないの
962デフォルトの名無しさん:2010/12/18(土) 00:39:29
今もインターネットと10年前のインターネットも違うと思われ。
963デフォルトの名無しさん:2010/12/19(日) 14:17:26
今時は The Internet ですらなく The Net とか The Web だもの。
964デフォルトの名無しさん:2010/12/20(月) 00:50:21
winsockについて質問です。

接続してきたクライアントの情報と送信してきたメッセージを
プロンプトに表示させる簡単なサーバはできたんですが、
これを複数のクライアントからの同時接続に対応させるにはどうすればいいのですか?

今は一つのクライアントがつないだら、そいつを切断するまで他のクライアントから
送信したメッセージが画面に表示されません。

コード的にはwhileループの中でrecvを繰り返してるような感じです。

抽象的な表現でも構わないので、何かアドバイス下さい。
965デフォルトの名無しさん:2010/12/20(月) 01:02:29
別のポートで待ち受ければいいよ
966デフォルトの名無しさん:2010/12/20(月) 01:04:38
>>964
ソケット毎にスレッド起こすかポーリングでグルグル
967デフォルトの名無しさん:2010/12/20(月) 01:07:48
>>965-966ありがとうございます

スレッド起こす方法でやってみようと思うのですが、
そのスレッドの数はlisten関数の第二引数で指定した数まで
という認識でよろしいでしょうか?
968デフォルトの名無しさん:2010/12/20(月) 06:49:46
>>967
いいえ。必要な数だけ。
969デフォルトの名無しさん:2010/12/20(月) 07:43:21
ありがとうございます。
ではlisten関数の第二引数はどういうときに影響してくるのでしょうか?

それとポーリングについてですが、
この言葉自体昨日知ったのですが、クライアント側にデータを送信したいものが
ないか問い合わせをすることだそうですね。

イメージとしてはループの中で、acceptで接続を待ち続けて、
ソケットが作成されたら、一定量のデータを受信し、
以降は作成されたソケットに対して、データが受信し終わるまで
recvしまくるといった感じでしょうか?

あと、winsockを勉強するうえで、良いサイトがあったら教えて下さい。
970デフォルトの名無しさん:2010/12/20(月) 09:31:15
>>969
ポーリングについて
接続中のソケットにデーターが到着してるかどうかをチェック
入ってたら、入ってる分だけ受信して処理ルーチンをコール
戻ってきたらループ
971デフォルトの名無しさん:2010/12/20(月) 10:21:18
>>969
とりあえず、>>1くらい読んだ上で質問してるんだろうな?
972デフォルトの名無しさん:2010/12/20(月) 12:16:14
見てなかった。すみませんでした。
973デフォルトの名無しさん:2010/12/22(水) 08:49:06
shutdown関数って呼び出す必要あるのですか?
tcp/ip通信をしています。
呼び出すとしたら、サーバ側はサーバのソケットとクライアントのソケット両方に
対して、呼び出せばいいのですか?
逆にクライアント側はサーバのソケットのみしか作らないのでサーバのソケットのみに対して
呼び出せばいいのですか?
お願いします。
974デフォルトの名無しさん:2010/12/22(水) 09:10:29
>>973 一般的に送信側/受信側の個別操作が必要な時以外必要ない
975デフォルトの名無しさん:2010/12/22(水) 09:18:22
>>974
ありがとうございます。
個別操作というのは具体的にどういうことを言うのでしょうか?
976デフォルトの名無しさん:2010/12/22(水) 10:33:54
>>975
それがわからんうちは必要ないってことだ
977デフォルトの名無しさん:2010/12/22(水) 12:09:59
>>976
わかりました。ありがとうございました。
978デフォルトの名無しさん:2010/12/23(木) 07:07:11
listenの第二引数って、何の数?
どういう時に影響してくるのかよくわからんのだが。
979デフォルトの名無しさん:2010/12/23(木) 07:33:01
保留できるconnectionの最大数
下の例で何かの処理を行っている間に待たせておける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
980デフォルトの名無しさん:2010/12/23(木) 08:04:24
なるほど!「そこ」の要求数だったんですね!

よく分かりました!本当にありがとうございます!
981デフォルトの名無しさん:2010/12/23(木) 08:29:14
理解してもその通りに制御不可能なlistenの第二引数の謎。
982デフォルトの名無しさん:2010/12/23(木) 14:26:01
謎というか、ここが制御できないOSは大体うんこだよ
983デフォルトの名無しさん:2010/12/23(木) 19:04:16
うんこにうんこと言われましても・・・
984デフォルトの名無しさん:2010/12/23(木) 22:23:35
syn flooding対策で、今時の大抵のOSは第二引数無視してsyn,ack返すからrefuseされる事はない。
これが、第二引数で制御不可能な理由。
985デフォルトの名無しさん:2010/12/24(金) 00:03:24
skype大規模ダウン
986デフォルトの名無しさん:2010/12/24(金) 00:19:58
>>984
widows の実装はしらんが unix 系は SYN flood だと破断するまでは
それなりに有効に動作しているように見えるが
987デフォルトの名無しさん:2010/12/24(金) 03:03:45
988デフォルトの名無しさん:2010/12/24(金) 08:10:19
>>986
0にした時に2つ目以降のコネクション要求に対してrst返ってくる?
989デフォルトの名無しさん:2010/12/24(金) 13:06:39
990デフォルトの名無しさん:2010/12/24(金) 18:26:35
サーバ側のコードって、サーバとクライアントのソケット作りますよね?
サーバ終了時にサーバのソケットさえクローズしてしまえば、
クライアント側から通信できないと思うんですが、
クライアント側のソケットってclosesocketする必要あるんですか?
991デフォルトの名無しさん:2010/12/24(金) 18:30:53
確保したら解放する
開いたら閉じる
ちゃんと後始末しないとメモリリークするが、それでもいいなら
992デフォルトの名無しさん:2010/12/24(金) 18:32:28
あぁ、そのまま終了しちまうんなら別にいいかもね
993デフォルトの名無しさん:2010/12/24(金) 18:38:36
終了時なら別に構わないってことですかね。
ただ単に切断するだけなら、両方閉じるようにします。
すばやい回答ありがとうございました。
994デフォルトの名無しさん:2010/12/25(土) 03:40:55
ume
995デフォルトの名無しさん:2010/12/25(土) 06:26:55
ho
996デフォルトの名無しさん:2010/12/25(土) 10:47:45
winsock 使っちゃダメと言われたから、今日は私の hogehoge 記念日
997デフォルトの名無しさん:2010/12/25(土) 19:15:09
recvで最後まで受信したかはどう調べればよいのですか?
改行文字チェック?
998デフォルトの名無しさん:2010/12/25(土) 19:15:58
最後まで受信したらrecvから0が返る
999デフォルトの名無しさん:2010/12/25(土) 19:24:24
0って相手が切断したときじゃなかったんですね。ありがとうございました。
1000デフォルトの名無しさん:2010/12/25(土) 20:14:29
最後って何の最後だよ。レコードの最後、メッセージの最後…
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。