1 名前:ftp-data mailto:sage [2007/08/07(火) 01:47:35 ] 主にソケットに関しての質疑応答スレッドです。 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 辺り 足りなかったら適当に付け足してね 前スレ ネットワークプログラミング相談室 Port19 pc10.2ch.net/test/read.cgi/tech/1159692799/ 関連スレ Java ネットワークプログラミング 【教えて!】 pc11.2ch.net/test/read.cgi/tech/1086238859/
684 名前:デフォルトの名無しさん [2008/01/12(土) 16:46:36 ] 何が使いにくいん?
685 名前:デフォルトの名無しさん mailto:sage [2008/01/12(土) 16:51:39 ] httpしか繋げたことないから難しく見えるんじゃね
686 名前:デフォルトの名無しさん mailto:sage [2008/01/12(土) 17:27:19 ] >>682 スレッド起こして解決できたらイベントで通知
687 名前:682 mailto:sage [2008/01/12(土) 18:07:52 ] >686 書き忘れていましたが複数のスレッドで同時に解決できるようにしたいんです。 でもgethostbynameだと同時に使えないから1つずつ解決することになって、 それはちょっと嫌だなあと。タイムアウトするまで次の解決ができないって状況は避けたい。
688 名前:デフォルトの名無しさん mailto:sage [2008/01/12(土) 18:10:27 ] gethostbyname2_rとかなかったっけ?
689 名前:デフォルトの名無しさん mailto:sage [2008/01/12(土) 19:48:04 ] たとえばadns使うとか。 NetBIOS系の名前解決はしてくれないけど
690 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 02:01:33 ] クライアント・サーバ間を共通鍵で暗号通信をしたいのですが, 通常のクライアント・サーバシステムにおいて,あるクライアントとの 共通鍵の関連付けはどのように行うのですか クライアントから通信を開始するとどの共通鍵で復号すれば良いかわからないと 思うのですが・・・
691 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 02:08:37 ] クライアント識別子みたいなのと鍵を1:1にしてサーバで保持しておけばどうかな?
692 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 02:09:16 ] 使っていいのが共通鍵暗号のみなら 最初はユーザー名をそのまま送るしかないんじゃないの? パスワードは暗号化して
693 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 02:12:31 ] もしくは鍵からハッシュ値でも生成して最初の通信の時に付けておけば
694 名前:690 mailto:sage [2008/01/14(月) 14:07:03 ] ありがとうございます >>691 クライアントには,ユーザIDが与えられているので,それと関連付ける方法ができそうです. ハッシュ値を使う方法もいけそうなので検討してみます.
695 名前:デフォルトの名無しさん [2008/01/14(月) 17:00:13 ] zoomtv.web.fc2.com/?1xd04@VisualAirForce zoomtv.web.fc2.com/?1xcvk@ParadiseCityTV zoomtv.web.fc2.com/?1xcz8@DancingDuoMiku
696 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 22:25:39 ] 鍵交換方式使えばいいと思うけどね まあ、どの程度の暗号強度を求めるのかで適当に決めればいいよ
697 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 03:48:31 ] ハッシュ関数って勝手に使ってライセンスって問題ないのかな? MD5とかSHA-1とか
698 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 04:28:58 ] アルゴリズム自体には無いけどライブラリは別なんで気をつけないといかん 嫌なら自分で書け
699 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 05:28:48 ] Javaならデフォでついてるけどな
700 名前:674 mailto:sage [2008/01/15(火) 12:02:02 ] >>684 4-5年前 NetBSDの teldx だったかな、telnet サーバーのソースは見たことあります。 しかし、コードがトリッキーなのがはいってて理解不能でした。 teldx に限らず、while ループが何百行もつづいてたり、マクロがぐちゃぐちゃはいって たりして読みずらい。。
701 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 13:15:06 ] >>694 OpenSSLは/etc/ssl/certsに証明書が置いてあるよ。 もちろん証明書の中には公開鍵が入ってる。 openssl dgstコマンドでハッシュつくって、 そのハッシュが名前になったシンボリックリンクが本体へ向けてある。 WindowsでもOpenSSLならC:\etc〜になるだけで同じ。
702 名前:デフォルトの名無しさん [2008/01/15(火) 18:32:21 ] マルチスレッドで以下のような構成です。 ・UI スレッド(main スレッド) ・作業スレッド(Winsock1.1 初期化/後処理 + データの送受信) この場合はWinsockのデータベース関数をどちらのスレッドで使用するべきですか?
703 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 18:35:21 ] >>702 何がいいたいのかわからないのだけど… >Winsockのデータベース関数 ってなにかな?
704 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 19:03:30 ] gethostby〜とか
705 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 19:05:43 ] netdb.h
706 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 22:28:42 ] >>702 今時 Winsock 1.1 もどうかと思うが、どっちにせよ Winsock の初期化/後処理 (Cleanup のことかな?) を作業スレッドで やるなら、Winsock 関連の処理は作業スレッドでやった方が いいと思う。
707 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 01:43:38 ] 新たに名前引き用スレッドプールを新設するのが好み。
708 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 11:02:38 ] 結果のコンシューマもマルチスレッディドになってないと意味ないけどね。
709 名前:デフォルトの名無しさん [2008/01/16(水) 16:51:22 ] 作業スレッド内でWinsockの処理を行うとして、 データベース関数はWSAAsyncGetHostByName等、非同期を用いるべきでしょうか?
710 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 21:59:30 ] それは、君のやりたいこと次第だからなんとも言えないけど、 WSAAsyncGetHostByName() は、ウィンドハンドルを要するから 作業スレッドでは使いにくいよ。 ぶっちゃけ WSAAsyncGetHostByName() は、スレッド使わない 人向けだよ。
711 名前:デフォルトの名無しさん [2008/01/19(土) 15:19:46 ] TCP最高や! UDPなんか最初からいらんかったんや!
712 名前:デフォルトの名無しさん [2008/01/19(土) 22:03:37 ] WSAAsyncGetHostByName()を使わないとすると スレッド内でデータベース関数がブロッキングを起こさないようにするにはどうしたらいいですか?
713 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 22:13:38 ] 別のスレッドを起動してそれにやらせる
714 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 00:14:28 ] ダイアログに貼付けたエディットの中の文字列をGetDlItemTextで取得し gethostbyname関数を使うとNULLが返されるんですが、 NULLが返される原因としては、どんなものがありますか?
715 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 00:39:47 ] プラットフォームがよくわからんけど、なんで errno とか GetLastError() とかを見ないんだ?
716 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 00:41:25 ] 一番の原因として考えられるのは 渡した文字列を確認したりWSAGetLastErrorを見たりという簡単なことすら やろうとしない人間がコードを書いていること
717 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 02:41:16 ] ネットワークプログラミングとは関係ないし WindowsAPIとも関係ないな
718 名前:デフォルトの名無しさん [2008/01/20(日) 23:45:31 ] WSAStartupはWinMain側でしか出来ませんか?
719 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 00:01:24 ] 試した方が速くね?
720 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 00:37:06 ] 試して出来ませんでした。
721 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 00:48:30 ] ということは出来ないってことだね 解決して何よりです。
722 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 14:32:41 ] ソケット通信について質問します。 サーバー win-XP JAVAアプリ クライアント Linux gccアプリ コネクション成立後に、クライアント側から close → open する場合、 close後にopenするまでの待ち時間はどのくらいとればいいのでしょうか?
723 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 14:35:19 ] 別に待たなくて良い
724 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 17:02:38 ] >>723 サーバー側で時々クライアントのソケット断検出がうまくいかない時があったものですから。 アプリケーションの不具合みたいです。 すみませんでした。
725 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 23:20:47 ] 生ソケ開いて Macアドレスと IPとポートでフィルタしようと 思うのですが、効率のいいアルゴリズム 知らないでしょうか?
726 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 00:02:29 ] 受信がうまくいかないのですが、 //送信 char szBuffer[1024]; char lpFileName[1024] = "/case.html"; sprintf(szBuffer, "GET %s HTTP/1.0\r\n\r\n",lpFileName); nRet = send(Socket, szBuffer, (int)strlen(szBuffer), 0); if (nRet == SOCKET_ERROR) { SendMessage(GetDlgItem(pval->hWndMain,IDC_EDIT2),\ EM_REPLACESEL,0,(LPARAM)"sendに失敗"); closesocket(Socket); } //受信 while(1) { nRet = recv(Socket, szBuffer, sizeof(szBuffer), 0); if (nRet == SOCKET_ERROR) { SendMessage(GetDlgItem(pval->hWndMain,IDC_EDIT2),\ EM_REPLACESEL,0,(LPARAM)"recvに失敗"); closesocket(Socket); break; } if (nRet == 0) break; sprintf(szBuffer,"%s",szBuffer); SendMessage(GetDlgItem(pval->hWndMain,IDC_EDIT2),\ EM_REPLACESEL,0,(LPARAM)(LPCTSTR)szBuffer); }
727 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 00:15:55 ] > sprintf(szBuffer,"%s",szBuffer); ( ゚д゚) !?
728 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 00:30:53 ] >>725 bitmaskするだけだろ
729 名前:デフォルトの名無しさん [2008/01/22(火) 01:17:46 ] 動画にアクセスしたらzoomeのDQNは早い 70Mbpsぐらい出たよ インターネットなら 透過スピードに近いのではないだろうか? www.lunascape.jp/community/ Lunascape Core Version 4.5.2.1 / ANSI Operating System Version 6.0.6000 Internet Explorer Version 7.0.6000.
730 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 05:08:26 ] bitmask?よくわからん?
731 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 20:55:45 ] あきらめたほうがいいね
732 名前:デフォルトの名無しさん [2008/01/22(火) 21:06:04 ] ソケットでの通信を行うときのバッファサイズについてなのですが、 イーサネットのフレームは最大1518バイトらしいので バッファは1600バイト程度取っておけばいいんでしょうか?
733 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 21:15:05 ] >>732 TCPのウィンドウバッファはもっと大きいよ。
734 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 17:41:26 ] どのくらい取っておくのが普通?
735 名前:デフォルトの名無しさん [2008/01/23(水) 18:27:41 ] >>734 TCPとかイーサネットとかの仕様は考えなくて良い。 自分で設計したプロトコルに基づいてバッファを決めるのが普通。 どうせ、recvでまとめて受信したり、分割して受信したりするんだから。
736 名前:デフォルトの名無しさん [2008/01/24(木) 14:50:24 ] 質問す。 ソケット繋がった状態で、LANケーブル抜いて、すぐ差し直して、まだソケット繋がったまま。 何故切断されない?
737 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 14:55:48 ] TCPは送ったパケットが届かなくても何度か再試行するから、そのときに届けば問題なし
738 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 15:05:32 ] >>736 そもそも下のレイヤの信頼性を補うためのプロトコルがTCPだ…
739 名前:736 mailto:sage [2008/01/24(木) 15:12:29 ] >>737 >>738 あー、そっか・・・いいこという。
740 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 15:28:30 ] WindowsでLANケーブル抜くと断線扱いで まさに>>736 のときネットワークが落とされるんだが これはどうしたらいいかね
741 名前:736 mailto:sage [2008/01/24(木) 15:40:46 ] >>740 それは回線切断を検知したというか、 LANケーブルが抜けたことを検知した、ってことかな。
742 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 22:19:21 ] >>740 Windows で TCP/IP のメディア検出機能を無効にする方法 support.microsoft.com/kb/239924/ja
743 名前:デフォルトの名無しさん [2008/01/27(日) 15:31:55 ] accept関数の宣言は /include/sys/socket.hでされてるのは分かったのですが externされてて中身がどこで表記されてるのかが分かりませんでした。 どこに表記されているか教えてもらえないでしょうか…。
744 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 17:46:25 ] UNIX系統なら、acceptの中身はシステムコール叩いてるだけだから、 カーネルに実体がある、といった方が良いのかな。
745 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 18:53:00 ] 詳解TCP/IP Vol.2だと、uipc_syscalls.cを見てるね。
746 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 08:04:18 ] チャットプログラムを作ろうとしているんだけど 同時に複数のデータを送りたい場合はどういうやり方が常道なんだろう 具体的には発言者、発言内容、文字色のデータがあるとして 適当にカンマ区切りとかにして一回で送信するか それぞれで三回送信した方がいいのか
747 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 12:03:48 ] TCPなら3回に分けて送信したって区切りの代わりにはならんぞ 10バイトを3回送信しても30バイト一度に受信するかもしれんし1バイトずつ30回受信するかもしれんし 区切り文字でもいいけどデータサイズを前に付ける方がたぶん楽 カンマ区切りにするなら発言内容にカンマ含んでるときのことも忘れずに
748 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 12:38:43 ] isprint()な文字しか投稿不可能なんだろうから、 ヌル終端に決めといて、最大サイズ制限あり。 発言者\0発言内容\0文字色\0 が簡単と思う。 送られたデータサイズは疑う必要があるから、 (分散システムでは、完全性の仮定レベルをかなり低くする必要がある) データサイズが送られても、結局は同じ様なコードになる。 バッファ管理とか、タイムアウト処理とか。
749 名前:デフォルトの名無しさん [2008/01/28(月) 12:53:24 ] 質問なんですが、 select使って多重処理のサーバ作ってるのですが、 A、Bという二つのクライアントがサーバに繋がってるとして Aから送った文字列に対してのレスポンスをAだけでなくBにも返す時ってどうすればいいんですか? アドバイスだけでもお願いしますorz
750 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 13:02:15 ] AとBの両方に同じものをsendすれば?
751 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 19:07:13 ] ある装置で、クライアントで接続するTCPポートxxxxxと、サーバーで接続するTCPポートxxxxx + 1があって 装置から接続先に送るものを、クライアントとして接続したポートで送信し、接続先から装置に対して受信 するものをサーバーとして接続したポートで受信する仕様で通信しているのですが。 種類と発生タイミングの違う複数のデータに対して同じポートで送受信しないといけません。 送信するデータは応答を返すのですが、送信するポートと別のポートで応答を受信するような感じです。 糞仕様にしか思えないのですが、こういうのもありなんでしょうか?
752 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 19:44:57 ] SYNパケットはどんな目的で使われるものですか?
753 名前:デフォルトの名無しさん [2008/01/28(月) 19:46:26 ] TCP3ウェイハンドシェイク
754 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 19:49:05 ] >>751 日本語でおk
755 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 19:54:22 ] >>751 読みづらい…。
756 名前:デフォルトの名無しさん [2008/01/28(月) 20:05:24 ] とんでもなく勘違いしているのかもしれんが Winsockってacceptで処理がとまりませんか? どうしてもこれが気に入らないのですが、どうにかならないですか?
757 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 20:12:33 ] ノンブロッキングにすれば止まらない
758 名前:デフォルトの名無しさん [2008/01/28(月) 20:20:17 ] ありがとうございます!
759 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 20:44:28 ] 非同期にしても止まらない
760 名前:751 mailto:sage [2008/01/28(月) 21:40:17 ] 装置A→装置Bに(Aから見た)送信専用ソケットと、受信専用ソケットを2つ開いてデータのやりとりをする形式についてです。 @が装置Aから装置Bに送信するデータ Aが装置Bから装置Aに送信するデータ 装置A 装置B ソケット1 ソケット2 ソケット1’ ソケット2’ | | @ | | | +------------>| | | | @の応答 | | |<-------------------------------+ | | | | | | A | | |<-------------------------------+ | | Aの応答 | | | +------------> | データはいろいろな形式があって、それを送受信用ソケットでまとめて送る感じです。 Telnet, FTP 等のサービスを送受信用ソケットでやりとりするみたいなものは、どうなんだろうかと。。
761 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 21:40:54 ] ごめんずれちゃった。。
762 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 22:50:37 ] >>760 だれか解読ヨロシク。
763 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 22:53:03 ] 頭悪いPLC屋とか相手だと、TCP2コネクションで送受信回線が〜 とか言い出すな。
764 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 22:55:56 ] 俺は、これが気になる。 > Telnet, FTP 等のサービスを送受信用ソケットでやりとりする なんか、すごいこと考えてそうな予感... んなわけねーか。(w
765 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 22:58:00 ] Winsockを使ってSYNパケットを送信する事は可能ですか?
766 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 23:04:10 ] connect発行するんじゃなくて、生に「SYNだけ」送信する、 という話なら、おとなしくWinPCapとか入れて叩いた方がいいとおもう。
767 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 00:29:54 ] とりあえず効率や生産性を無視して動くものを作ってみろと言いたい
768 名前:デフォルトの名無しさん [2008/01/29(火) 02:11:03 ] sendで任意のホストに文字列を送信したいんですが どうも上手くいきません。 アクセプトしたときのsockaddrinのIPとポートを弄るだけでは駄目なんでしょうか? どうすれば送れるのでしょうか
769 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 02:45:16 ] いいからソース出せや
770 名前:デフォルトの名無しさん [2008/01/29(火) 03:03:22 ] とりあえずhost1から来た文をhost1,2に返すような感じのコードで あらかじめfrom2にhost2のIPポートを入れておいて socket() bind() listen() while(1) { switch(select()) case -1:エラー処理 case 0:タイムアウト default: accept( struct sockaddr * &from) recv() send() if(fromがhost1の情報だったら){ from = from2 send()
771 名前:768 [2008/01/29(火) 03:09:06 ] >>769 あ・・途中でShift Enterで書き込んじゃいましたゴメンナサイorz コード的には>>770 のような感じです。 後はクライアントが打ち込んだ文字列をそのままオウム返しするような感じです。 これで動かすとhost1で例えばAAABBBと打ち込むと host2には届かずに、host1だけにAAABBBと帰ってきます。 次にCCCDDDと打ち込んだ時に host1だけにもう一度AAABBBが帰ってきます。 次にEEEFFFと打ち込んだときに host1だけにCCCDDDが帰ってきます。 何かhost2に届かないばかりかワンテンポ遅れる+ダブって帰ってきてしまいます。
772 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 04:10:18 ] × 〜のような感じです × 基本を無視 × 環境を書かない
773 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 05:14:02 ] AAABBBが2度返ってくる時点で、どう見ても自分のコードのバグだろうに。 ところで、一番重要な、acceptの返り値はどうしてるんだい?
774 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 06:58:05 ] tteいうか、 >from = from2 >send() まさかこれで from2 のどこかのポートに何か送れると思ってる?
775 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 07:02:08 ] 768は、TCPの「コネクション」というものについてもう一度考え直すように。 acceptの戻りのソケットは、そのIP:port専用で、from_addrを 書き換えたからと言ってもどうにもならない。
776 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 16:30:55 ] 気になったんですが、 WinPCap等はどうやって作られているんですか?
777 名前:760 mailto:sage [2008/01/29(火) 16:50:24 ] >>763 えーとPLC屋です。いわれてる通り、送信のみ、受信のみのコネクションをそれぞれもつ感じです。 Telnet, FTP というのは例えで、ネットワークの階層構造を考えたときに、トランスポート層のTCPとその上のサービスが 1:1じゃない実装になるのですが、ありなのかなと。
778 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 19:12:45 ] ありもなにも、TCP2回線つかって、TCPをもう一段建て増しに するような真似は止めとけとしか言いようがない。
779 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 23:49:48 ] >>776 はいどーぞ、そういうときはドキュメント読んでね ttp://dog.tele.jp/winpcap/html/main.html
780 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 02:01:22 ] >>776 たんにドライバに渡されるEthernetパケットのコピーを横取りしてるだけ。
781 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 14:03:09 ] TCPのTIME_WAIT状態に関してRFCでは2MSL時間とあり、OSの実装によって 30〜240 秒取られているのですが。 a.2MSLまたないで同じポートを使用した場合、ルーター等で貯めこんでいた以前のパ ケットを受信することで、シーケンスの順序がおかしくなりRSTフラグが飛び交う。 なのでTIME_WAITは必要? b.TIME_WAITはクライアント側に必要で、サーバー側は無視してよい。通信用とは別の Listen用ソケットを使用するとしても、通信用でTIME_WAITは無視してよい。 c.TIME_WAITと比較してごく短い間隔で接続を繰り返すアプリがあると、利用できないポ ートが増え続けいずれ通信できない状態になる。こういう時TIME_WAITは短くして良い? それともアプリが間違っている?
782 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 15:22:22 ] >>781 TIME_WAIT は TCP パケットの順序解決を保証するもの。 同一 IP/port 同士が一度コネクションを切り、新たに コネクションを貼ったときにネットワーク内に同じシー ケンスIDが登場しないことを保証している(新旧のパケッ トが混ざらないことを保証している)。 要するに世界中のネットワークから通信に使ったパケッ トが消えてなくなるのに 2MSL 待てばまぁいいんじゃね? ということ。 たとえば、サーバ側で過去 2MSL 間に接続した相手の IP/port のリストをローカルな port 毎に管理していて、 接続要求に来たクライアントの IP/port がリスト内に 無ければ 2MSL 待たずに接続して良い(似たような話が RFC にあったはず)。
783 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 19:15:06 ] アプリケーション層でプロトコルの設計、送受信処理の仕方を 勉強したいのですが、おすすめの書籍やサイトはないでしょうか? やっぱり、RFCやオープンソースのコード読むのが一番?
784 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 19:53:01 ] ミドルウェアの解説本読んでみたら?