- 1 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 03:43:08 ]
- 主にソケットに関しての質疑応答スレッドです。
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辺り 足りなかったら適当に付け足してね 前スレ ネットワークプログラミング相談室 Port24 pc12.2ch.net/test/read.cgi/tech/1246895188/ 関連スレ ネットワークプログラミング雑談 pc12.2ch.net/test/read.cgi/tech/1235800707/ Java ネットワークプログラミング 【教えて!】 pc12.2ch.net/test/read.cgi/tech/1086238859/
- 29 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 15:37:02 ]
- 要るものからインクルードするとエラーが出にくい
- 30 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 23:11:30 ]
- sys/types.hを最初に、それ以外はどうでもいい。
- 31 名前:デフォルトの名無しさん [2009/10/22(木) 00:20:32 ]
- >>26
フラグメント有効ってどうすればよいのでしょうか? カードの問題?
- 32 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 02:04:56 ]
- フラグメントはDoSに利用されやすいこともあって、
オフにしているところも結構ある。 頼らずに分割して送れ。
- 33 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 02:13:16 ]
- 単にMTU越えてるから送れないってことじゃないの?
- 34 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 02:34:35 ]
- >>32
IP だとそうだけど, UDP のリアセンブルは IP とは別問題じゃないか? とはいえ, IP フラグメント捨てられたら UDP がこけるのも事実だが…… そもそも, 元ネタが環境を書いてないのがよくない
- 35 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 02:38:48 ]
- 殆どのバグは本人が問題無いと思っている場所にこそ存在する
- 36 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 07:23:31 ]
- >>34
> UDP のリアセンブル 何のことを言っているの?
- 37 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 08:04:23 ]
- UDPで1パケ以上送ろうとするとフラグメント化されるけど、それがされなくてデータ自体送れなくなってるってことか
フラグメント化のオンオフってどうやるんだったかな
- 38 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 08:36:44 ]
- 分からない奴は加わってくるな
- 39 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 09:54:31 ]
- >>36
IPv6 は MTU ディスカバリー使って, 途中経路でフラグメント化されない形で 送信できるけど, v4 にはそうゆう機能がないのでフラグメント化される可能性 がある. UDP は MTU 以上のデータグラムを送ろうとすると, 複数の IP パケットに分割して 送信される. IP のフラグメントをリアセンブルするのと, UDP のデータグラムを複数の IP パケットからリアセンブルするのは別の話だって言ってるんじゃないか
- 40 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 13:41:40 ]
- >>29 >>30
ありがとうございました
- 41 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 18:07:40 ]
- >>39
ん? Path MTU DiscoveryはIPv4にだってあるだろ?
- 42 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 19:55:05 ]
- v6は必須だよね。
>>39 フラグメンテイションもリアセンブルも、 IP層で行われるのであって、上の層が何かは関係ない。 tcpdumpやfirewallみたいに層縦断する奴等は気にする必要があるが。
- 43 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 20:19:18 ]
- どっかのバカNEが「ICMP全部止めるのがセキュリティ」と妄信してるからなあ。
- 44 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 20:21:04 ]
- それじゃpingが通らんがなw
- 45 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 20:21:44 ]
- ping用のポートを用意
- 46 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 20:51:23 ]
- www.ntt.co.jpとか
- 47 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 22:30:32 ]
- >>44
The Internetにつながってるサーバはecho返さないようになってるの多くね?
- 48 名前:デフォルトの名無しさん [2009/10/22(木) 23:07:44 ]
- 結局、UDPで送信してもフラグメント化されないため送信されてないって話だろ
- 49 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 23:09:12 ]
- う、うん……(´・ω・`)
- 50 名前:デフォルトの名無しさん [2009/10/24(土) 14:23:18 ]
- listenの第2引数の意味がよくわからん
何にすればいいの
- 51 名前:デフォルトの名無しさん [2009/10/24(土) 14:39:42 ]
- 0-1
- 52 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 14:45:28 ]
- >>50
サーバ側がaccept(2)で接続確立するまで、 サーバ側に既に到着し待たされている接続要求をいくつ持てるか? >>51 少なすぎて話にならない。
- 53 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 19:57:25 ]
- なるほどありがとう
- 54 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 20:12:46 ]
- ていうか、>>1のリンクくらい目を通せよ
- 55 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 20:14:07 ]
- 1はバックログ数1というわけではないんだな。これが。
- 56 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 22:12:56 ]
- それはOSによる。
例えばLinuxは最小が8、最大はsysctl.max_syn_backlog 2の階乗にラウンドされる。
- 57 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 22:46:01 ]
- 反論するなら、1がバックログ数1であるものを例示して反論してくれたまえ。
- 58 名前:デフォルトの名無しさん [2009/10/25(日) 00:07:08 ]
- パケットのフラグメント化を許可する方法を教えてください
- 59 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 00:14:17 ]
- 経路上の中継器の管理者にフラグメントされたパケットを落とさないように依頼する。
- 60 名前:デフォルトの名無しさん [2009/10/25(日) 13:04:09 ]
- listenソケットて閉じちゃいけないの?問題発生したんだが
- 61 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 13:12:44 ]
- どんな問題か書け
- 62 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 14:05:12 ]
- セレクト使った場合
相手がクローズしたかどうかを知るにはどうすればいいの?
- 63 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 15:03:27 ]
- >>1のFAQ嫁
- 64 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 15:05:51 ]
- s.eof()
- 65 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 22:27:46 ]
- >>59
中継器は使用せず直接LANケーブルで送信受信側をつないでます どうやらパケット自体送出できないみたいなのです フラグメント化が必要なデータだと
- 66 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 22:52:42 ]
- PS3かなにかのメッセージか?
動いてるなら気にスンナ
- 67 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 23:47:01 ]
- いえ、送出できてないので動かずです
- 68 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 00:25:23 ]
- >>58, 59
何がしたくて, 何をやったらどうなってるのよ? どう言う意味でパケットのフラグメントを使ってるのよ? IP フラグメントってのは, 下の例のような構成で, 中継が MTU=500 のネットに会わせて, 勝手に IP パケットを分割する 時の話だぞ 端点 -> MTU=1000 のネット -> 中継 -> MTU=500 のネット -> 端点 UDP で MTU 以上のデータを送信したいとかって話?
- 69 名前:デフォルトの名無しさん [2009/10/26(月) 15:50:31 ]
- selectって条件が揃うまで値を返さないんだよね?
そうなるとrecvとaccsept用に2つスレッド作らないといけないのか?
- 70 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 16:17:26 ]
- recv用とaccept用のディスクリプタを両方セットしとけば、いずれか一方が読み込み可能になれば返ってくる
スレッドは1つでok
- 71 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 16:39:01 ]
- UDPソケット作る時に宛先アドレスを指定して作った場合も
sendto,sendmsgを使うなら宛先は指定しなければならないんでしょうか?
- 72 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 17:41:42 ]
- > UDPソケット作る時に宛先アドレスを指定して作った
作り方教えて
- 73 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 17:44:43 ]
- あー
勘違いしてました
- 74 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 18:24:38 ]
- UDPでもconnectしとけばsend/recv使えるよ
- 75 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 20:21:31 ]
- これからネットワークプログラムを開発する場合
今のトレンドのプログラム言語はなんでしょうか
- 76 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 20:22:20 ]
- Rubyだ
- 77 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 20:26:40 ]
- Javaだ
- 78 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 20:29:14 ]
- トレンドなんか気にしているようではいけない
- 79 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 00:12:51 ]
- >>68
すみません、UDPでMTU以上のデータを送りたいということです。 分かりにくくて申し訳ないです
- 80 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 00:54:01 ]
- >>79
OSとか環境とか情報はないのか? sendto で宛先指定すりゃ普通に出ていかないか? 送れてない時ってエラー帰ってないか? どうしても send が使いたいんだったら >>74 もっとも, 組み込み用のスタックとかだと UDP の connect は, 実装してないスタックもあるらしいが…
- 81 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 06:19:11 ]
- >>79
送れません。
- 82 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 10:31:31 ]
- なんでRFCも読まずにネットワークプログラムしてる奴がゴロゴロいるんだ?
- 83 名前:デフォルトの名無しさん [2009/10/27(火) 23:38:53 ]
- ICMP って 「アイコンプ」って読んだら変かなあ
- 84 名前:デフォルトの名無しさん [2009/10/27(火) 23:54:47 ]
- hen
- 85 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 23:56:00 ]
- SNMPをスヌンプって読む人はいるよ
漏れは読まないけど
- 86 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 23:57:11 ]
- >>82
ノ
- 87 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 11:08:25 ]
- WSDLはうぃずどぅるだけどな
- 88 名前:デフォルトの名無しさん mailto:sage [2009/10/31(土) 04:47:46 ]
- リフラグメント前提のパケットを大量に流してあげると、フラグメントしてくれる親切なルータにDoS出来てしまう気がした。これってセキュリティホールじゃ?
ICMP echoは捨ててもいいと思うけどね。ルータで捨てた時に送って来るICMPは捨てると良くないことが起きそうだが。
- 89 名前:デフォルトの名無しさん [2009/11/01(日) 21:35:44 ]
- >>80
UDPのconnectなんてあるんですね。。でも、connectすりゃ、send,recv使えるって しなくてもmtu以下のサイズなら使えます。そういうことではないのでしょうか? OSがUNIXでもwindowsでもないからおくれないのかなぁ
- 90 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 21:47:16 ]
- connectしなかったらsendは使えない
だって宛先不明 sendtoやsendmsgは使える connectしたらsendも使える
- 91 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 23:04:55 ]
- >>88
そんな古いDoS攻撃…
- 92 名前:デフォルトの名無しさん [2009/11/01(日) 23:21:35 ]
- 複数の接続を受けるサーバーを作りたいんだけど
人数が増えるたびrecvの回数増やすにはどうすればいいんだ?
- 93 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 00:37:19 ]
- recvの回数増やすというのはよくわからないが
受け付けた接続ごとに別々のスレッドを立ち上げるか selectやpoll等を使ってひとつのスレッドですべての接続を捌くか 好きなほうを選べ
- 94 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 02:12:48 ]
- スレッドで処理してる間に、パケット届くと取りこぼしそうだw
- 95 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 02:37:43 ]
- はあ?
- 96 名前:デフォルトの名無しさん [2009/11/02(月) 03:33:19 ]
- UDPパケットを取りこぼしなく取り込みたいのですが
なにかいい方法ありませんか?
- 97 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 09:59:52 ]
- あきらめれ
- 98 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 10:28:49 ]
- >>96
取りこぼさないのは無理なので、取りこぼしたことを検出して回復を図る
- 99 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 11:25:32 ]
- 取りこぼしたくなければ素直にTCP使っとけ
UDPにするなら取りこぼしてもいいようにプログラム側を設計しろ っていうのが定型文的な解答
- 100 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 15:29:39 ]
- 決してしてはならないのは
「Ethernat直結でしか使わないからUDPでも取りこぼしなんて起きないだろう」 などと考えること。これをやってハマる初心者が意外に多くて困る。
- 101 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 16:09:27 ]
- 同時にパケット発射すれば簡単に消えるしな。
- 102 名前:デフォルトの名無しさん [2009/11/04(水) 18:16:51 ]
- マルチスレッド鯖製作中なんだけど
誰かからデータ受信したら送信してきた相手以外の クライアントにそのデータを送るにはどうしたらいいの?
- 103 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 18:29:17 ]
- 言葉どおりにやればいい
- 104 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 18:31:15 ]
- 受信したことを別スレッドに通知するにはどうすればいいの?
- 105 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 19:14:21 ]
- 通知を受け取りたい各スレッドごとにキューのようなデータ構造を何か用意する
通知を送りたいスレッドは宛先スレッドのキューに送りたいデータを置く 通知を受け取りたいスレッドはヒマなときに自分のキューを見てデータが来ていたら取り出す OSによってはそういったメッセージキューの機能をすでに持っていることもある 自分で作る場合はスレッドセーフにすることを忘れずに
- 106 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 19:29:06 ]
- 難しいこと考えないで、
受信したスレッドが全部のソケットに書けばいい 排他が気になるなら、ひとつmutexをロックしておけばいい
- 107 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 19:30:21 ]
- >>102
その質問そのものをコードにしてみればいいじゃないか(受け取ったデータを他に転送) リソース競合には気をつける必要があるけど処理自体はおまいの質問そのものだぞ
- 108 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 19:32:41 ]
- >>102
何か効率の良い方法とか、そういうライブラリの存在を訊きたいのかもしれないが そのレベルだとどちらの意味でもがんばって送信しやがれってレベルでしかないぞ。
- 109 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 22:04:39 ]
- >>106
スレッドに値渡ししたら次のアクセプトで変数上書きしてて 受信したスレッドは、送信する相手のソケットを知ることができないんだ だから他のスレッドに通知してそのスレッドから送信させようかなと グローバルの配列で管理しておかないとだめってことか
- 110 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 22:13:09 ]
- 配列というか上に書いてある通りキューだろ
(キューの実装は配列でもいいけれど)
- 111 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 22:36:17 ]
- でもそれってrecvをノンブロックのしないといけないんでしょ?
- 112 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 22:56:51 ]
- そんなこと関係ない。
- 113 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 00:15:28 ]
- どういうこと
ノンブロックで受信とそのキューとやらのチェックをポーリングさせるってことじゃないのか
- 114 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 01:33:27 ]
- 1接続しか許さないサーバプログラムを作る方法を教えてくだちい
listen()でバックログを1にしてaccept()した瞬間にlistenソケット閉じて ってやればいいかと思ったけど acceptする前にどんどん接続を受け付けやがる
- 115 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 02:47:46 ]
- 接続待ち受けのソケットでそのまま通信すればいいんじゃね?
- 116 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 04:37:56 ]
- システムコールに惑わされずにまずRFC読め
- 117 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 08:47:12 ]
- 同期用キューでも作って渡せばいい
詳しくはこっちだな マルチスレッドプログラミング pc12.2ch.net/test/read.cgi/tech/1253521167/
- 118 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 09:01:16 ]
- >>114
無理なOSは無理なんで諦めてください。 あらかじめ双方のポート番号が分かっているなら 双方からconnectって手があるけど。
- 119 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 09:02:35 ]
- >>113
お前がそう言う実装に拘る理由こそ、どういうこと?
- 120 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 09:29:30 ]
- >>114
キミのやりたい事は完璧にはできない。 バックログを0にして、acceptしたらlistening socketをcloseする。 これでもacceptしてからcloseするまでの間は接続を受け付けてしまう。 >>118 可能なOSを例示してくれ。今まで聞いたことが無いから知りたい。
- 121 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 09:41:41 ]
- 昔のvxWorks
- 122 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 10:01:50 ]
- >>118
双方からconnectってなんだよ。
- 123 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 10:46:35 ]
- ポート食いつぶし攻撃か?
- 124 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 11:55:49 ]
- マイコンのプロトコルスタックを作ってる最中なのだがちょっと質問。
データ送信したとき全くの正常ならば 相手から返ってくるAcknoledgeNumber=自分が送信したSequenceNumber+TCPデータ長 となる筈なんだろうけど、この相手のACKパケットに入ってるAcknoledgeNumberが和より少ないときってこっちは何をすれば良いんだ? もらったAcknoledgeNumberの分までは正常と見なして続きから送り直せばいいのかね?
- 125 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 15:25:59 ]
- >>124
そんなもんは気にせずに window size が 0 になるまで無理やり送りつけるんだ
- 126 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 17:43:56 ]
- マイコンに限らず再送バッファの大きさに支配されると思う
再送バッファサイズ<=窓までは送れる
- 127 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 22:18:00 ]
- >>126
最後は再送バッファサイズの問題とかスロースタートの問題には 行き当たるんだろうけど、プロトコル的には送ったもん勝だわな
- 128 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 02:03:33 ]
- >>122
host1: socket→bind→connect host2: scoket→bind→connect TCPの接続開始ハンドシェイクはこういうやり方でも可能。
- 129 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 22:03:48 ]
- 意味が分からん。
ソースで示して>128
|

|