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/
159 名前:150 mailto:sage [2007/09/25(火) 02:08:20 ] >>156 とりあえず、やってみます。beginthreadexは調べておきます。 >>157 その線が一番怪しいんですが、TCP接続制限をBIOTで20000に設定して、 listenも20000にしているんで、溢れるという事が無いように思えるんですが・・・。 listenのバックログの最大数があるらしいんですが、まだ調べきれてなくて わからない状態です。 >>158 サーバーはまぁ、色々と事情が…; でも、論理的にはTCP接続制限をはずしているんで、そこでacceptが失敗するのは OS以外のことだと思うんです。 私が知らないだけかもしれませんが、XPと2003サーバってサーバーマシンとして 使用した際に何か違いってあるんでしょうか?
160 名前:デフォルトの名無しさん mailto:sage [2007/09/25(火) 02:15:11 ] >>159 そう思うなら、Linux入れて同じハードでほぼ等価の コード作ってためせ たぶんおきねーからw
161 名前:デフォルトの名無しさん mailto:sage [2007/09/25(火) 03:29:59 ] >>159 XP Homeで3000ソケット接続を試してみたけど、特に問題なく接続できたよ。 1,環境が良く分からない。サーバーはマルチプロセッサマシンなの? 2,クライアントでconnetを行うときにSleep関数を入れてconnectの接続間隔を長くしてみては?
162 名前:デフォルトの名無しさん mailto:sage [2007/09/25(火) 06:32:30 ] >>159 最小限のソース晒してくれ 時間の無駄だ
163 名前:デフォルトの名無しさん [2007/09/26(水) 09:14:56 ] 無線LANに接続しているPCの数を取得するにはどうすればよいのでしょう?
164 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 10:12:09 ] >>150 acceptの処理時間とか無関係。 サーバのOSでTIME_WAITでポートが枯渇してるだけ。 TIME_WAITについて深くしりたけりゃぐぐれ。 めんどくさけりゃSO_REUSEADDR。
165 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 10:15:56 ] >>163 a. 無線LANのWebからステータスを得る b. SNMP,MIBでぐぐーる
166 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 11:33:20 ] サーバ側のポートが枯渇するの? サーバ側のポートはずっと同じで、クライアント側のポートが変わるだけじゃ?
167 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 11:43:38 ] ちゃんとした通信手順を踏めば即座にポートを解放してくれる 行儀の悪い通信をすると TIME_OUT まで待ってから解放される TCP/IP の仕様だから Linux でも Windows でも同じコードなら やっぱり通信数に制限が出るような気がする
168 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 11:53:21 ] >>164 > ポートが枯渇してるだけ。 馬鹿丸出し。
169 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 11:59:52 ] SO_REUSEADDRは再びbindするときの話だっけ。 >>150 とは関係なさそうだな。
170 名前:デフォルトの名無しさん [2007/09/26(水) 13:16:22 ] acceptを終了するにはどうしたらいいの? acceptで待機中の時に別スレッドからsocketcloseを呼び出したら WSAEINTR (10004) ? 意味 : 関数呼び出しに割り込みがありました。 ? 説明 : ブロック操作は WSACancelBlockingCall (Wsapiref_704y.asp) の呼び出しによって中断されました。 が呼ばれるんだけど、acceptの終了方法はこれであってるの? winsocket2.2
171 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 13:36:14 ] >>170 WinsockならそれでOKのはず
172 名前:デフォルトの名無しさん [2007/09/26(水) 14:01:34 ] >>171 そうなんだ ありがとう〜
173 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 15:53:48 ] >>166 >サーバ側のポートが枯渇するの? >サーバ側のポートはずっと同じで、クライアント側のポートが変わるだけじゃ? その通り、枯渇するのはクライアント側のポートだった。 ↓あたり。 ttp://www.softlab.ece.ntua.gr/facilities/documentation/unix/unix-socket-faq/unix-socket-faq-2.html#ss2.7 ttp://mikilab.doshisha.ac.jp/dia/research/report/2002/0408/005/report20020408005.html ttp://d.hatena.ne.jp/Kazzz/20070207 ま、結論としてはSO_REUSEADDR。
174 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 16:42:19 ] ということはconnect内部のbindで失敗するとWSAECONNREFUSEDが返ってきちゃうのか。 原因に気づき辛そうで厄介だなあ。
175 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 20:06:08 ] >>173 クライアント側でユーザーポートが枯渇するとWSAENOBUFS (10055)が返ってくるんだけど。
176 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 00:13:10 ] おまえら, なんかトラブったときに TCP のステートダイアグラム 見ないでプログラム修正とかしてるのか?
177 名前:150 mailto:sage [2007/09/27(木) 10:53:38 ] 一向に解決しなかったけど、今の状態で妥協する形になりました。 助言くれたかたサンクスです。 >>176 TCP のステートダイアグラム とは?
178 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 11:12:53 ] www5d.biglobe.ne.jp/~stssk/rfc/rfc793j.html Figure 6. TCP Connection State Diagram
179 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 00:06:29 ] tools.ietf.org/html/rfc793#section-3.2 か、あるいは簡略化されているが↓のも見やすいよ www.atmarkit.co.jp/fwin2k/network/baswinlan016/baswinlan016_03.html
180 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 08:29:23 ] >>179 > 簡略化されているが あかんやん
181 名前:デフォルトの名無しさん [2007/09/30(日) 07:42:09 ] 複数あるNICのインタフェース(またはローカルIPアドレス)を指定してソケットを オープンしたいのですが、方法はありますか? Windows XP SP2
182 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 08:21:40 ] bind
183 名前:デフォルトの名無しさん [2007/09/30(日) 10:03:51 ] すいませんclient側の話なんです。 bindってサーバ側ですよね。 NICが2枚刺さってるPCがありまして、片方のNIC(あるいはIPアドレス) を指定して通信させたいのです。
184 名前:デフォルトの名無しさん [2007/09/30(日) 10:07:03 ] 特定のNICのIPアドレスを使ってconnectしたいという事ですね。
185 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 10:40:39 ] >NICが2枚刺さってるPCがありまして、片方のNIC(あるいはIPアドレス) >を指定して通信させたいのです。 それもbindでできたと思うけど。ローカルホスト側のsocket endpointを明示的に指定する処理は 全部bind。
186 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 10:41:32 ] >>183 は思い込み激しす
187 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 10:47:51 ] 初学者は誰だって勘違いすることがある。 めげずにがんばれ。
188 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 10:52:24 ] 才能内から真だ ほうがいいと思うけどね こんなのもしマジでプロジェクトに 混じってたらすげーこえーしw
189 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 10:59:37 ] >>188 あんたの部下は死にまくりだな
190 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 11:24:52 ] bindできました!
191 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 16:05:22 ] ム板でプロジェクトうんぬん云ってるDQNはマ板に逝け
192 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 18:36:43 ] >>188 お前の部下になりたくない。
193 名前:デフォルトの名無しさん mailto:sage [2007/10/01(月) 02:24:15 ] >>1 のFAQが404のためweb archiveのキャッシュのアドレスを張り。 リンク先を開くときはエンコード種類としてISO-2022-JPを選択する。 ttp://web.archive.org/web/20070624075248/www.kt.rim.or.jp/~ksk/sock-faq/indexj.html ttp://web.archive.org/web/20070703070513/www.kt.rim.or.jp/~ksk/wskfaq-ja/
194 名前:デフォルトの名無しさん [2007/10/01(月) 23:26:27 ] 質問があるのですが、友達の家から私の家まで通信実験を行いたいと思っています。 家はADSLでプライベートIPではなく、グローバルIPを得たいのですが、方法が分かりません。 どういった方法があるのでしょうか。質問よろしくお願いします。
195 名前:デフォルトの名無しさん mailto:sage [2007/10/01(月) 23:41:12 ] お使いのプロバイダに訊け
196 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 00:12:02 ] 使ってるプロバイダとかあなたの家や友達の家のネットワーク構成によるけれど、 自宅までグローバルIPが割り当てられてる可能性は高いと思う 家がプライベートIP云々言ってるが、家じゃなくて 「自分のPCが」 の間違いだろう たぶんルータを挟んでるんじゃないかね ルータにはグローバルIPが割り当てられてるかもしれんよ ルータの設定画面かなんかで確認してみ
197 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 00:32:22 ] >>195-196 意地悪だなぁ。ちゃんと質問してやれよ。
198 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 00:35:47 ] >>194 板違い
199 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 00:39:06 ] >>194 実験ならば どこかのCGIを読むようにするのが一番楽だよ ちなみにどんな実験? 速度の検証とか? 接続確認のテストならばテストになってないが??
200 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 00:46:01 ] ちょいと教えて 接続するクライアントソケットは データーの種類によって分けた方が良い? たとえば データーと制御データーがあった場合 1) ポートも分ける 2) ポートは同一だけどソケットを別にする (受信・送信バッファを個別に取られる事を期待) 3) ポートもソケットも同一で2つのデーターをプロトコルで分ける (ソケット別にしても内部的には同じ信号で扱われるから 1,2は 効果なし)
201 名前:デフォルトの名無しさん [2007/10/02(火) 00:51:31 ] あと関連して もう1つごめん 2つのデーターは A,Bの2つのデーターが有った場合 1)大きなデーターAをそのまま送ると Bのデーターは Aが処理されるので MTUを参考に分割してBのデーターを 混ぜて送る 2)極端な例で無い限りオーバーヘッドが大きくなるので 気にしない これはケースバイケースですが考え方としては?
202 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 00:53:47 ] ごめん タイプミス 1)大きなデーターAをそのまま送ると Bのデーターは Aが処理されるので MTUを参考に分割してBのデーターを 混ぜて送る ↓ 1)・・ Bのデーターは Aが処理されるまで待たされるので・・
203 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 00:54:04 ] 理学部ktkr まず目的を書け。 それと質問を推敲しろ。
204 名前:200 mailto:sage [2007/10/02(火) 01:15:38 ] ごめん分りにくかったね 通信の効率化をしたいわけなんだけど 早い話 内容の違うデーターを そのまま送受信するか ある程度切って送るかです たしか内部的には以下の処理を行っているはずですので なにも考えずに送っても ある程度は効率化しているはずですが みなさんはどうしてます? ■小さいデーターは優先されて送信する(ルーター依存?) ■送信データーはMTU値に切断され送信される
205 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 01:23:15 ] 実際に効率上の問題に直面してから考えればいいと思われ
206 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 01:26:30 ] >>204 > ■小さいデーターは優先されて送信する(ルーター依存?) どこの星の話ですか?
207 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 01:27:30 ] まずはタイミングの門をくぐって セキュリティ地獄に逝くのじゃ。
208 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 01:27:18 ] >>204 0x20以上で構成してSTXとETXではさむ。
209 名前:200 mailto:sage [2007/10/02(火) 01:36:26 ] >>205 まあ実際はそうなんだけど・・・・ 正直 通信よりもアプリの見直しの方が効果あるだろうし ちょっと例を書いてみます データーA WM_MOUSEMOVEからのデーターを送信する 8Byte程度のデーターを1秒間に100個ほど送る (内部的に遅延されるので実際は2K程度) リアルタイム性重視 データーB 1秒間に1度画面をキャプチャーして送る 1027 X 768 X 3バイト この場合はどうする? 当然 差分を送るとか根本的な事は無しで 1)Socketを分ける・分けない ← 私的には意味無いと思ってる 2)データーをMTU毎(または適当なサイズ)に切って A,Bを混ぜて送信
210 名前:200 mailto:sage [2007/10/02(火) 01:39:03 ] >>206 どこかで読んだ事あるんだけど どこの星の話かは忘れた Yahoo,OCNとかだと IPフォンのパケットは優先されてる らしいから それと勘違いかな?
211 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 01:59:17 ] >>193 復活してるみたい。
212 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 02:16:57 ] >>210 そりゃQoSだな。
213 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 09:20:09 ] >>209 なぜかTCP前提で考えてるようだけど、そんなに効率気にするならUDPの方がいいんじゃない そういった多少のデータロスが許容されるリアルタイムデータにTCPは効率悪い ところで、それなんてスパイウェア?
214 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 10:34:05 ] 新手のwinny用黴菌つくってんのかも
215 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 11:05:45 ] 劣化VNC
216 名前:200 mailto:sage [2007/10/02(火) 12:02:31 ] >>213 だからあくまでも例だって・・・・ そもそも通信効率以前の問題だし 劣化 VNC画面・マウスの送る方向違うし >>212 にあるような仕組みを自前で実装してるのか 聞きたかった
217 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 12:13:16 ] >>216 失せろ厨房
218 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 12:50:02 ] >>216 やりたいことは2つのストリームをシリアルな通信経路に多重化することだろ。 後は、多重化を自前でやるかTCP/IPスタックにやらせるか。 >1)Socketを分ける・分けない ← 私的には意味無いと思ってる 意味無くない。 >2)データーをMTU毎(または適当なサイズ)に切って > A,Bを混ぜて送信 この程度でMTUなんか無関係。 小賢しいこと考える前に手を動かせ。 他人の知識を借りたいのなら、自分が無知であることを認識しろ。謙虚になれ。
219 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 13:21:23 ] VNCやRDPを調べればいい。
220 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 23:30:42 ] >>216 簡単に高速かする方法あるよ? FPGAで作ればいいんだよw
221 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 00:26:23 ] 鯖よりボードの方が高いw
222 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 03:58:44 ] > (内部的に遅延されるので実際は2K程度) よくわからんけど Nagle を止めれば済む話?
223 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 12:18:04 ] その手の通信ってトンネリンングさせるかも知らんし、 生パケットがどう飛ぶかなんて議論は意味ない気がする。 画面データはアイドル状態待ってから飛ばせばいいし、 移動系メッセージなら100命令飛ばすんじゃなくて 1命令にまとめる事でも考えた方が。 pcAnywhereは反応重かったな。
224 名前:デフォルトの名無しさん [2007/10/03(水) 19:44:50 ] ネットワークプログラミング初学者です。 サーバーサイドプログラムとクライアントサイドプログラムのふたつを作成した場合、 通信実験のデバッグを簡単に行える方法ないですか? 今、サーバプログラムをメインPCに。クライアントプログラムをUSBメモリに移してノートPCへ。 といった面倒なデバッグ方法です。>< よろしくお願いします。
225 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 19:47:49 ] 両方ともメインPCで動かす
226 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 21:23:41 ] VMware/VirtualPC/Paralles/VirtualBoxで仮想PCを用意する。
227 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 21:32:58 ] ネットワーク上繋がってるPCなのにUSBメモリでコピーって意味わからん
228 名前:デフォルトの名無しさん mailto:sage [2007/10/04(木) 13:46:58 ] ネットワークの共有も知らんでネットワークプログラミングとか大丈夫?
229 名前:デフォルトの名無しさん mailto:sage [2007/10/04(木) 16:55:35 ] C#.NETでストリーミングデータの受信のプログラムを 作成しているのですが、Socket.Selectが思った通りに動作していません… ストリーミングのデータ形式は ヘッダ2バイト サイズ2バイト 以下データ このような形式なのですが、受信をしていくうちに、サーバー側の 送信に追いついてしまい、サイズ2バイトで指定されたデータが 読めない状態になってます Socket.Select( SocketList. null, null, 100 ); でリードできることは確認しているのですが、 sock.Receiveでデータの部分が数バイトしか読めない状態です ソケットはブロッキングで別スレッドで読み込みをしています PerlやWinsockのSelectとは動作が違うのでしょうか? 基本的な質問で申し訳ないですが、よろしくお願いします
230 名前:デフォルトの名無しさん mailto:sage [2007/10/04(木) 17:05:16 ] >>229 selectはあくまで「データがあるかどうか」を調べるだけ。 何バイトあるかなんて知らん。 ・データがあれば読み込んでローカルのバッファに溜める ・バッファにデータひとかたまり(ヘッダ+長さ+データ)があれば処理開始 を独立に行えばいい。 複数データが一度にreadできてしまうこともちゃんと考えとけよ。
231 名前:デフォルトの名無しさん mailto:sage [2007/10/04(木) 17:12:55 ] >>229 ストリームソケットは区切りのないただのバイト列なので、例えば100バイトを3回送信しても、1バイトずつ300回受信するかもしれないし、300バイトを1回受信するだけかもしれない。 そういう前提で扱う必要がある。 100バイトずつ処理したければ、100バイト溜まるまで繰り返しrecvを呼ぶ。
232 名前:デフォルトの名無しさん mailto:sage [2007/10/04(木) 20:39:37 ] >>230 >>231 ありがとうございました。そのように実装したいと思います
233 名前:デフォルトの名無しさん [2007/10/04(木) 23:26:47 ] すれ違いかもしれませんがネットワークに詳しい皆さんに質問を、、、 TELNETを使用しHTTPの勉強をしております Yahooファイナンスから企業の情報を集めたいと思っています。 charge.quote.yahoo.co.jp/q?s=1301&d=t の情報を見たいとき telnet charge.quote.yahoo.co.jp 80 Trying 124.83.147.185... Connected to charge.quote.yahoo.co.jp. Escape character is '^]'. GET /q?s=1301&d=t The document has moved <A HREF="quote.yahoo.co.jp/q?s=1301&d=t">here</A>.<P> <P>Additionally, a 302 Found error was encountered while trying to use an ErrorDocument to handle the request. となってしまい情報を見ることができないでいます 302なので/q?s=1301&d=t ←ここではないほかのURLに情報がありそうなのですが charge.quote.yahoo.co.jp/q?s=1301&d=t の中の情報が書かれているのか真のURLがどこなのか判断する方法があったら教えていただけないでしょうか
234 名前:デフォルトの名無しさん mailto:sage [2007/10/04(木) 23:41:13 ] >>233 quote.yahoo.co.jp/q?s=1301&d=t レスポンスに書いてるじゃん。 このドキュメントはquote 〜〜にうつってますよ、って。
235 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 00:07:57 ] >>234 ありがとうございます 恥ずかしい、、、、、申し訳ないです
236 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 01:19:53 ] てゆーかさ、GETをHTTP/0.9でやってるから レスポンスヘッダが付かなくて 302なレスポンスであってもLocation等で判断できないんだけど わかってるのかね。
237 名前:デフォルトの名無しさん mailto:age [2007/10/05(金) 23:31:07 ] FORMのPOSTをGETでアクセスできない事があるんですが?
238 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 00:15:33 ] そうですか。
239 名前:デフォルトの名無しさん mailto:age [2007/10/06(土) 02:43:09 ] www.premiumtv.12gbfree.com/?X3/?RTV+4277/NicoVideo1000
240 名前:デフォルトの名無しさん [2007/10/07(日) 00:22:02 ] ノンブロックなソケットディスクリプタでサーバにコネクトするときに そのコネクトがコンプリートしたかのステータスをゲットしたい。 ミーは何をドゥーすればいいの?
241 名前:240 mailto:sage [2007/10/07(日) 00:23:57 ] ミーがユーズしてるOSはLinuxです
242 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 00:24:10 ] たしかselectで書き込み可能が帰ってきたらコネクト完了
243 名前:240 mailto:sage [2007/10/07(日) 00:27:21 ] >>242 ハリーなアンサー サンキューです。 バット、ノンブロックなソケットだとオルレディでキャンライトみたいです。 ワンモアトライしてみます。
244 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 06:18:17 ] getpeername(2)がENOTCONを返さなくなった時がcomplete
245 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 06:46:13 ] write(send)でFD_WRITEを指定してselect(WSAEventSelect)待ちするケースって 非同期モードですか? 環境はWindows 2000 XPです。
246 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 06:52:08 ] というか、FD_WRITEを指定してselectってどういう時に使うのかわかりません。 「ソケットの送信バッファに空きができたことを通知」とのことですが、 一度もwrite(send)せず、いきなりselectしても検出してくれるのでしょうか。
247 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 07:20:42 ] >>246 接続確立時に一回だけFD_WRITEの通知がきた気がする その後は、バッファに空きのない状態→空きのできた状態、になったとき、 つまりsendしてWSAEWOULDBLOCKが返ったあとにバッファに空きができたら通知される。
248 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 08:49:42 ] 納得いきました。 ありがとうございます。
249 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 16:39:49 ] lingerがよくわからないんだけど 今の理解は ・最後に送信する側(closesocketを呼び出す前にsendを呼び出す側)の送信が正常に行われたかを判断するために使用すると思ってます。 そこで質問は ・最後に受信する側(closesocketを呼び出す前にrecvを呼び出す側)はlingerの必要はない? ・closesocketでlingerのタイムアウトエラーが返ってきた時は、最後の送信が正常に完了していないと判断し、エラーとするまたはリトライする と言うのであってるんですかね?
250 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 17:43:11 ] タイムアウトが起きると送信放棄。shutdownのabortが起きる。 その他はまあそういうこと。 MSDN Network Protocols Windows Sockets 2 About Winsock Winsock Programming Considerations Graceful Shutdown, Linger Options, and Socket Closure
251 名前:デフォルトの名無しさん [2007/10/12(金) 16:12:26 ] 日本信号の改札機はなぜ起動しなかったのでしょうか?
252 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 17:48:09 ] スレ違いだったらすみません。 DirectShowで動画再生するソフトを作ったんですけど 現在は再生する動画はローカルにある動画のみなので これをストリーミングに対応させたいと思っています。 ストリーミングについてRTPなどのプロトコルも調べたんですが Winsockを用いての実装手順がいまいち分かりません。 RTPのパケットを自分で実装して、データを入れる領域に 動画のフレーム、音声データを入れる形でしょうか。 動画ファイル自体をバイナリデータとして送り、ファイル出力された 動画ファイルを再生することなら出来るんですけど、ストリーミング の実装は実際にはどのような手順で行えばよいでしょうか。
253 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 18:15:36 ] 動画ファイルの種類に寄る。 動画を映像と音声に分離して、さらにそれを一定量に分割出来なければ、難しいと思う。 AVIファイルをストリーミングさせるってのはナシな。
254 名前:デフォルトの名無しさん mailto:sage [2007/10/13(土) 14:05:15 ] >>252 ファイル出力が完了しなくても再生をはじめれば?
255 名前:デフォルトの名無しさん mailto:sage [2007/10/14(日) 22:58:38 ] YahooファイナンスってKeep-Alive使えないんですかね 毎回接続し直すの面倒なんですけど…
256 名前:デフォルトの名無しさん mailto:sage [2007/10/15(月) 06:32:25 ] ぇ
257 名前:デフォルトの名無しさん [2007/10/19(金) 09:02:36 ] TCPで非同期(WSAAsyncSelect)を使ってプログラミングをしています。 非同期において送信する場合どのように設計すればいいのかイマイチわかりません。 やりたいことは、接続要求があったらacceptしてファイルを送信するといった内容です。 ファイルの送信要求メッセージを受信 ファイルをバイナリモードでオープン 4096バイトずつ読み込んでsend() ファイルをクローズ ファイルを送信した後も継続して通信は行います。 sendもノンブロッキングになってるため、 while(ファイル読み込みが終わるまで){ send() } だと上手くいかないのかなと思います。調べてみると非ブロッキングにおいて連続してsend()を行おうとすると WOULDBLOCKという現象が起こって送信できない事があるとの事です。 FD_WRITEのメッセージも別に自分が送信したいタイミングで来るわけでもないのでイマイチ有効な活用方法がわかりません。 どなたかご教授願いますm(_ _)m
258 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 09:23:05 ] >>257 WOULDBLOCKならあとで続きを送信する
259 名前:デフォルトの名無しさん [2007/10/20(土) 00:07:00 ] >>257 sendも非同期ですべてやればOK。 自分が、acceptまちなのかsendまちなのか。sendまちであれば、現在 何バイト送ったのか全部管理しる。