[過去ログ] ネットワークプログラミング相談室 Port4 (1001レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
745(1): デフォルトの名無しさん [sage] 02/12/05 16:17 AAS
だから日記ならここに書くのはやめてくれって
746(1): デフォルトの名無しさん [sage] 02/12/05 17:24 AAS
745=被害妄想で全レスが日記に見える粘着
残念ですが、ハズレですた。
747: デフォルトの名無しさん [sage] 02/12/05 19:33 AAS
UDPで通信できるデバイスに制御パケットを投げるJavaプログラムを書いているんですが、
そいつは制御命令を送ると、応答として現在のステータスが返ってきます。
socket.send( send_packet );
socket.receive( recv_packet );
で、(エラーや例外を考えないと)こう書くわけなんですが、ふと疑問が出ました。
1) receiveするときは待機状態に入り、何も来ないとそこから先に進まないのか?
2) receiveが実行される前に応答が到着したらどうなってしまうのか?バッファに溜まるのか?
3) バッファがあれば(゚д゚)ウマーだけど、もし溢れたら何がreceiveされるのか?
・・・(´・ω・`)
748(1): デフォルトの名無しさん [ sage ] 02/12/05 19:51 AAS
1.ソフトの設計次第。 UDPだと、ふつーは2秒とか待ち時間を決めて、
帰ってこなければリトライしたり、諦めたりする。まあ、相手次第。
2.基本的にはたまる。貯まりすぎるとだいたい取りこぼす。
3.あふれて消えたり、取りこぼしたデータは、それっきり。
connectしてたら、場合によってはICMPがどっかから飛んでくる
可能性もないわけではないけど。
749(1): デフォルトの名無しさん [sage] 02/12/05 19:57 AAS
>>746=俺がSMBのことを叩いてるという妄想に捕らわれてる粘着
単に一般論として情報価値のないレスを延々と連ねて
スレを汚すなと言ってるんだが
あ、>>742-745が非常に役に立つくらいレベルが低いってだけか
750: デフォルトの名無しさん [sage] 02/12/05 20:10 AAS
>>748
ありがとうです。
基本的にデータ飛ばしを実現するだけ、あとは自分でコード書いてねってことですね。
(´ー`).oO(TCP/IPのバッファってそんなに大きくないのかな・・・もしかしてOSごとに違うとか・・・。)
751: 742-745 [sage] 02/12/05 20:59 AAS
>749
レベル低くてごめんなさい。
よかったら、なんでそれらのライブラリをリンクしないとダメだったのか、
なんでそれらのライブラリはデフォルトでリンクされてなかったのか、
どこを見ればそれらのライブラリをリンクするべきだというのが分かったのか、
教えていただけませんか?
752(1): ≠749 [ sage ] 02/12/05 21:06 AAS
1.どのDLLにあるかを明示したり、インポートテーブルを調査したりするために。
2.アプリの全部が全部Socketを必要としているわけではない。
必要になった時に、必要なライブラリをリンクするのが筋。
それを認めないなら、全てのライブラリをリンクしないといけない。
3.MSDN。具体的には、MSDNのsocketの項には
>Library: Use Ws2_32.lib.
とある。
753: 742-745 [sage] 02/12/05 22:02 AAS
>>752
ありがとうございます。MSDNの項には気づきませんでした。
754: デフォルトの名無しさん [sage] 02/12/06 02:11 AAS
>>738
いまいち状況がよくわからないが、自分宛のパケットが
ループバックインタフェースの方にルーティングされてるってことはない?
755: デフォルトの名無しさん [sage] 02/12/06 02:14 AAS
>>733-734
ブロードキャストアドレスは、255.255.255.255 でも良い場合があるみたいだが…
(DHCPとかが使う)。
で、サブネットブロードキャストアドレスは Interface の情報を取得する
必要がある。ioctl の SIOCGIFCONF あたり。
Unix なら Stevens に書いてある。Winsock なら、こんなのがあった。
http://www.kt.rim.or.jp/~ksk/wskfaq-ja/examples/getifaces.html
756(1): デフォルトの名無しさん [sage] 02/12/06 08:46 AAS
ブロードキャストアドレスってそのネットワークが使えるアドレスの終端アドレスじゃなかったの?
192.168.0.0/255.255.255.0
だったら
ネットワークアドレス:192.168.0.0
ブロードキャストアドレス:192.168.0.255
だし,
192.168.0.0/255.255.0.0
だったら
ネットワークアドレス:192.168.0.0
ブロードキャストアドレス:192.168.255.255
でしょ?
757(3): デフォルトの名無しさん [sage] 02/12/06 12:03 AAS
>>756
おいおい、自分のネットワークアドレスやネットマスクを知らないときには
どうするんだ? ブート時のDHCPクライアントとか。
758: デフォルトの名無しさん [sage] 02/12/06 12:57 AAS
>>757
上記では、
192.168.0.0/255.255.255.0
192.168.0.0/255.255.0.0
と、自分のネットワークアドレスが決まっているので、
ブロードキャストアドレスは、あのようになる。
759: デフォルトの名無しさん [sage] 02/12/06 14:24 AAS
>>757
クラスの規則に従ってるんなら平気じゃない?
760: デフォルトの名無しさん [sage] 02/12/06 14:34 AAS
>>757 limited broadcast でググってみれ
761(1): デフォルトの名無しさん [sage] 02/12/06 14:36 AAS
rfc1122 より
Limited Broadcast: {-1, -1}
Directed Broadcast: {<Network-number>,-1}
Subnet Directed Broadcast: {<Network-number<Subnet-number>,-1}
All-Subnets Directed Broadcast: {<Network-number>,-1,-1}
ちなみに
{network, subnet, host}
762: デフォルトの名無しさん [] 02/12/06 16:12 AAS
Limited Broadcast/Directed Broadcast/Subnet Directed Broadcast/
All-Subnets Directed Broadcast
この説明が欲しいよー。
763: デフォルトの名無しさん [sage] 02/12/06 16:13 AAS
rfc1122
764(2): デフォルトの名無しさん [] 02/12/06 16:25 AAS
教えて下さい。UDPにDestination Addressってのがありますが、
主に何に使われるのでしょうか。UDPの場合、使われ方はユーザ次第かもしれませんが。
あるサービスでは、XXX.XXX.255.255というのが入ってましたが、
ブロードキャストで応答せよ、という命令でしょうか。
765: 764 [] 02/12/06 16:30 AAS
Destination Addressは日本語では、送信先なんですね。
翻訳サイトしたら終点アドレスになって混乱させられちゃった。
送信先という用語からいくと、受けたマシンが自分宛かチェックするということですか?
766: デフォルトの名無しさん [sage] 02/12/06 16:31 AAS
MACアドレスじゃなかったのか
767: デフォルトの名無しさん [] 02/12/06 17:08 AAS
>>761
ありがとう。出来れば、ソースコードで教えれ。
768: デフォルトの名無しさん [] 02/12/06 18:07 AAS
http://www.rtpro.yamaha.co.jp/RT/FAQ/TCPIP/broadcast-address.html
これらのうち、ブロードキャストアドレスとしては Limited Broadcast を用いるべき (SHOULD) と書かれています。
Limited Broadcast: {-1, -1}
とあるから、何も考えずに、{-1, -1}とすれば良いんだろうか。
サブネットが255.255.255.0だと変な動作になるのかな?
769(2): デフォルトの名無しさん [] 02/12/06 20:38 AAS
送信バッファに溜まった電文を強制的にフラッシュしたいんですが、
fflushみたいな関数ってないですか?
なければどうやれば実現できるでしょうか?
よろしくお願いします。
770: デフォルトの名無しさん [sage] 02/12/06 20:46 AAS
>>769
どの言語の話ですか?
771(1): 769 [sage] 02/12/06 20:47 AAS
ああ、すみません。基本的なことでしたね。
言語はPOSIXのCで環境はLinuxです。
772: デフォルトの名無しさん [sage] 02/12/06 21:04 AAS
>>771
送信バッファの低位水準を1バイトにすればいいんでないの?
773(1): デフォルトの名無しさん [ sage ] 02/12/06 21:14 AAS
で、TCPなのかUDPなのか他の変態プロトコルなのか。
TCPならとりあえずTCP_NODELAY、と云ってみる。
774(1): デフォルトの名無しさん [sage] 02/12/06 21:21 AAS
>>773
それだと、nagleアルゴリズムを禁止するだけじゃないの?
たしかに、改善されるだろうけど、フラッシュまではいかないのかな?
775(1): デフォルトの名無しさん [ sage ] 02/12/06 21:27 AAS
でも結局、相手が受け取ってくれなかったら、
どうあがいたってバッファには残るでしょうに。
776(3): 769 [sage] 02/12/06 21:44 AAS
buf_size = 1;
setsockopt( sd, SOL_SOCKET, SO_SNDBUF, (char *)&buf_size, sizeof(buf_size) );
でもあまり改善されなかったので
buf_size = 1;
setsockopt( sd, IPPROTO_TCP, TCP_NODELAY, (char*)&buf_size, sizeof(buf_size) );
とやったら劇的に良くなりました。
>>774さんが言ってるnagleアルゴリズムってヤシですね。なんでこんな仕様なんだ、クソTCP。
777: デフォルトの名無しさん [sage] 02/12/06 21:52 AAS
>>776
SO_SNDBUF だと送信バッファサイズだね。低位水準じゃない。
778: デフォルトの名無しさん [sage] 02/12/06 21:57 AAS
>>775
残るか残らないかではなくて、書き出すか、書き出さないかではないの?
779(1): デフォルトの名無しさん [sage] 02/12/06 22:00 AAS
>>776
信号が赤から青に変わった瞬間、全員がアクセル全開で突っ走る
世の中が良いのか?
780: デフォルトの名無しさん [sage] 02/12/06 22:08 AAS
>>779
僕はMTなのでアクセル全開にしてもスピードは調節できまふ。
781: ◆Db/E231N/A [sage] 02/12/06 22:17 AAS
>>764
UDPのdestaddrって、それはIPヘッダの方に入ってるヤツのことではなく?
destaddrがなければ、データグラムをどこに送り出すかわかんねーべ?
782(1): デフォルトの名無しさん [sage] 02/12/06 22:25 AAS
ネットワークプログラミングしてるってくらいだから、最低限ネスペくらいもっておけよな。
783: デフォルトの名無しさん [] 02/12/07 01:06 AAS
>>782
ネスペって何?
784(1): デフォルトの名無しさん [sage] 02/12/07 01:12 AAS
ネスケの間違いだろ。
785: デフォルトの名無しさん [sage] 02/12/07 01:28 AAS
>>784
ネスレだろ?
786: デフォルトの名無しさん [sage] 02/12/07 02:27 AAS
ネナベ
787: デフォルトの名無しさん [sage] 02/12/07 03:35 AAS
>>776
Nagleのアルゴリズムがなかったら…
データをなるべくまとめて送り出す替わりに、手元に
少しでも集まったぶんからぽつぽつと送り出すことに
なるんだよ。スループットががた落ちになる。
788(4): デフォルトの名無しさん [ sage ] 02/12/07 07:59 AAS
場合もある、だろ。
あれは一種のお節介。
789: デフォルトの名無しさん [sage] 02/12/07 10:21 AAS
>>788
場合もある、だろ。
790: デフォルトの名無しさん [ ] 02/12/07 18:05 AAS
InterQとSocket通信をしようとしてもレスポンスが返って来ません。
多分このような経験をしたことのある方も多いと思います。
これは何が原因なのでしょうか?
791: デフォルトの名無しさん [sage] 02/12/07 18:25 AAS
>>788
アフォか。
792(1): デフォルトの名無しさん [] 02/12/07 18:42 AAS
ネットワークプログラミングしてるってくらいだから、最低限ネスペくらいもっておけよな。
793: デフォルトの名無しさん [sage] 02/12/07 18:43 AAS
場合もある、だる。
794: デフォルトの名無しさん [sage] 02/12/07 18:45 AAS
不覚にも笑ってしまた。
795: デフォルトの名無しさん [sage] 02/12/07 18:49 AAS
>>792
オンラインじゃ駄目か ?
796(2): デフォルトの名無しさん [sage] 02/12/07 18:51 AAS
Nagleのアルゴリズムが困る場合の方がInternetでは特殊だろう。
だからTCP_NODELAYがデフォルトでなくオプションになっている。
797(6): デフォルトの名無しさん [sage] 02/12/07 19:01 AAS
>>796
んなこたぁない。
HTTP、SMTP、IIOP、RPC、他多数でTCP_NODELAYが邪魔。
当然ながら実装がヘタレだったら別だよ。
つーか、リクエスト/レスポンス型のプロトコルで
TCP_NODELAYが役に立つのってあるんか?
798(1): デフォルトの名無しさん [sage] 02/12/07 20:33 AAS
>>797
んなこたぁない。
レーテンシーしか気にしないならともかく、
スループットが重要ならHTTPでもSMTPでも
Nagleアルゴリズムは役立つ。
まあ藻前は1パケット一行ずつ送ってろ。
799(2): デフォルトの名無しさん [sage] 02/12/07 20:38 AAS
Nagleのアルゴリズムがそんなに邪魔なら、
なぜどのTCP/IP実装でも(IPv6でさえ)
デフォルトでNagleのアルゴリズムがenableされてるんだ?
LAN環境で、クライアントが1つの時のレスポンス時間くらいしか
考えたことのない厨房はこれだから困る…
800: デフォルトの名無しさん [sage] 02/12/07 20:39 AAS
>>797
TCP_NODELAYをわかってなので文が変になってる。
801(1): デフォルトの名無しさん [sage] 02/12/07 20:40 AAS
>>798-799
よく見ろ。>>797は「TCP_NODELAYが邪魔」と書いている。
つまり、Nagleマンセーということだ。
802(1): デフォルトの名無しさん [sage] 02/12/07 20:52 AAS
>>799
むしろWAN環境のほうがTCP_NODELAYを設定することが多いね。
803(1): デフォルトの名無しさん [sage] 02/12/07 20:54 AAS
>>802
また知ったかが…
問題はLANかWANかじゃないだろ。
804(1): デフォルトの名無しさん [sage] 02/12/07 20:54 AAS
>>801
要は、>>797 の最初の一文が誤解の元だ。
805(2): デフォルトの名無しさん [sage] 02/12/07 20:56 AAS
>>803
関係アルよ。
LAN環境だと、小さなパケットに対するACKがはやいので、
Nagleのアルゴリズムが働かないことが多い。
WANではレスポンスが遅いので、Nagleが働く。
NAGLEわかってるの?
806: デフォルトの名無しさん [] 02/12/07 20:57 AAS
NAGLEわかってるの?
807: デフォルトの名無しさん [sage] 02/12/07 20:58 AAS
nagleのアルゴリズムなんて初級シスアド持ってたらみんな知ってるだろ?
808(1): デフォルトの名無しさん [sage] 02/12/07 21:00 AAS
>>805
無関係とはいっていない。
TCP_NODELAYを使うかどうかの基準は「レスポンス」か「スループット」か
であって、LANかWANかじゃないという意味。
LANでもWANでも、TCP_NODELAYを設定したほうが良いときも悪いときもある。
809(1): デフォルトの名無しさん [sage] 02/12/07 21:02 AAS
>>805
>LAN環境だと、小さなパケットに対するACKがはやいので、
>Nagleのアルゴリズムが働かないことが多い。
ヲイヲイ。Nagleのアルゴリズムが働くかどうかは「送り手側が」決める。
ACKが速いかどうかは関係ないだろう。
それとも「有効かどうか」という意味?
810(1): デフォルトの名無しさん [sage] 02/12/07 21:05 AAS
>>808
どうも勘違いされているようですが、
TCP_NODELAYを使うかどうかの基準は、通信の内容じゃないの?
レスポンスが上がったとか、スループットが向上したとか言う話は、
Nagleのアルゴリズムを適用したとか、向こうにしたとかの後の話であって、
レスポンスを上げるために、もしくはスループットを上げるために設定するものではない
ということ。
811: デフォルトの名無しさん [sage] 02/12/07 21:06 AAS
>>809
nagleのアルゴリズムはACKが返ってない未承認の小さなパケットを
減らすことを目的としています。
812(1): デフォルトの名無しさん [sage] 02/12/07 21:28 AAS
>>810
いずれにせよ「LAN」「WAN」とは無関係だろ。
John NagleのRFC 896は読んだのか?
throughputを改善するためと書いてあるだろ?
813(1): デフォルトの名無しさん [sage] 02/12/07 21:30 AAS
>>812
でも、あんたも、なんでもかんでもnagle使えばいいわけじゃないっていってるジャン?
スループットが改善するかどうかと言うのはクライアントサーバ間の電文の種類
などの通信の内容によって変わってくる。
814: デフォルトの名無しさん [] 02/12/07 21:34 AAS
>>813
もちろんその通りだが。
そもそも何の話だったかというと、ええと…
要するに、Nagleのアルゴリズムが不要と書いた
香具師は、無知でマヌケで恥さらしということだ。
815: デフォルトの名無しさん [sage] 02/12/07 21:43 AAS
まったりいこうぜ。
あと、ここプログラミングスレだぞw
816: デフォルトの名無しさん [sage] 02/12/07 22:10 AAS
不要かどうかは場合によるだろ。
でも、なんでもかんでもnagleは不要っていうのはマヌケだな。
817(1): デフォルトの名無しさん [ sage ] 02/12/07 22:28 AAS
>Nagleのアルゴリズムが不要と書いた香具師
って誰?
818(1): ちゃんばば ◆Lw8TjwCkqM [sage] 02/12/07 22:36 AAS
>>817
>>776と>>788
あと、アフォな書き方だから良くわからんが、
たぶん>>797も。
819(1): デフォルトの名無しさん [sage] 02/12/07 22:46 AAS
788は813と同じような事を言ってるようだけど?
820: 名無しさん@接続しっぱなし [sage] 02/12/07 23:15 AAS
>>818
たぶん>>797は、>>796を「Nagle否定」と誤読したんだと思うよ…
>>804が言うように、>>796へのACKである一行目を除けば正しいから。
821: 名無しさん@接続しっぱなし [sage] 02/12/07 23:17 AAS
>>819
>>788が「お節介な時もある」なら同じだと思うけど…
822: デフォルトの名無しさん [sage] 02/12/07 23:37 AAS
殴るぞゴルァ
823: デフォルトの名無しさん [] 02/12/07 23:38 AAS
Winsockを使っています。
簡単なポートスキャナ(といっても知り合いのサーバの特定の複数のポートが開いているかどうか確認するだけですが)
を作り、それは確認にConnectが成功したか否かという方法をとっています。
この場合、成功するときは数秒でConnectが返ってくるのですが、
失敗するときはConnectが返ってくるまで20秒近くかかってしまいます。
成功も失敗も数秒でわかるようにしたいのですが、どのようにすればよいでしょうか?
Connect以外でポートが開いているかどうかを確認する方法はあるでしょうか?
よろしくおねがいします。
824(1): デフォルトの名無しさん [sage] 02/12/07 23:40 AAS
過去ログ、というかこのスレをconnectで検索しろ。
つかそれくらいもできないヴァカは氏ね。
825: デフォルトの名無しさん [sage] 02/12/07 23:40 AAS
非ブロッキングコネクト
826(1): デフォルトの名無しさん [sage] 02/12/07 23:51 AAS
もっと早く知りたければ、SYNパケットだけ送るとか。
RST送って、返ってきたら「閉じてる」とか。
rawソケット使うか、データリンクに直接アクセスすれば?
connectだけじゃ芸がないだろう。
827: デフォルトの名無しさん [sage] 02/12/08 01:46 AAS
ありがとうございます。
>>824さんの言う通りまったく同じ質問が以前このスレあったのに申し訳ありませんでした。
ただ、タイムアウト方法の他に>>826さんの方法も知ることができ、
WEB検索すると役に立ちそうなページがヒットしたので、結果的に許してにゃんまげ。
828(2): デフォルトの名無しさん [sage] 02/12/09 02:31 AAS
winsockでデータリンクにダイレクトにアクセスするにはどうしたらいい?
bpfみたいなものないんかな。
cygwinだったら可能かな?
829(1): デフォルトの名無しさん [sage] 02/12/09 03:04 AAS
>>828
WinPcap じゃ駄目かい?
http://winpcap.polito.it/
830: 828 [sage] 02/12/09 12:59 AAS
>>829
おお。ありがとうございます。落としてみます。
831(1): デフォルトの名無しさん [] 02/12/09 16:10 AAS
アセンブラレベルでネットワークを利用することはできますか?
832: デフォルトの名無しさん [sage] 02/12/09 16:17 AAS
>>831
そういう質問をするヤシにはできない。
833: デフォルトの名無しさん [sage] 02/12/09 16:36 AAS
は?
834: デフォルトの名無しさん [ sage ] 02/12/09 17:02 AAS
...
push eax
call [imp_WSASocket]
とかか(ワラ
835(2): デフォルトの名無しさん [sage] 02/12/09 17:26 AAS
POP3クライアントを作るのに、winsockでWSAAsyncSelect使ってます。
FD_READとかFD_WRITEでイベントを処理するんですが、FD_WRITEがFD_CONNECT直後の1回しか来ません。
FD_READは常に発生しているようなんですが、なぜFD_WRITEは定期的に発生しないのでしょうか?
836: デフォルトの名無しさん [sage] 02/12/09 18:07 AAS
sendしてないからじゃないの
837(1): チューボー [sage] 02/12/09 18:11 AAS
>>835
FD_WRITEってソケットに書き込めるようになったときに送られてくるんだったと思います。
だから任意のタイミングでデータ送信したい時は、
PostMessage()で強制的にFD_WRITE発行するといいんじゃないでしょうか。
半端な知識なんで変なこと言ってたらすみません。
838: デフォルトの名無しさん [sage] 02/12/09 18:19 AAS
FD_WRITEについては、このスレのpart1でいろいろ議論されてたよ。
要約すると、connect直後のFD_WRITE以外は、
sendしてWSAEWOULDBLOCKが返ってきた後の、IO-pendingからの復帰時にしか来ない。
だから、sendは(connectしたら)いつでもやっていいの。
だけど、続けてsendするといずれ失敗する。
そうなったら、「もうsendしても大丈夫だよ」とFD_WRITEが来る。
839: デフォルトの名無しさん [sage] 02/12/09 18:53 AAS
>>837
むちゃくちゃ変ですあほ
840: 835 [sage] 02/12/09 19:23 AAS
ふむふむ。。。
みなさん、ありがとう。
もう少しがんばってみます。
841: デフォルトの名無しさん [sage] 02/12/09 22:26 AAS
データが大量に届き続けると、FD_READ が連続で発生して
UI が固まるから、止めた方がいいよ。
842: デフォルトの名無しさん [sage] 02/12/09 22:32 AAS
select で send を使うのって、どういうときなんですか?
いつでも書き込んで良さそうなんですが。
843(1): デフォルトの名無しさん [sage] 02/12/10 01:22 AAS
非ブロッキングソケットで、sendで止まっては困るとき。
844: 843 [sage] 02/12/10 01:22 AAS
しまった、ブロッキングソケットで、だ
上下前次1-新書関写板覧索設栞歴
あと 157 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.027s