- 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/
- 577 名前:デフォルトの名無しさん mailto:sage [2007/12/05(水) 09:06:14 ]
- IEだったら↓に自動構成スクリプトのアドレスが入ってる
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\AutoConfigURL 後は普通に読めばいいんでないの
- 578 名前:デフォルトの名無しさん mailto:sage [2007/12/05(水) 16:42:41 ]
- ProxyServerは?
- 579 名前:570 mailto:sage [2007/12/05(水) 21:43:43 ]
- 返答遅くなってすみません。
また、いろいろアドバイスしていただきありがとうございます。 SSlですが、自分のCGI参考書ではグラフィックカウンターを作る説明しかなく、 これでどう暗号化するか分かりません。 RadiusもWikipediaで調べましたが、自分の頭ではチンプンカンプンでした。 ゲーム自体は、クライアント同士をP2P通信でつなげて遊ぶもので、 ipとport番号のやり取りのマッチング部分だけ、webサーバ上の cgiで、C/Sで行います。 p2p通信で、しかも、マッチングにCGIを使うので、クライアントにも、 webサーバにもIPやport番号は知られるのは当然なんですが、 よく「iPとport番号は知られるとまずい」とか、 「ネットゲームの通信は暗号化しとけ」みたいなことが書かれるので、 webサーバから相手のIPとport番号の受け渡しのさい、暗号化する必要が あるんじゃないかと思ったのです。 開放するport番号はプライベートport番号の間でなら各クライアントが 好きな番号を開放するようになっているので、49151番以前のportは 開くことはありません。>>575さんがいうように、 IPとport番号をそのまま受け渡しても、心配する必要は無いんでしょうか? なんか文章が変ですみません。
- 580 名前:デフォルトの名無しさん mailto:age [2007/12/05(水) 22:21:21 ]
- なんでNULLが返されるんだぁああぁぁ!!!!
ひぇぇぇぇうぇぇええ!!!! すみませんでした。 もういくら考えてもわかりません。 お願いします。この通りです!!!
- 581 名前:デフォルトの名無しさん mailto:sage [2007/12/05(水) 22:38:20 ]
- SSI と SSL は違うよっ
- 582 名前:デフォルトの名無しさん mailto:sage [2007/12/05(水) 23:18:57 ]
- 暗号化する価値はほとんど無いな。
その手の奴がパケットの中身を見るまでもなく、 セキュリティソフト(ファイアウォール)が警告を出したりするから 一般人にだってIPとPortが分かるぞ。
- 583 名前:デフォルトの名無しさん mailto:sage [2007/12/06(木) 00:06:44 ]
- というか、誰でもそのCGIを叩いたらIP:PORTがわかるわけで、
通信路を暗号化する価値がないような。
- 584 名前:デフォルトの名無しさん mailto:sage [2007/12/06(木) 09:21:22 ]
- プロクシーサーバを作るとしたら、RFCの何番読めばいいんだっけ?
- 585 名前:デフォルトの名無しさん mailto:sage [2007/12/06(木) 09:40:04 ]
- つ HTTP 1.1
- 586 名前:デフォルトの名無しさん mailto:sage [2007/12/06(木) 14:27:33 ]
- >>584
rfc2616
- 587 名前:デフォルトの名無しさん mailto:sage [2007/12/07(金) 05:05:39 ]
- Cで分割ダウンロードってどう実装すればおk?
わざわざパケット操作まで階層下らなきゃいけないのだろうか…。
- 588 名前:デフォルトの名無しさん mailto:sage [2007/12/07(金) 05:45:37 ]
- WinならwinmmのHttpQueryReauestでも使ってろタコ
それ以外の環境ならsocket一手
- 589 名前:デフォルトの名無しさん mailto:sage [2007/12/07(金) 05:45:59 ]
- wininetだたorz
- 590 名前:デフォルトの名無しさん mailto:sage [2007/12/07(金) 07:49:23 ]
- >>588
> それ以外の環境ならsocket一手 libhttp, libcurl, libneon, libsoup 好きなのをどうぞ
- 591 名前:デフォルトの名無しさん mailto:sage [2007/12/07(金) 11:31:31 ]
- >>590
UNIXだぜ。 socketをどうすればいいのか知りたいのだ>< ん?ひょっとしてlseekが効くのか…?試してないが…。 >588 libhttpにはそんな便利なAPIがあるのか…ぐぐってみるわ。 でもどうやって実装してるんだ?かなり低階層まで降りてそうだ。
- 592 名前:デフォルトの名無しさん mailto:sage [2007/12/07(金) 13:00:47 ]
- httpの分割ダウンロードってrange指定したrequest並列に投げるだけだろ…
- 593 名前:デフォルトの名無しさん mailto:sage [2007/12/07(金) 22:19:25 ]
- TCPのcwndとssthreshの値をみる方法ってない?
環境はfreebsdです
- 594 名前:デフォルトの名無しさん mailto:sage [2007/12/09(日) 22:49:17 ]
- >>577
あんがと。だけどスクリプトの場合 Javascriptで 条件式とか入ってる場合があるから困る。 今はsocketでデーター出してるけど 素直に、NETかIEコンポのライブラリ経由でデーター 出した方がいいんだろうか・・・
- 595 名前:デフォルトの名無しさん mailto:sage [2007/12/09(日) 22:55:02 ]
- >>579
>よく「iPとport番号は知られるとまずい」とか、 >「ネットゲームの通信は暗号化しとけ」みたいなことが書かれるので、 うちは、こんな事言ってる奴が多いので実害がなくても 簡単なスクランブルかけてる。少なくともテキストが読めない程度の。
- 596 名前:デフォルトの名無しさん [2007/12/09(日) 23:17:21 ]
- できあいの物を利用したお手軽マッチングサーバー〜〜
用意する物 ■ WEBサーバー そこらのHP公開できるレンタルでOK ■ FTPクライアントライブラリ、MFC.デルファイでもOKです 1)ログイン時 自分のIDをファイル名にしたテキストファイルをFTPでアップします テキストの内容は自分のIPとポート番号です 自分のグローバルは確認君系のCGIで調べます 好みにより書き込むテキストは適当にスクランブルしましょう 2)接続時 接続したいIDの名前のテキストファイルをダウンロードします。 NotFoundの場合は「該当するIDは・・・」とか適当に出します 追記 余裕があれば UPnPで使用ポートをオープンしましょう UPnPはXML+Socketで行えばSP2のチェックマークを無視します 上級偏としてStunもありますが昨今使えませんので ゲーム程度ですとSkypeを使うのも吉です 結論 SkypeP2P使え!!
- 597 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 23:29:14 ]
- va_argsってスレッドセーフ?
- 598 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 23:41:40 ]
- 実質自動変数(引数)へのポインタという意味合いの代物だから、
スレッドセーフ。もちろん、そのまま他のスレッドに持って行ってはいけない。 で、どこがネットワークプログラミングなんだろ。
- 599 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 00:05:27 ]
- ポートを解放しないとできないことっていったい何なんですか?
- 600 名前:599 mailto:sage [2007/12/13(木) 00:28:07 ]
- なんか曖昧ですね。すいません。
例えば、htmlサーバーではポート80番は常に両方向解放されていて、 (他の問題がなければ)クライアントからのコネクションに成功しますよね。 クライアントのWAN→クライアント自身方向へのアクセスは許されていませんが、 サーバーにリクエストを送ることもその結果を処理しブラウザで表示することもできるわけです。 そこで質問なのですが、クライアントのWAN→クライアント自身方向への アクセス解放(ポート解放)をしないとできないことというはいったい何なのでしょうか?
- 601 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 01:29:06 ]
- >ポートを解放しないとできないこと
LAN内のPCのポートとルータのWAN側ポートが関連付けられてないから WAN側からの接続を受け付けられない
- 602 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 05:39:29 ]
- >>600
FTPのPORTモードとか
- 603 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 09:35:00 ]
- ってか自分で言ってるじゃねえか
ポートが開いてないとApatch起動しても外からアクセスできない
- 604 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 09:57:50 ]
- Apacheはサーバーなので質問の主旨とは外れます
- 605 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 10:39:33 ]
- >>600
クライアントのWAN→クライアント自身方向への接続ができない
- 606 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 16:14:08 ]
- >>601-605
TCPならクライアントへのconnectに失敗、 UDPだとsendに失敗(?)ということですか。 サンクスです。
- 607 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 18:25:34 ]
- ちげえええええええええええええええええええ
connectすんのはクライアント側だ サーバはacceptだ UDPならrecvfromだ 根本的にソケット関係のマニュアル読み直した方がいい
- 608 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 18:49:39 ]
- たぶんクライアントの定義が違うんだよ
- 609 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 18:50:56 ]
- >>607
「クライアントがWAN側からの接続を受け付けられない」ということは、 サーバーがクライアントに対してconnectするときに失敗するという意味ではないのですか?
- 610 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 18:53:38 ]
- OK。落ち着け
ネットワークプログラミングにおいて 「クライアント」は「接続しに行く側」 「サーバ」は「接続を受け付ける側」 だから
- 611 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 21:02:51 ]
- >>609
あなたのサーバとクライアントの定義をききたいよ
- 612 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 02:26:33 ]
- UDP は受け取る側がクライアント、というプロトコルも多いな・・
RTP とか
- 613 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 08:29:38 ]
- >>611
俺は>>609ではないが、 ・LAN内のPC → クライアント ・WAN側のPC → サーバー だったりしてな。
- 614 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 16:44:41 ]
- >>610,611,613
自分の解釈では ・サーバーはサービスを提供する側 ・クライアントはサービスを享受する側 ですね。 ただ元の質問は、 「サーバーのポートが解放されていてクライアントがポート0の場合、何かできないことがあるのか?」 というものなので、ここではこの文脈にそって言葉を使っています。
- 615 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 00:42:20 ]
- 元の質問ってそんなのだっけか?
というかクライアントなのに自分でポートを開けておく必要なんて無いよな サービスを提供するためにポートを開けておくわけだし
- 616 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 23:39:10 ]
- クライアントからport80で接続されているときに
そのconnectionを使って逆にサーバー側から クライアントに突撃する方法を聞いてるんじゃない?
- 617 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 22:15:21 ]
- たんにP2Pの存在をしらないんじゃ?
- 618 名前:デフォルトの名無しさん mailto:sage [2007/12/17(月) 04:14:29 ]
- sshでトンネル作ってport forwardingしたらなんでもやり放題だお
- 619 名前:デフォルトの名無しさん [2007/12/19(水) 10:14:58 ]
- netstatなんかで見れるような ソケットの
現在のステータス(ESTABLISHEDとかTIME_WAITとか) って、getsockoptでどうやって取得するの?
- 620 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 14:58:25 ]
- >>619
connectしてるかどうかくらいはわかるけど、普通見れない。 netstatは(setuidされていて)kmem見てたり、/proc/net/ 見てたりしてるだけ。
- 621 名前:デフォルトの名無しさん [2007/12/19(水) 22:00:37 ]
- epollやkqueueはなぜ高速なのか、レガシなAPIとの比較で3行で教えてください。
特にepollに興味があります。
- 622 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 22:58:25 ]
- /dev/poll を忘れんなよ
- 623 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 23:21:11 ]
- 要するに状態を監視したいソケット連中ってのは、selectの呼び出し毎に
大きくかわったりはしない。なら、引数でソケット全部を毎回渡すよりも、 ハンドル経由で差分更新したほうが、処理は高速になるって話。
- 624 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 23:23:20 ]
- 計算量で語ってほしい
- 625 名前:デフォルトの名無しさん mailto:sage [2007/12/20(木) 00:15:53 ]
- selectなら o(n)
epolなら o(1) ってことだろおうぉあ
- 626 名前:デフォルトの名無しさん mailto:sage [2007/12/20(木) 00:22:49 ]
- 実際は、イベント発生頻度Mにも比例するから、
selectはO(N*M)になる、のかなー? epoll系はO(M)で。
- 627 名前:デフォルトの名無しさん mailto:sage [2007/12/20(木) 00:23:27 ]
- >>623
621とは別人です。 10行になっても良いので馬鹿にもわかるようにお願いしますm(_ _)m 「大きくかわる(大きい?小さい?)」「ハンドル経由(ハンドル?)」がわかりません
- 628 名前:デフォルトの名無しさん [2007/12/20(木) 00:27:48 ]
- klabという会社の勉強会資料が読みやすかったような記憶。
/dev/pollってなんだ?
- 629 名前:デフォルトの名無しさん mailto:sage [2007/12/20(木) 00:29:30 ]
- そらりすのやつじゃねーの。/dev/poll。
だいたいこのペーパー読めばいいんでね。まあ、英語読めないオチだろうけど。 people.freebsd.org/~jlemon/papers/kqueue.pdf
- 630 名前:デフォルトの名無しさん mailto:sage [2007/12/20(木) 01:27:08 ]
- >>626
それMは定数扱いでいいですやん
- 631 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 02:23:52 ]
- 京急の特急に乗ればいいことが解った
- 632 名前:デフォルトの名無しさん [2007/12/22(土) 23:54:42 ]
- winsock2.org/samples/Ch09/GETHTTP2/gethttp2.cpp
ローカルホスト上のデータを最大で16000byteずつしか読み取れないんですが、これはなぜですかね?
- 633 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 00:07:42 ]
- >>632
たぶんTransfer-Encoding: chunked
- 634 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 00:23:33 ]
- HTTPじゃないから、chunkedは関係ない。
どっちかってーと、MTUの話。 というか、ローカルだろうと、TCP経由で 一度に全部読めると思うのが間違い。
- 635 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 00:26:04 ]
- なんだそうか
- 636 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 04:16:30 ]
- 頭痛いわ
- 637 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 04:25:19 ]
- つ バファリン
- 638 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 11:33:52 ]
- 股間が疼くわ
- 639 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 11:40:07 ]
- つ クラビット
- 640 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 20:44:13 ]
- Winsockを使い
ttp://localhost/1.html ttp://localhost/2.html 一つのアプリケーションが この二つのURLのダウンロードを並列に処理する事は可能ですか?
- 641 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 21:03:34 ]
- 可能です
マルチスレッドとかノンブロッキングとかIOCPとか調べるよろし
- 642 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 21:46:05 ]
- ありがとうございます。
- 643 名前:デフォルトの名無しさん [2007/12/24(月) 00:35:48 ]
- 非同期モードと非ブロッキングモードはどう違うのですか?
- 644 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 00:51:00 ]
- まずお前がその二つをどう理解しているかを述べよ
- 645 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 01:17:50 ]
- たとえば読み込み指令を出して、そのときには読むべきデータが無かったとしたら、
ノンブロッキングはすぐに諦めて帰ってくる。 非同期は何かが読めるまでバックグランドでがんばってくれる みたいな違い。
- 646 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 01:37:02 ]
- その理解でいいんじゃない? 順序としては
ブロッキング → ノンブロッキング → 非同期I/O と進んできたんだけど これ以上詳しく知りたければ実装を調べるしかないのではないかと
- 647 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 07:03:17 ]
- リクエストとリプライが同時でない=同期的でないのが非同期。
リクエストを出した後、リプライは後から別の手段で得る。 一対一に対応してないこともある。リプライが続々とやってくるなど。 ノンブロッキングは同期的だけど、データ取得を諦めることがある。 その時でも「データねーよ」とのリプライが同期的に得られる。 非同期はそうではない。
- 648 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 11:57:28 ]
- 使い分けで
同期-ブロッキング 多重化-ノンブロッキング(select or poll) 非同期-シグナル駆動I/O or 非同期I/O とあったのですが、 これで合っていますでしょうか?
- 649 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 12:05:17 ]
- >>648
> 非同期-シグナル駆動I/O or 非同期I/O も多重化出来るだろ。
- 650 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 15:49:15 ]
- たじゅーか!
と書くとほほえましいな
- 651 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 20:32:06 ]
- Linuxでクライアント書いてるんだけど
closeが完全に終わるまで待つにはどうしたらいいかわかんないので 誰か教えれ
- 652 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 20:45:11 ]
- shutdownで半クローズ → 相手にEOFが届く → 相手がソケットを閉じる → EOFが来る → こっちも閉じる
とかじゃだめなん?
- 653 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 21:30:05 ]
- >>652
だめじゃない!だめじゃないぞ!いける!
- 654 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 22:43:09 ]
- それはさ、こっちの最後の送信結果が、closeしちゃうと判らなくなるからで、
別にこっちが送信してないなら勝手にcloseして終わりにしたらいいじゃん。
- 655 名前:デフォルトの名無しさん [2007/12/25(火) 14:18:46 ]
- 非同期モード、非同期イベントを利用して
localhost上のバイナリファイルをダウンロードしようとしているのですが、 ブロッキングを起こしてしまいます。 非同期モードを解説したサイト等ありましたら、 教えてほしいです。
- 656 名前:デフォルトの名無しさん [2007/12/25(火) 14:54:45 ]
- DNA.TV⇒デジネイション.テレビジョン⇒ステージ.オン.エアー <IE7テストバージョン>
dnatv.atspace.com/?S&1912501&166?S&1966612&280?S&1928546&28@HiSpeedVisionStageOnAir
- 657 名前:デフォルトの名無しさん [2007/12/25(火) 18:23:18 ]
- WSAAsyncSelectでググったらいくらでも出てくるじゃねぇか
- 658 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 18:24:13 BE:295671825-2BP(312)]
- ここは書き込めるようだな
- 659 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 18:26:49 ]
- というか、その「ブロックを起こす」コードを晒してみたら?
- 660 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 19:31:54 ]
- 自己解決しました。
ありがとうございます!!
- 661 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 19:45:33 ]
- どういたしまして
- 662 名前:デフォルトの名無しさん [2007/12/25(火) 23:27:54 ]
- ARCNETは、スレ違いですか?
- 663 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 00:02:00 ]
- いいや、違わない
なんなら422でもCANでも構わない
- 664 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 16:02:49 ]
- winsock2.org/samples/Ch04/ChekMail.c
このような非同期通知を利用して、アプリケーションを作成しているのですが、 こちらからサーバにデータをPOSTする処理をfor文を使い連続でしたいのですが、 どのようにしたらできますでしょうか?
- 665 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 16:47:16 ]
- >>664
>こちらからサーバにデータをPOSTする処理をfor文を使い連続でしたいのですが、 できません。それが非同期処理。 キューなりリストにPOSTするデータを入れておいて、 FD_WRITEが取れたら書き込む。エラー処理も忘れずに。 どうしてもforでまわしたいなら、 スレッド分けて、WSAGETSELECTEVENTするスレッドで、FD_WRITEがきたら、 イベントをセットし、POSTするスレッドのfor内でそのイベントをWaitForSingleObjectするとか。 でも、それなら最初から同期処理で良い。
- 666 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 21:10:08 ]
- とりあえず、-1がもどってくるまでは無条件に書き込めばいいんでないの。
- 667 名前:デフォルトの名無しさん [2007/12/31(月) 15:59:49 ]
- 教えてください。
サーバソケットでTCPの10〜100バイトの可変長データを受信する際、 そのデータのレングスが先頭2バイトにある識別子で判断できる場合って ・まず先頭2バイトをrecvする。 ・識別子を判断して残りのバイト数をrecvする というのが一般的なのでしょうか? recvの第3引数に1500バイトくらいの十分余裕な値を指定すると 勝手に1データの終わりを検出してリターンしてくれるものなのでしょうか? 要は連続してデータが飛んでくる場合に 1データの区切りをrecv1回で済むのか、2回に分けないといけないのかが 知りたいです。 Linux環境です。
- 668 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 16:42:47 ]
- 読みたいなら読めばいい。場合によっては、区切りを検出してくれることもある。
ただ、「1500バイトrecvをかけて、1400バイト読んだ。ヘッダのレングスは500バイトだったよ〜」 ってときもあるから、500処理したあとに次のヘッダ処置にいかないとダメだし、 その逆の、「ヘッダは500バイトあるっていったけど、recvで戻ってきたのは200バイトだった」 って言う場合の処置もいる。
- 669 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 23:01:45 ]
- >>668
レスどうもです。 頭悪くていまいち理解できてないんですが、受信バッファに +---------- |ABCD・・・・ +---------- と入っていて A=50バイト B=60バイト C=70バイト D=80バイト だった場合、1500バイトでrecvかけたら ABCDいっぺんに読めてしまうってことですよね?
- 670 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 23:23:50 ]
- >>669
>>668じゃないけど、recvの第三引数に1500を指定するって事だよね? それならABCD全部読めるかもしれないし、読めないかもしれない。 もしかしたら、Aの最初の5バイトしか読まないで返ってくるかもしれない。 完全に運の世界。 まあ受信バッファに本当にABCDが全部入ってるんなら全部1度に読めるけど、 プログラム側から受信バッファの内容を知る事はできないからやっぱり運。 だから普通は指定したバイト数読むまでrecvを何回も呼んできちんと読むような関数を作る。
- 671 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 23:30:50 ]
- >>669
面倒だから、fdopenしてストリーム入力使いなよ。
- 672 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 16:39:53 ]
- >>670
レスありがとうございます。 recvするたびにA、B・・・とデータの区切りごとにリターンしてくれる ということでは無いんですね(そう都合よくはいかないか・・・)。 >>671 別の方法もあるということですか。 勉強してみます。ありがとうございました。
- 673 名前:デフォルトの名無しさん [2008/01/03(木) 17:15:51 ]
- WindowsでIPヘルパを使っています。
複数のネットワークカードが刺さっている場合の取得順序について。 GetInterfaceInfo()での取得順序は何に依存するのでしょうか? バスの位置でしょうか?
- 674 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 18:45:06 ]
- select をつかって TCP 23ポートを開いてATコマンドを処理するプログラムを書こうとしている初心者ですが
select の動作がいまいち理解できなくて難儀しています。 サーバープログラムの場合 listen したファイルディスクリプタを readfds 集合に入れて select を実行した場合、 select が戻った時に readfds に listen 用 FD があると、ちょうどクライアント側が connect したタイミングなので その場合accept してあげれば良い。のは大体分かりました。 で accept した FD を即座に select の readfds集合 と writefds集合 にいれているのですが、この場合 select が戻った時に readfds に accept した FD がある場合は、受信準備OKな状態で、この時に read すれば 受信データを得ることができて、 writefds に accept した FD がある場合は、送信準備ができた状態で、 write してあげればデータを送信ができるんでしょうか?この時、実際受信したデータがないか、送信するデータがな い場合もあると思うのですが、そういう場合は速やかに再度 select すれば問題ないですよね。。 このように理解しているのですが、何分うまくいかないのでどこか間違ってそうなのです。
- 675 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 19:11:44 ]
- selectのwritefdsというのは、「現在送信バッファに追記出来る状態ですよ」って
のに近い。(まあ、connectの結果を見るのにも使えるけど。) 普通は、readfdsだけ仕掛けておいて、戻ってきたらrecv発行->受信処理。 なにか書きたくなったら、すぐsend。-1(EWOULDBLOCK)が戻ってきたら、 続きを送信するためにwritefdを仕掛けて待機。writefdが立てば続きを送信。
- 676 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 19:48:51 ]
- >>674
受信準備OKなものは、受信データがないってことはあんまりないと思うけど。 送信準備OKなものは、送信するものがなければ writefds から外すべき。 送信可能(送信バッファに空きがある)である限り、常に反応し続ける(selectが即座に返る)。
- 677 名前:674 mailto:sage [2008/01/08(火) 20:58:49 ]
- なるほどサンクスです。write は失敗した時だけ writefds にいれとけばいいのですね。
ずっと select が返る状態だと、使う意味がなくなりますもんね。。
|

|