1 名前:デフォルトの名無しさん [2012/10/31(水) 17:05:08.29 ] 主にソケットに関しての質疑応答スレッドです。 Programming UNIX Socket FAQ (日本語訳) www.kt.rim.or.jp/~ksk/sock-faq/indexj.html Winsock Programmer's FAQ (日本語訳) www.kt.rim.or.jp/~ksk/wskfaq-ja/ 関連リンクは>>2-10 辺り 足りなかったら適当に付け足してね 前スレ ネットワークプログラミング相談室 Port28 toro.2ch.net/test/read.cgi/tech/1334736934/ 関連スレ ネットワークプログラミング雑談 toro.2ch.net/test/read.cgi/tech/1235800707/
116 名前:デフォルトの名無しさん mailto:sage [2013/03/08(金) 14:09:47.53 ] >>115 SYNのビットを見りゃいーじゃん
117 名前:デフォルトの名無しさん mailto:sage [2013/03/08(金) 14:10:54.12 ] ごめん、勘違いしてた
118 名前:デフォルトの名無しさん [2013/03/25(月) 14:31:30.15 ] TCPで100バイトのデータを送ろうとしています。 50バイトを送ったところで回線に不具合が起きて自動的にセッションが張りなおされました。 この場合、データの続きは51バイト目から送られますか?1バイト目から再送されますか?
119 名前:デフォルトの名無しさん mailto:sage [2013/03/25(月) 14:51:51.28 ] どこまでACKもらったかによるのでは
120 名前:デフォルトの名無しさん mailto:sage [2013/03/25(月) 15:05:59.94 ] つまりACKを送る前で切れてると でもACKって回線が切れる前に送ったかどうかわからないよね??
121 名前:デフォルトの名無しさん mailto:sage [2013/03/25(月) 15:07:07.56 ] あ 反応無かったら何度も送るか つまり51バイト目からになるのかな
122 名前:デフォルトの名無しさん mailto:sage [2013/03/25(月) 15:10:02.34 ] 間違えたわ ACKは古いセッションに送るのか 新しいセッションはどこまで送れてるのかわからないのに51バイト目から再開してくれるのかな??
123 名前:デフォルトの名無しさん mailto:sage [2013/03/25(月) 15:22:30.34 ] 不明な時は前から送るだろうし、受け取った方は同じもの2つ受けても 大丈夫なように動作するだろう。
124 名前:デフォルトの名無しさん mailto:sage [2013/03/25(月) 15:27:16.58 ] セッションIDって通信内容に含まれてるの? じゃないと前のセッションがどれかわからないよね?
125 名前:デフォルトの名無しさん mailto:sage [2013/03/25(月) 16:17:29.23 ] どのレイヤーの話なの?
126 名前:デフォルトの名無しさん [2013/03/25(月) 16:40:27.67 ] 初心者すぎてよくわからん 途中で何かトラブルがあった場合、別のポートから続きが送られてくることもあるって理解で合ってますか?
127 名前:デフォルトの名無しさん mailto:sage [2013/03/25(月) 16:45:06.67 ] そのポートってのは何だよ
128 名前:デフォルトの名無しさん mailto:sage [2013/03/25(月) 16:48:13.00 ] >>126 あってません もういちど、自分の手で、続きを送れ
129 名前:デフォルトの名無しさん mailto:sage [2013/03/25(月) 16:56:26.81 ] サーバと一般のPCの間のインターネットの通信で 回線が不安定になっても自動的に繋ぎなおされることは無いってこと?
130 名前:デフォルトの名無しさん mailto:sage [2013/03/25(月) 16:57:01.53 ] TCPの中の人が何を何度再送してようと、それはアプリから見えない水面下のことなので、気にする必要ない 100バイト送ったなら100バイト届くし、その間にポートが変わるようなことはない TCPの中の人がギブアップするようなトラブルが起きたら、切断されてエラーになる そのようなエラーが起きたときは、自動的に接続が貼り直されることはないし、自動的に別のポートから続きが送られることもない
131 名前:デフォルトの名無しさん mailto:sage [2013/03/25(月) 17:01:09.78 ] それだ ありがとうございました
132 名前:デフォルトの名無しさん mailto:sage [2013/03/25(月) 17:02:33.34 ] そのレベルの話だと見破れる>>130 スゲー
133 名前:デフォルトの名無しさん mailto:sage [2013/03/25(月) 17:04:07.10 ] スゲーとか言うなよ情け無い
134 名前:デフォルトの名無しさん mailto:sage [2013/03/25(月) 17:04:33.62 ] じゃあ繋ぎっぱなしのTCPってクライアントにIDを割り振らなくてもセッションから個人を識別できるってことか
135 名前:デフォルトの名無しさん mailto:sage [2013/03/25(月) 17:13:22.43 ] せめてネスペを取ってから来て
136 名前:デフォルトの名無しさん mailto:sage [2013/03/25(月) 17:25:03.88 ] そんなんじゃ NHN に雇ってもらえないぞ
137 名前:デフォルトの名無しさん mailto:sage [2013/03/25(月) 20:54:31.05 ] >>134 性善説ならば
138 名前:デフォルトの名無しさん mailto:sage [2013/03/25(月) 20:55:50.77 ] 最近はTCPのGraceful Restartができるらしいが。
139 名前:デフォルトの名無しさん [2013/03/25(月) 22:07:05.43 ] MMORPGの作り方についての質問はここでいいですか?
140 名前:デフォルトの名無しさん mailto:sage [2013/03/25(月) 22:25:49.90 ] ゲ作板のほうがいいんじゃないかね
141 名前:デフォルトの名無しさん mailto:sage [2013/03/26(火) 00:10:17.03 ] あそこ過疎だし厨房しかいないし機能してないじゃん 板名に「技術」って付いてるけとその実態は技術板じゃなくて企画板じゃん
142 名前:デフォルトの名無しさん mailto:sage [2013/03/26(火) 05:07:38.28 ] ってことはここでいいってことだな
143 名前:デフォルトの名無しさん mailto:sage [2013/03/26(火) 05:57:20.66 ] >>142 まぁ、MMOのネットワーク限定ならな・・・
144 名前:デフォルトの名無しさん [2013/03/26(火) 20:25:12.04 ] 質問ですMMORPGの通信はどうやってやってるんですか?
145 名前:デフォルトの名無しさん mailto:sage [2013/03/26(火) 20:46:14.28 ] 本屋さんにそういう本が売ってるから買ってきなさい アマゾンでも楽天でもいいぞ
146 名前:デフォルトの名無しさん mailto:sage [2013/03/26(火) 22:09:02.13 ] >>144 MMORPG でググレば、いくつか解説サイトは見つけられるけど、 いったい何が分からないの? ・dyama's web page: MMORPG/Protocol dyama.chaosnet.org/index.cgi?MMORPG/Protocol -- ごく簡単な解説(日本語) ・Description of the game protocol code.google.com/p/galaktia/wiki/Protocol -- MMORPGをベースにしたゲームプロトコルの詳細な解説 Pythonによるサンプルコード付き(英語) ・MMORPG プロトコル エンコードの解読 ja.softuses.com/92917 -- MMORPGプロトコルをリバースエンジニアリングする技法を解説(日本語) TCPソケットの経験があって技術英語の読解力があればそれほど難しくないから、 高校生レベルの課題のように見えるが.....
147 名前:デフォルトの名無しさん [2013/03/29(金) 22:10:35.43 ] ここの住人は、メールソフトは既存のソフトを使うのか。あるいは、 自作するのか。その辺が知りたいな。
148 名前:デフォルトの名無しさん mailto:sage [2013/03/29(金) 23:14:22.33 ] >>147 > メールソフトは既存のソフト ユーザーエージェントのことでOK? だったら, 既存のものを使う # 自分用にカスタマイズできればそれでOK
149 名前:デフォルトの名無しさん mailto:sage [2013/03/30(土) 01:23:27.32 ] MUAならwl使ってるわ。
150 名前:デフォルトの名無しさん mailto:sage [2013/03/30(土) 03:53:56.60 ] >>147 既存のソフトで事足りるから既存のソフトを使ってる それに通信部分は余裕でもメーラーとしての便利な各種機能を実装するのが面倒 アドレス帳とか、メールの検索とか、自動振り分けとか、etc... 一つ一つは実装しろって言われたらできるけど、全部実装するのは面倒
151 名前:デフォルトの名無しさん mailto:sage [2013/03/30(土) 15:44:58.01 ] 昔はmew, 今はgmail。 どっちもelispとjavascript(browser addon)でカスタマイズ。
152 名前:デフォルトの名無しさん [2013/03/30(土) 16:52:03.33 ] gmailとか解析エンジンが中身読んでるから嫌だよ
153 名前:デフォルトの名無しさん mailto:sage [2013/03/30(土) 17:54:14.11 ] >>152 メールを読まれてる可能性はどこも一緒だから それを懸念するなら母数が多いところのほうが安全だろ
154 名前:デフォルトの名無しさん mailto:sage [2013/03/30(土) 18:18:33.61 ] 暗号化しろよ
155 名前:デフォルトの名無しさん mailto:sage [2013/03/30(土) 18:59:21.53 ] >>154 サーバに言えよ
156 名前:デフォルトの名無しさん mailto:sage [2013/03/30(土) 19:22:20.95 ] >>153 母数が多いところを選ぶのは安全だが 選ばないという手もある そんな俺は自宅メールサーバーを立てたよ 相手側のサーバーは避けられないからそれは仕方ないけど、母数とかって話が出たから確率論でいくと、 「どちらか一方のサーバーで解析される確率」より 「相手のサーバーで解析される確率」のほうが必然的に低いわけだから 後者の自宅サーバーのほうが安全 自宅メールサーバーマジオススメ
157 名前:デフォルトの名無しさん mailto:sage [2013/03/30(土) 19:38:06.01 ] アホだな。
158 名前:デフォルトの名無しさん [2013/03/30(土) 22:13:30.88 ] >>156 金が結構かかるじゃん。
159 名前:デフォルトの名無しさん mailto:sage [2013/03/30(土) 22:45:38.67 ] >>155 何を言っているんだ。 サーバで見られること気にしてるのに、サーバで、またはサーバとの通信を暗号化しても意味ないだろ。 S/MIMEとかMUA間でメッセージを暗号化するんだよ。
160 名前:デフォルトの名無しさん mailto:sage [2013/03/30(土) 22:49:41.12 ] >>158 このスレの住人ならドメインと自鯖くらい持ってるだろ。まあセカンダリを分けるとなると大変だけど。
161 名前:デフォルトの名無しさん mailto:sage [2013/03/30(土) 23:14:59.53 ] >>159 メールを暗号化してもPGP作った人みたいにFBIに追いかけられませんか?
162 名前:デフォルトの名無しさん [2013/03/31(日) 12:01:43.31 ] >PGP作った人みたいにFBIに追いかけられ どういうこと?w 詳しくw
163 名前:デフォルトの名無しさん mailto:sage [2013/03/31(日) 18:38:40.95 ] つ ttp://www.confrage.com/security/pgp/pgp6_03.html
164 名前:デフォルトの名無しさん mailto:sage [2013/03/31(日) 18:56:08.59 ] 輸出規制の制度の隙間を縫って輸出するような真似をするからだよ。 書籍は規制対象外なのを利用して、本として持ち出して、 スキャナで取り込むとかしたんだっけ?
165 名前:デフォルトの名無しさん mailto:sage [2013/04/03(水) 00:05:18.98 ] UDPを利用して特定のポートにデータを送信する場合、 受信者がいなければ、行き場を失ったデータはどこへ行くのか? 一定数はキューみたいなものに保存されるのかしら? それとも逐一消えていくのかしら? 前者の場合、リアルタイムシステムに悪影響を与えてしまうと思うけど、どうなんでしょう。 初心者でスマソ
166 名前:デフォルトの名無しさん mailto:sage [2013/04/03(水) 00:10:51.44 ] 初心者お断り
167 名前:デフォルトの名無しさん mailto:sage [2013/04/03(水) 00:18:11.89 ] >>165 受信ソケットの話かルータのIPの話かわからないが破棄すればいいだろ。いないってなんだ。
168 名前:デフォルトの名無しさん mailto:sage [2013/04/03(水) 00:35:39.78 ] 申し訳ない、ソケットの話ね。 "1"というデータを送信、250msec待つ 次は"2"というデータを送信、待つ … という送信プログラムと、 特定のポートにアクセスしてデータを所得するプログラム を書いてみたんだけど、送信プログラムをしばらく走らせてから受信プログラムを走らせても、 すでに消え去ったと思われる1というデータを取得してしまう。
169 名前:デフォルトの名無しさん mailto:sage [2013/04/03(水) 00:40:59.53 ] icmpってのがあるが、 icmpで反応があることを期待してはいけない。 相手が生きているか死んでるかはっきりしないのが分散システムの基本。
170 名前:デフォルトの名無しさん mailto:sage [2013/04/03(水) 01:06:41.67 ] >>168 本当に受信者居ないの? もしかしてパソコンの電源が入ってない?
171 名前:デフォルトの名無しさん mailto:sage [2013/04/03(水) 11:19:05.08 ] >>170 送信相手がいないと確定してるときって送信しないんだっけ? UDPは気にせず送信しちゃうんじゃないの?
172 名前:デフォルトの名無しさん mailto:sage [2013/04/03(水) 12:31:35.65 ] プログラムがどこでブロックしてるか確かめながらやってみそ
173 名前:デフォルトの名無しさん mailto:sage [2013/04/03(水) 13:00:01.31 ] >>171 気にせず送信すると思う。 >>172 プログラム側に問題があるのかな… OS側のバッファのせいとしか思えない…
174 名前:デフォルトの名無しさん mailto:sage [2013/04/03(水) 13:05:27.61 ] >>165 捨てられるだけだよ
175 名前:デフォルトの名無しさん mailto:sage [2013/04/03(水) 13:32:21.38 ] >>173 試しに1じゃなくて送信時刻を送ってみては
176 名前:デフォルトの名無しさん mailto:sage [2013/04/03(水) 14:19:03.34 ] 全てが正しく動いているなら、ICMP port unreachが送信したホストに返る
177 名前:デフォルトの名無しさん mailto:sage [2013/04/03(水) 19:24:47.39 ] >>175 サンクス 5秒ほど遅れてた…
178 名前:デフォルトの名無しさん mailto:sage [2013/04/03(水) 21:56:32.66 ] 自己解決しますた… 受信プログラムを待機させている間にソケットにポート設定をしてたのが原因みたい よくワカンネ
179 名前:デフォルトの名無しさん mailto:sage [2013/04/04(木) 11:58:03.35 ] >>178 ふざけんなよ! >送信プログラムをしばらく走らせてから受信プログラムを走らせ って書いてたよな? 適当なことを書きやがって ポートをバインドした時点で受信は開始されます カーネルにバッファされます
180 名前:デフォルトの名無しさん mailto:sage [2013/04/04(木) 12:12:58.81 ] ワロタ
181 名前:デフォルトの名無しさん mailto:sage [2013/04/04(木) 13:30:39.19 ] >>178 死ねよおまえ 生きてる価値ねーよ
182 名前:デフォルトの名無しさん mailto:sage [2013/04/04(木) 13:57:20.53 ] プロトコルスタックさんの気持ちになって考えればすぐにわかることだろうに なにが「よくワカンネ」だ
183 名前:デフォルトの名無しさん mailto:sage [2013/04/04(木) 22:09:15.34 ] 馬鹿は馬鹿とは自分では認識できないということだな
184 名前: 忍法帖【Lv=2,xxxP】(2+0:5) mailto:sage [2013/05/11(土) 23:27:23.69 ] ほしゅ
185 名前:デフォルトの名無しさん mailto:sage [2013/05/13(月) 21:29:52.72 ] 久しぶりにwinsock使ったら面倒くさかった。 ここ数年C#にどっぷりつかってたから、C++でコーディングするのが面倒だった。 実行環境のことを考えなくてよいなら、C#やJavaで作る方が簡単だな。
186 名前:デフォルトの名無しさん mailto:sage [2013/05/13(月) 21:34:47.80 ] JavaはHttpURLConnectionで事足りるレベルなら簡単だけど Socket作るんだったらたぶんC#のほうが簡単そう。
187 名前:デフォルトの名無しさん mailto:sage [2013/06/01(土) 23:20:34.89 ] 質問ですが select(2)の第一引数には結局何を渡せば良いのん? バークレーソケットの場合、FD_SETSIZEを渡しとけば機能的には問題無いらしいが、 これは例えばFD_SETSIZEが32768の環境なら、select()を呼ぶたびに 32768個のディスクリプタがチェックされることになるので無駄が生じている気がする… あとWinsockではFD_SETした個数を渡せば良いというのは本当ですか
188 名前:187 mailto:sage [2013/06/01(土) 23:24:31.90 ] ああWinsockについては自己解決しました、 ttp://msdn.microsoft.com/en-us/library/windows/desktop/ms740141(v=vs.85).aspx >nfds [in] >Ignored. The nfds parameter is included only for compatibility with Berkeley sockets. →ガン無視されるので0とか-1とか渡しても良い(適当) バークレーソケットではどうなのですか
189 名前:デフォルトの名無しさん mailto:sage [2013/06/01(土) 23:49:25.06 ] 一番大きいfd+1
190 名前:187 mailto:sage [2013/06/02(日) 00:00:57.31 ] >>189 レスdクス、 select(2)を呼ぶ時点でFD_SETされているのはソケット番号であってディスクリプタ番号ではなく、 ソケット番号がディスクリプタ番号と一致するとは限らないと思うのですが、それでも? 実はバークレーソケットでは一致するのでしょうか (C標準ライブラリのIOBとかの実装と同じで、 ハンドル==配列の添え字、とする実装のが自然とは思えますが、仕様としてどうなの?)
191 名前:デフォルトの名無しさん mailto:sage [2013/06/02(日) 00:15:20.65 ] socket(2), open(2)が返すのはfd。 fdは全部数字。 「ソケット番号」という概念はない。
192 名前:デフォルトの名無しさん mailto:sage [2013/06/02(日) 00:50:32.12 ] >>191 レスdクス多分理解しました バークレーソケットの場合は全部fdなので問題は無い、と、 ただ、サーバ側のプログラムでは、クライアントから新規接続cがあった場合、 listenしていたfdをaccept(2)に渡して接続c用の新規fdを取得する結果、 select(2)で待つべきfdが増殖していくと思うのですが、 ということは<一番大きいfd+1 >というのはそのつど更新していくもの? それとも、通信プロセスを起こすタイプのマルチスレッドサーバにすると問題無い(普通はそうする?)のでしょうか… あと関連質問なのですが、 通信「スレッド」を起こすタイプのマルチスレッドサーバではどうすれば良いのでしょう… 子プロセスにfdを渡すのと異なり、親がfdを閉じるわけには行かない しかし親だけがselect(2)するのでは通信「スレッド」を起こす意味がない また、実情はともかく、仕様上はWinsockはスレッドセーフとは謳われていない (Winsock互換の非スレッドセーフな実装が理論上は有り得る) ので、どうプログラミングするのが正しいのかいまいちわからん…
193 名前:デフォルトの名無しさん mailto:sage [2013/06/02(日) 03:49:28.43 ] そりゃ更新しないと意味ないわな。 マルチスレッドサーバならselect(2)は使わなくていいでしょ。 いろいろな混合モデルもあるけど、最初は簡単なモデルで。
194 名前:デフォルトの名無しさん mailto:sage [2013/06/02(日) 09:34:05.28 ] 何バイト送られて来るかわからない通信でselect→1バイトずつreadと言うのはやるべきじゃないってmanに書かれてたけどどうするのが一番効率的なんでしょう。 mtuの値を取得してその値-フレーム分をreadするのでしょうか?
195 名前:デフォルトの名無しさん mailto:sage [2013/06/02(日) 10:54:39.80 ] そりゃ 1MB 受け取るのに百万回繰り返さなきゃいかんようではお世辞にも効率いいとは言えまい ノンブロッキングモードにして適当に大きなサイズ (8KB とか 64 KB とか) で読めばいい
196 名前:デフォルトの名無しさん mailto:sage [2013/06/03(月) 01:05:59.71 ] ノンブロッキングにする必要はない。
197 名前:デフォルトの名無しさん mailto:sage [2013/06/03(月) 01:16:29.85 ] selectしているのはブロッキングさせたくないからで、selectの後に受信データより多いバッファ分読み込もうとしたらブロッキングしちゃうからノンブロッキングで読み込む方が良さそうな気がするけど何か見落としあったりします?
198 名前:デフォルトの名無しさん mailto:sage [2013/06/03(月) 01:24:07.02 ] > しちゃう ダウト
199 名前:デフォルトの名無しさん mailto:sage [2013/06/03(月) 01:56:25.17 ] ブロックするだろ
200 名前:デフォルトの名無しさん mailto:sage [2013/06/03(月) 02:00:17.97 ] しないだろ
201 名前:デフォルトの名無しさん mailto:sage [2013/06/03(月) 02:05:28.99 ] >>199 しない 実験してみるといい
202 名前:デフォルトの名無しさん mailto:sage [2013/06/03(月) 02:05:39.31 ] うん。やっぱしないね>>199 は忘れて
203 名前:デフォルトの名無しさん mailto:sage [2013/06/03(月) 03:59:52.42 ] 1バイトでもデータがあればね
204 名前:デフォルトの名無しさん mailto:sage [2013/06/03(月) 11:23:03.45 ] selectした後の話だからね。>>197
205 名前:デフォルトの名無しさん mailto:sage [2013/06/03(月) 11:26:58.12 ] select後 受信データが1以上でバッファはデータ以上の大きさで読み込むと? 受信データが無いのに読み込むと?
206 名前:デフォルトの名無しさん [2013/06/03(月) 11:33:03.05 ] 馬鹿じゃなかと?
207 名前:デフォルトの名無しさん mailto:sage [2013/06/03(月) 11:41:45.21 ] ゴカイうまかっちゃ
208 名前:デフォルトの名無しさん mailto:sage [2013/06/03(月) 12:12:09.02 ] むろみさんは海に還れ
209 名前:デフォルトの名無しさん mailto:sage [2013/06/03(月) 23:50:05.47 ] あんたドライバー刺すわよ
210 名前:192 mailto:sage [2013/06/08(土) 23:51:12.09 ] かなり自己解決したっぽい プロセスを起こすタイプのマルチスレッドサーバの現代版サンプル(他)↓ www.v6pc.jp/jp/upload/pdf/socket-sample-20121203.pdf いとぢゅん氏が絡んでいたやつっぽいので多分信用に足る で、Winsockにおいてプロセスにソケットを渡す方法↓ app.m-cocolog.jp/t/typecast/114340/102386/category/3335520 プロセスの終了を何の工夫も無くWaitForMultipreObjects()で待つと64プロセスが上限になるが、 そこはそれ、WaitForMultipreObjects()で64プロセス待つスレッドを64スレッド待つ、とかいう 多段構成が考えられる(いや知らんけど多分、 WinsockはGUIとの共存に適した非同期インタ──フェ──スも有するが、 とりあえずそこまでウィンドウズべったりにしなくとも、 select()かWsaPoll()だけでもマルチスレッドサ─バをなんとか構成できるのではないか(適当)
211 名前:192 mailto:sage [2013/06/09(日) 00:01:04.61 ] ちなみに、WinsockではデフォルトでFD_SETSIZE=64だが、 socket()は平気でこれより大きいfd番号を返してくる ていうか、現代のOSではLinuxだろうがWindowsだろうがFD_SETSIZEの制限に特に意味はなく、 FD_ISSET()の第一引数には 0..max{ socket()が返した値 } + 1 というの連番を与えるのではなくて、 socket()が返した数値(FD_SETSIZEより大きく成り得、かつ離散的)を配列かvectorにでもとっておいて、 その値を直接与えるのが正しいっぽい 上の現代版サンプルでもそうなっている(つまり>189のやり方は古い疑い有り)
212 名前:デフォルトの名無しさん mailto:sage [2013/06/09(日) 07:07:01.75 ] 何言ってるか分からないが、その現代版サンプル(謎)でも fd + 1 になってるじゃねーか
213 名前:デフォルトの名無しさん mailto:sage [2013/06/09(日) 07:21:28.43 ] >>212 そこはそうだが、 x68000.q-e-d.net/~68user/net/c-echo-2.html における 166: for ( i=0 ; i<FD_SETSIZE ; i++ ){ 167: if ( FD_ISSET(i, &target_fds) ){ が、 www.v6pc.jp/jp/upload/pdf/socket-sample-20121203.pdf の「複数の socket を生成するデュアルスタック対応サーバプログラム」では for (i = 0; i < smax; i++) { if (FD_ISSET(s[i], &rfd)) { になってるねん(s[]にはsocket()が返した値が入っており、 smaxはs[]の要素数+1
214 名前:デフォルトの名無しさん mailto:sage [2013/06/09(日) 09:30:05.98 ] >>213 何を言いたいのか分からない FD_SETSIZEを超えたらまずいというのならその通り。 下のURLの方は、 >> if (s[smax] >= FD_SETSIZE) { でFD_SETSIZEを超えるものを除外してるから、 s[smax]がFD_SETSIZEを超えることはない 離散的だのベクターだのは意味不明
215 名前:デフォルトの名無しさん mailto:sage [2013/06/09(日) 13:20:01.15 ] >>214 話を込み入らせてしまって申し訳ないですが、 >> if (s[smax] >= FD_SETSIZE) { これは少なくともWinsockでは不要ていうか、 >socket()は平気でこれ(FD_SETSIZE)より大きいfd番号を返してくる (211) という事実があるので、削除して試した 実際、あるとgetaddrinfo()で列挙されたlisten可能ポート(うちの環境では s[0] = 116, s[120]=120となった)が全てそのif文で除外され、 bind()やlisten()まで行き着かない。削除するとうまくいく(クライアントとつながり、"hello ::1"とか出る) >FD_SETSIZEを超えたらまずいというのならその通り。 「何が」FD_SETSIZEを超えたらまずいのかいまいちどお考えいただきたい FD_ISSET(a, b)の第一引数aが超えたらfd_set構造体をオーバーランするからまずい、というのが第一義だが、 しかし、>213の上のリンク先と、>213の下のリンク先では、第一引数に書かれている内容が異なるのですじゃ
216 名前:215 mailto:sage [2013/06/09(日) 13:22:58.77 ] 訂正。 誤1: getaddrinfo()で列挙されたlisten可能ポート 正1: getaddrinfo()で列挙されたlisten可能ソケット 誤2: s[0] = 116, s[120]=120となった 正2: s[0] = 116, s[1]=120となった