ネットワークプログラミング相談室 Port24
レス数が900を超えています。1000を超えると表示できなくなるよ。
0001lmtp
2009/07/07(火) 00:46:28Programming 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辺り
足りなかったら適当に付け足してね
前スレ
ネットワークプログラミング相談室 Port23
http://pc12.2ch.net/test/read.cgi/tech/1230466044/
関連スレ
ネットワークプログラミング雑談
http://pc12.2ch.net/test/read.cgi/tech/1235800707/
Java ネットワークプログラミング 【教えて!】
http://pc11.2ch.net/test/read.cgi/tech/1086238859/
0809デフォルトの名無しさん
2009/09/15(火) 21:55:060810デフォルトの名無しさん
2009/09/15(火) 22:03:30斧は待ち行列じゃないよ
排卵と精子の関係だお
0811デフォルトの名無しさん
2009/09/15(火) 22:20:33たぶんないな。
システムが割り当てたWSA系のリソース開放でしょ
だとすれば最悪メモリリーク起こすぐらいで挙動に大きな問題を抱えるものじゃないと思う。
0812デフォルトの名無しさん
2009/09/15(火) 23:35:31どういう意味?
0813デフォルトの名無しさん
2009/09/16(水) 10:23:26その後、サーバーからクライアントに返信した場合、クライアントアプリケーション側で受信できるのって
クライアントからサーバーに送信した地点で一時的にポート解放されてるから?
ファイアウォール等で受信拒否していてもつながるのも同じ理由なんだろうか
もしそうだとしたら、サーバーと通信中の2つのクライアントにお互いのIPとポートを教えて
お互いに何度かパケットを送信すれば何回目かで届き、
一度サーバーを経由するけど、そんな感じでP2Pネットワークを構築することってできる?
ためしにサンプルプログラムを組んでみたらうまくいったんだが、理論的にはどうなんだろう。
ルーターとかネットワーク環境によってはだめなんかな・・・
長文すまそ
あとスレチだったらすまそ
0814デフォルトの名無しさん
2009/09/16(水) 10:45:160815デフォルトの名無しさん
2009/09/16(水) 11:20:090816デフォルトの名無しさん
2009/09/16(水) 12:29:540817デフォルトの名無しさん
2009/09/16(水) 12:46:42セッションハイジャックとかしらべてみたらどうかな
0818デフォルトの名無しさん
2009/09/16(水) 13:05:00サーバーとの接続は公開鍵方式で、その後クライアント同士の接続はサーバーが指定した
秘密鍵で行う予定なのでその辺は問題ない…と思う
セキュリティー云々は置いといて、ファイアウォールはアプリケーション許可してもらう前提で
これで一般家庭でつながらないことは無いのかな?と思ったまでです
0819デフォルトの名無しさん
2009/09/16(水) 16:04:150820デフォルトの名無しさん
2009/09/16(水) 16:05:200821デフォルトの名無しさん
2009/09/16(水) 16:08:25何か垂れ流してるみたいで気持ちが悪い
0822デフォルトの名無しさん
2009/09/16(水) 16:20:020823デフォルトの名無しさん
2009/09/16(水) 16:23:260824デフォルトの名無しさん
2009/09/16(水) 16:31:092.液晶画面の局所的なフレネル反射の本気
3.819が光過敏性てんかんになった
4.ソケットを開いたプロセスが終了しきれずに生きている
5.知らね
0825デフォルトの名無しさん
2009/09/16(水) 16:34:400826デフォルトの名無しさん
2009/09/16(水) 16:37:460827デフォルトの名無しさん
2009/09/16(水) 16:40:410828デフォルトの名無しさん
2009/09/16(水) 16:54:180829デフォルトの名無しさん
2009/09/16(水) 20:00:09Wiresharkも回せないのか?
0830デフォルトの名無しさん
2009/09/17(木) 09:07:17なんでそういう単語を照れもなく使っちゃうレベルの人が
Winsock なんかに手ぇ出すかなあ。
0831デフォルトの名無しさん
2009/09/17(木) 18:38:250832デフォルトの名無しさん
2009/09/17(木) 20:38:44こいつにレスポンスコード302返したらどうなるん?
0833デフォルトの名無しさん
2009/09/17(木) 21:03:230834デフォルトの名無しさん
2009/09/17(木) 21:36:18セッションクッキー情報はTemporary Internet Filesに作られないのでせうか?
0835デフォルトの名無しさん
2009/09/17(木) 21:49:580836デフォルトの名無しさん
2009/09/17(木) 22:40:050837デフォルトの名無しさん
2009/09/18(金) 03:01:400838デフォルトの名無しさん
2009/09/18(金) 15:55:07サーバープログラムに、クライアント数制限をつけたいと思っています。
例えば、10人までしか接続が確立できない。という類です。
FD_ACCEPTが呼ばれた際、acceptをします。
定員を超えていたら、次の行でacceptから帰ってきたSOCKET(正常なもの)をshutdownし、closesocketしました。
そうしたところ、どうやらクライアントに切断したことが伝わらないようで、クライアントのrecvがSOCKET_ERRORを返してくれません。
FD_ACCEPTを抜けた後、別の場所(メインループなど)でshutdown & closesocketした場合は伝わるようです。
・FD_ACCEPT内でclosesocketしてはダメなのでしょうか?
・そもそも上限に達していたら、acceptしないという方法はないのでしょうか?
ご教示よろしくお願いいたします
0839デフォルトの名無しさん
2009/09/18(金) 16:20:07・recvが0を返したら、通信終了でいいんじゃない?
> ・そもそも上限に達していたら、acceptしないという方法はないのでしょうか?
それぞれのクライアントに対する処理は非同期で動作してる前提で話すけど、
acceptする前に、セマフォとかで調停する。
0840デフォルトの名無しさん
2009/09/18(金) 16:35:28お返事ありがとうございます。なるほど。SOCKET_ERRORではなく、recvの返り値が0の場合も切断なのですね。
調べてみたところ、recvが0を返すのは「正常な終了」が行われた時とありました。
どうもありがとうございます。
0841デフォルトの名無しさん
2009/09/18(金) 16:40:43aaceptする前に既にクライアントには受理されたことになってしまうので
http://www.kt.rim.or.jp/~ksk/sock-faq/unix-socket-faq-ja-3.html#ss3.3
acceptする前に調停しても、クライアントには伝わらないんじゃないかな。
acceptしないだけだと、たぶんクライアント側をしばらく待たせることになるので
それよりは一旦acceptだけしてから切断するほうが親切じゃないかな。
0842デフォルトの名無しさん
2009/09/18(金) 17:07:45ありがとうございます。
最初から拒否しておく。ということはできないのですね。
意外でした。
・FD_ACCEPTの中で切断しても大丈夫
・上記の結果、クライアント側のrecvの返り値が0になる
のが確認できました。
0843デフォルトの名無しさん
2009/09/20(日) 19:01:52既に接続が確立されてる相手からの送信データを待ちつつ
新たな接続が無いかどうかチェックするにはどうしたらいいの?
0844デフォルトの名無しさん
2009/09/20(日) 19:47:02acceptでブロックされたくないなら
該当descriptorをselect/pollすりゃいい
0845デフォルトの名無しさん
2009/09/20(日) 19:47:03接続待ちになるのはacceptね。
> 既に接続が確立されてる相手からの送信データを待ちつつ
> 新たな接続が無いかどうかチェックするにはどうしたらいいの?
接続が確立した相手用に新しいスレッド起こすか、
select使って複数のソケットに対してデータ待ちするか。
Windowsなら他の方法もあったかもしれない。
0846デフォルトの名無しさん
2009/09/20(日) 19:47:200847デフォルトの名無しさん
2009/09/20(日) 20:06:14select/pollのとこでフリーズしてしまいましたが。。
0848デフォルトの名無しさん
2009/09/20(日) 20:30:14別に>>844,845は、特に変な事は言っていないと思うけどな。
>>845に細かすぎる指摘(改善)すると、以下のようになるけど。
>select使って複数のソケットに対してデータ待ちするか。
==>select使って複数のソケットに対してデータ受信と接続を同時に待つか。
文句付けるなら、自分ならこうだ!ってのをレスしたほうがいいと思われ。
0849デフォルトの名無しさん
2009/09/20(日) 20:30:42素人でしゃばんな
0850デフォルトの名無しさん
2009/09/20(日) 21:15:37それは使い方が悪いからだろう。たぶん。
0851デフォルトの名無しさん
2009/09/21(月) 02:17:11夏厨は土に返ったはずであるが?
にーとさんかな?
0852デフォルトの名無しさん
2009/09/21(月) 07:09:590853デフォルトの名無しさん
2009/09/21(月) 12:58:080854デフォルトの名無しさん
2009/09/21(月) 14:22:25言語とかトラフィックパターン依存になるから、
プリミティブなソケット以上の共通化は不可能なのかね。
スレッドプールの共通インターフェイスが先か。
0855デフォルトの名無しさん
2009/09/21(月) 15:57:500856デフォルトの名無しさん
2009/09/21(月) 16:24:00俺のとこじゃフリーズしなかった
0857デフォルトの名無しさん
2009/09/21(月) 18:27:22select/pollのとこで止まってしまって先に進まなくなるのです。
0858デフォルトの名無しさん
2009/09/21(月) 19:13:010859デフォルトの名無しさん
2009/09/21(月) 19:19:500860デフォルトの名無しさん
2009/09/21(月) 21:17:270861デフォルトの名無しさん
2009/09/21(月) 22:26:20どこまでライブラリに機能を提供させるかという、境界線を引くのが難しい気がする。
トラフィックパターンが一方向の要求/応答に限定できるならRPC(JavaならRMI?)あるいは
HTTPライブラリで済むけど、わざわざソケットに手を出すのは、それ以外のパターンが
必要になる、ある程度複雑な(高機能な)アプリケーションを開発するケースだと思う。
ただ、そうなると、メッセージの衝突/送信権、分割/連結、優先制御/流量制御なども、
ライブラリが提供すべき機能要素として要求される(要求する人もいる)だろう。
またマルチスレッド/マルチプロセス/ファイバに関しても、どこまでライブラリで
対応させるべきか、人によって意見は分かれるはず。
だから、最終的には必要最低条件を満たしたソケットで落ち着いてしまうのだと思う。
個人的にはレコード指向(TCPのメッセージ境界対応)で全二重な機能だけを提供し、
あとは上位レイヤのプロトコル(アプリケーション)の実装にまかせる、軽いライブラリが
あってもよさげだと思うんだけどね。
0862デフォルトの名無しさん
2009/09/22(火) 15:55:58よかったね。
コード見せてくれないとわからんがな
0863デフォルトの名無しさん
2009/09/23(水) 16:30:480864デフォルトの名無しさん
2009/09/23(水) 16:35:36「readして読んだバイト数が0の場合」ってのじゃなくて、なんかのひっかけ?
0865デフォルトの名無しさん
2009/09/23(水) 16:35:440866デフォルトの名無しさん
2009/09/23(水) 16:51:050867デフォルトの名無しさん
2009/09/23(水) 16:55:47Unix 系の EBADF, ENOTCONN, EINTR, EFAULT は
相手がクローズするしないに関わらず発生する
0868デフォルトの名無しさん
2009/09/23(水) 19:07:23EINTR以外はプログラムバグじゃないの?
0869デフォルトの名無しさん
2009/09/23(水) 19:24:59そうだけど、そんなん言ったらECONNRESETだけじゃないか
明示的にエラーになってクローズされてるのは
0870デフォルトの名無しさん
2009/09/23(水) 21:32:37ですな〜
でも、recvが想定外なエラーを返した時点でそのソケットは捨てるしかないけど。
0871デフォルトの名無しさん
2009/09/24(木) 14:51:00一つのソケットでrecvとsendしたい場合はやっぱり非同期にするしかないのか・・・
0872デフォルトの名無しさん
2009/09/24(木) 15:23:51危なくはないと思うが。shutdown/closeさえ気をつければ。
ただ、recvとsendを別スレッドにすると、スレッド間でデータの共有が
必要になって面倒だから、普通はシングルスレッドで作るんじゃねえか?
完全にスレッドが分離してるんなら、別々でも無問題だろ。
0873デフォルトの名無しさん
2009/09/24(木) 15:24:47すくなくとも *nix は大丈夫なもよう
0874871
2009/09/24(木) 15:46:39レスありがとう
Winsock中級者向けの議論からも次の様な一文を発見
一方のスレッドが send() を呼び出し、別のスレッドが同一のソケットに対して recv() を呼び出すのは安全である、という伝説があります。
しかし私はこれを確認したことはありません。より堅固な情報やデモンストレーション用のコード、さらなる伝説などがあれば、教えていただけると幸いです。
まあとりあえず大丈夫だろうってことですね
0875デフォルトの名無しさん
2009/09/24(木) 15:50:58安価ミス
0876デフォルトの名無しさん
2009/09/24(木) 22:21:00Solarisは不定期にハングしてたよ
今はどうだかしらんけど・・・
0877デフォルトの名無しさん
2009/09/25(金) 12:10:34close後にレスポンス着てるみたいなんだがshutdownしないとだめ?
0878デフォルトの名無しさん
2009/09/25(金) 12:17:150879デフォルトの名無しさん
2009/09/25(金) 12:19:31送信スレッドと受信スレッドが別とかって話か?
必要なレスポンスなら何とかしてやるのが筋だろ?
送信側: SHUT_WR 送信で終了
受信側: 読込みバイト数0になるまでレスポンス読んで close
とか………
つか、プロトコル設計見直した方がええんちゃうか?
0880デフォルトの名無しさん
2009/09/25(金) 13:55:05送信パケットもモニタできるようにするのは不可能ですか?
WinPcapドライバを使えば送信パケットもモニタできるのだけど・・
0881デフォルトの名無しさん
2009/09/25(金) 21:03:37できんことは無いけど、それを作り上げていくと
WinPcapドライバが出来てしまうわけで
意味無いよな
0882デフォルトの名無しさん
2009/09/26(土) 20:27:520883デフォルトの名無しさん
2009/09/26(土) 20:46:56あーるいーしーぶい
0884デフォルトの名無しさん
2009/09/27(日) 01:52:410885デフォルトの名無しさん
2009/09/27(日) 16:29:19レスありがとうございます。
いろいろ調べてみた結果、
環境によって送信パケットをモニタできないことがあるみたいです。
別の環境だと普通に送信パケットもモニタできることを確認したので
問題を切り分けてる最中です。
詳しいことがわかりましたら報告させていただきます。
0886デフォルトの名無しさん
2009/09/27(日) 21:56:180887デフォルトの名無しさん
2009/09/28(月) 11:40:55その上何で今頃気づくんだろう俺orz
0888デフォルトの名無しさん
2009/09/28(月) 17:24:01やはり自民党清和会の下に結集し、日教組を壊滅させることでしょうね。
日教組の教師に「労働者の権利」などという左翼思想を吹き込まれた連中が義務も果たさずに
ウリ達は無理矢理連れて来られて強制労働させられているニダ、などと権利ばかり主張しています。
あとは残業代を要求して裁判を起こしてるような腐った輩を社会全体で徹底的に叩くことでしょう。
0889デフォルトの名無しさん
2009/09/29(火) 04:19:150890デフォルトの名無しさん
2009/09/29(火) 22:54:090891デフォルトの名無しさん
2009/09/29(火) 23:21:280892デフォルトの名無しさん
2009/09/30(水) 01:02:380893デフォルトの名無しさん
2009/10/01(木) 17:46:230894デフォルトの名無しさん
2009/10/01(木) 18:13:220895デフォルトの名無しさん
2009/10/01(木) 18:20:38uIPのUDPサポートが半端だからあれやこれや5種類くらいのスタックを参考にして自前で作ってるわ。
純組込系のスタックは金になるから公開しないのかなぁ。
0896デフォルトの名無しさん
2009/10/02(金) 05:38:11金払いたくない乞食はリナックスやバークレー辺りから適当にパクってくればいい訳で。その程度で困らないだろうし。
0897デフォルトの名無しさん
2009/10/02(金) 11:55:160898デフォルトの名無しさん
2009/10/02(金) 14:59:55> 純組込系のスタックは金になるから公開しないのかなぁ。
BSD のスタック移植することが多いかな
CPU の規模によっては、大昔 MIT が IBM PC に実装やつをモディファイ
して使ってる
0899デフォルトの名無しさん
2009/10/06(火) 22:23:220900デフォルトの名無しさん
2009/10/06(火) 22:43:080901デフォルトの名無しさん
2009/10/06(火) 22:57:060902デフォルトの名無しさん
2009/10/06(火) 23:48:30やめておくわ
0903デフォルトの名無しさん
2009/10/07(水) 00:25:580904デフォルトの名無しさん
2009/10/07(水) 11:17:020905デフォルトの名無しさん
2009/10/07(水) 11:24:05マイコンプログラミングと電子回路始めたら全然すごくないことが
わかった。
0906デフォルトの名無しさん
2009/10/07(水) 14:20:19ケーブルを流れてる定常波から信号を取り出してるのはすごいと思うけどね
promisc自体はたいしたことやってない
ただのbitパターンマッチの繰り返し
0907デフォルトの名無しさん
2009/10/07(水) 14:39:35selectはヘヴィーロードサーバで、
bitmask処理がオーバーヘッドになる。
>>6辺りからそれを報告した論文を辿れる。
0908デフォルトの名無しさん
2009/10/07(水) 20:57:33レス数が900を超えています。1000を超えると表示できなくなるよ。