[過去ログ] ネットワークプログラミング相談室 Port4 (1001レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
866
(2): デフォルトの名無しさん [] 02/12/12 01:57 AAS
>>857
ノンブロッキングでシングルスレッドI/Oマルチプレクシング
これはzeusという有料webサーバーの特徴なんですが、ググっても要領を得なかったのです。
apache2.0の性能向上はマルチスレッド対応によるところが大きいと聞きますし
世間はマルチスレッドマンセーであると思われますが、シングルスレッドであるメリットはどこにあるのでしょうか?
またI/Oマルチプレクシングについての資料やサンプルコード(perlやC)はないでしょうか?
867: デフォルトの名無しさん [sage] 02/12/12 02:01 AAS
>>866
マルチプレクシングを多重に読みかえて検索してみなされ
http://www.soi.wide.ad.jp/class/20000011/slides/08/index_3.html
コードは見当たらんな
868: デフォルトの名無しさん [] 02/12/12 02:05 AAS
レベル低いね
869: デフォルトの名無しさん [ sage ] 02/12/12 02:12 AAS
たとえば、同時接続数10000とかになると、マルチスレッドだとスレッドが、
マルチプロセスだとプロセスが10000とかできたりして、
そのタスクスイッチだけで相当の時間が費やされてしまうし、
保存すべきコンテキストも膨大な量になるから。
870
(1): デフォルトの名無しさん [sage] 02/12/12 02:15 AAS
>>866
理屈からいえばシングルスレッド/非ブロッキングが一番効率的になる
(スレッド切り替えだとかの問題で)が、いかんせん、余りにも処理の
流れが掴みにくくなるので一般的に保守が面倒になる、といわれている。
apacheの場合はマルチプロセスだったものがマルチスレッドも可能になった
って話でこの場合関係ない。
871
(1): デフォルトの名無しさん [sage] 02/12/12 02:38 AAS
>>870
CPU1個ならね。
CPU複数なら、マルチスレッド、ノンブロッキングマルチプレクシングが良い。
のか?教えて、偉い人。
872
(2): デフォルトの名無しさん [ sage ] 02/12/12 02:55 AAS
プロセスが1つだと、そのプロセスが落ちたとき全滅なので、
マルチプロセス・ノンブロック・マルチプレキシング、
ということになったりもするが。
873
(2): デフォルトの名無しさん [sage] 02/12/12 03:07 AAS
>>871
以前読んだ解説記事には、例えばWebサーバみたいにI/Oリクエストを
多数処理するプログラムの場合、
(1)シングルスレッド。selectでマルチプレクシング。
(2)I/Oリクエストごとにスレッドを生成。
(3)CPU数程度のワーカ・スレッド。ノンブロッキングI/Oでマルチプレクシング。
と、下になるほどスケーラブルとあった。
874
(1): デフォルトの名無しさん [sage] 02/12/12 08:32 AAS
>>872
初期のApacheとかだと、cgiを呼ばなきゃなんない関係で、
別プロセスにしてるんじゃなかったかなあ。

>>873
ソースキボン
875: デフォルトの名無しさん [] 02/12/12 10:33 AAS
>>873
スレッドだけじゃ駄目な場合もあるだろうが

>>874
違う。1プロセスで扱える接続数には制限があるほか、
メモリリークを回避する意味合いや、>>872の効果もある。
876
(6): デフォルトの名無しさん [] 02/12/12 10:42 AAS
ちょうどマルチスレッドの話もでているので便乗させてください
不特定多数が参加するMMO(というわりには規模がちいさいけど、イメージ的にはそれ)を作っています
マルチスレッドを使おうと思ったのですが、色々訳あって現在はシングル+非同期winsockでやっております

そこで質問なのですが、winsockでconnectを同期せず(connectで止まらず)に行うには
AASyncを使うしかないのでしょうか
recv, sendはソケットのオプション変更で非同期にできたのですが…
プレイヤーがログインしたとき、データベースサーバーにコネクションを張らせたいのです
マルチスレッドにするしかないでしょうか?
877
(1): デフォルトの名無しさん [sage] 02/12/12 12:23 AAS
>>876
プレイヤー毎にDBに接続? 。。。正気の沙汰とは思えんな。
それじゃ同時接続数は30〜100くらいしかさばけんぞ。
878: デフォルトの名無しさん [] 02/12/12 12:32 AAS
UDPのパケット受信で正確な大きさが分からないのでsock_fastreadで受信します。
1回のsock_fastreadで処理したいのですが、
パケットってどれくらい小さく分断されるされる可能性があるものなのでしょうか?
879
(1): デフォルトの名無しさん [ sage ] 02/12/12 12:40 AAS
>UNIX Network Programming" によれば、全ての TCP/IP の実装は、
>MTU の大きさに関わらず 576 バイトの最小 IP データグラムを
>サポートしなければなりません。IP ヘッダが 20 バイトで UDP ヘッダが
> 8 バイトと仮定すると、UDP メッセージの安全な最大サイズとしては
>548 バイトが残ります
880: デフォルトの名無しさん [sage] 02/12/12 12:44 AAS
thanx!>>879
じゃ、sock_fastread1回で、500byte位まで逝けるね!
881
(1): デフォルトの名無しさん [sage] 02/12/12 14:20 AAS
>>876
WSAEventSelect
connectよりgethostbynameのEvent版がないことのほうが
納得いかん
882
(1): 876 [] 02/12/12 15:21 AAS
>>877さん, 881さん
ありがとうございます。
WSAEventSelect確認しておきます

今ひとつのサーバーにコネクションいくつ張れるかテストしてみました
43本……。
いや、Win98をサーバーにしようとは微塵も思わないけど、44本目で
「Error10055 バッファスペースに空きがない」
2kなら大丈夫かな…だといいな
クライアントとサーバーが同じPCだったからかな…
何にせよプレイヤーの数だけDBにコネクションを張るのは無謀、了解しました。

[プレイヤー] ←プレイ→ [ゲー鯖] ←セーブロード→ [DB鯖]
ゲー鯖とDB鯖には一本張って、それでやりとりするのがいいですかね
何にせよゲー鯖はプレイヤー人数分コネクト張らなきゃいけないのに、43本…
883: デフォルトの名無しさん [] 02/12/12 16:57 AAS
>>882
めちゃくちゃ納得
というか既存のネットゲーどうやってるのか?知りたいです。
ノンブロッキングIOプレクシングとやらも関係あるのかも
884: デフォルトの名無しさん [sage] 02/12/12 19:15 AAS
DBとゲー鯖で一本コネクション張っておけば?
でも一斉に大量がセーブロードを行う場合にsendバッファ超えそう
一回セーブ内容をプールしたりする必要があるかもな
885
(3): デフォルトの名無しさん [sage] 02/12/12 20:11 AAS
>>876
connectって非同期にできない?
リファレンス見ると、できそうに書いてあるけど。

> With a nonblocking socket, the connection attempt cannot be completed immediately. In this case, connect will return SOCKET_ERROR, and WSAGetLastError will return WSAEWOULDBLOCK.
886
(3): デフォルトの名無しさん [sage] 02/12/12 23:24 AAS
>>885
どう読んだらそうなるんだ?
「connect要求は直ちに完了できない(ノンブロッキングにできない)ので
エラーになる」と書いてあるが。
887
(1): デフォルトの名無しさん [sage] 02/12/13 00:00 AAS
>>886
Windows の設計はよくわかんなくて、エラーは返るんだけど、正常に
ノンブロッキング処理は行われる。

だから、メッセージをそのまま解釈すると、connect から SOCKET_ERROR
が返ってきて、かつ WSAGetLastError から WSAWOULDBLOCK
が返ってきたときは、正常に非同期接続が行われている(途中)ってことになる。
888
(5): 885 [sage] 02/12/13 00:07 AAS
>>886
え。だって、ノンブロッキングソケットって、いつもエラーリターンでそ? recv とか send とかも。
EWOULDBLOCK は、本来ならブロッキングしてたはずのところを、ノンブロッキングだからすぐリターンしたよって意味ではなかった?
889
(1): デフォルトの名無しさん [sage] 02/12/13 00:31 AAS
EWOULDBLOCKはEINTRと、意味は違うけどその後の処理は似てるね。
890
(1): デフォルトの名無しさん [sage] 02/12/13 00:56 AAS
まあ、Winsockのノンブロッキングを知ってればあたりまえだけど、
そういう仕様だと思って納得するしかないな。

ところで、>>876
> recv, sendはソケットのオプション変更で非同期にできたのですが…
というところから、ノンブロッキングモードではなく非同期モードを使おうとしているようだが。
ちなみに俺は知らんし調べる気もない。
891
(2): デフォルトの名無しさん [sage] 02/12/13 00:57 AAS
非同期とノンブロックは全く別ものだな。
知ったかクンがよく間違えてるが。
892
(2): デフォルトの名無しさん [] 02/12/13 01:06 AAS
private int DatagramSocket ds;
って宣言の仕方おかしいですか?

Eclipseをつかっていまして
トークン"ds"に構文エラーがあります。正しくは";","."です。と表示されますが、
どういうことでしょうか。
893: デフォルトの名無しさん [sage] 02/12/13 01:08 AAS
>>889
結構違うと思うよ。

EINTRはそのままリトライに入って問題ないけど、
EWOULDBLOCKはそのままだとBusy Loopに陥る。
894: デフォルトの名無しさん [sage] 02/12/13 01:09 AAS
>>892
ネットワークプログラミング以前の問題
初心者スレへ逝け
895: 892 [sage] 02/12/13 01:16 AAS
あ・・・なんでintが入ってるんだろ(汗
スマソ
896
(5): デフォルトの名無しさん [sage] 02/12/13 09:03 AAS
>>888
「いつも」ではない。その場で処理されてすぐに戻ってくるかもしれない。
いつもWSAEWOULDBLOCKが返ってくることを前提にした
コードを書いてはならない。
897: 876 [sage] 02/12/13 09:40 AAS
>>890-891
すいません、しったか君が間違えました
ノンブロッキングモードです。

cnnnectにもノンブロッキングモードはあるのかな
ちょっと調べてみます

>>881さん
WSAEventSelect調べてみました
ははーん…。
イベントとやらも便利そうですね。winsockのみなのが残念なところ
linuxでも試してみたいので、connectのノンブロッキングを探してみます
だめそうならイベントを
898
(1): デフォルトの名無しさん [sage] 02/12/13 12:57 AAS
>>896
上のドキュメント見ろ。「いつも」だ。
899
(1): デフォルトの名無しさん [sage] 02/12/13 13:01 AAS
> With a nonblocking socket, the connection attempt cannot be completed immediately. In this case, connect will return SOCKET_ERROR, and WSAGetLastError will return WSAEWOULDBLOCK.

ノンブロッキングソケットでは、コネクションの試みは即座には完了できない。
この場合、connectはSOCKET_ERRORを返す。WSAGetLastErrorはWSAEOULDBLOCKを返す。
900
(5): デフォルトの名無しさん [sage] 02/12/13 14:18 AAS
>>888より
> え。だって、ノンブロッキングソケットって、いつもエラーリターンでそ? recv とか send とかも。
>>896より
> 「いつも」ではない。その場で処理されてすぐに戻ってくるかもしれない。
>>899より
> the connection attempt cannot ...

後は自分で判断しような>他の人
901: デフォルトの名無しさん [sage] 02/12/13 14:34 AAS
判断する余地があるのか無いのか・・・
902: デフォルトの名無しさん [sage] 02/12/13 14:49 AAS
無いね。「may not」なら「完了しないこともある」だが、
「cannot」だからね。必ずSOCKET_ERRORが返る。
903
(1): 900 [sage] 02/12/13 14:54 AAS
>>888より
> いつもエラーリターンでそ? recv とか send とかも。
904: 900 [sage] 02/12/13 14:56 AAS
おっと、connect直後にFD_WRITEが来るから
send()が成功するのは当てはまらないと言われるかな。
905
(1): デフォルトの名無しさん [sage] 02/12/13 14:56 AAS
要するに>>896が知ったかということだろ。
906: 900 [sage] 02/12/13 14:57 AAS
connectに関しては全く異論はないよ。
907: 900 [sage] 02/12/13 15:01 AAS
しつこいから最後。
俺には>>896が知ったかだったのではなく、>>898がよく読んでなかっただけに見えるけどね。

あ、俺は>>896ではないよ。
908
(1): デフォルトの名無しさん [sage] 02/12/13 15:08 AAS
888がバカなのは確かだが。
909
(3): デフォルトの名無しさん [sage] 02/12/13 15:24 AAS
nonblockingなソケットの場合

1. connect()は必ずWSAEWOULDBLOCK.が返ってくる。
2. recv()やsend()とかはいきなり正常終了する可能性がある。

connect()する時は相手からの応答を待つから、即座の復帰はありえない。
recv()やsend()ではバッファの関係で正常/WSAEWOULDBLOCK.両方の可能性がある。

ごっちゃにしたのが混乱の原因(w
910: デフォルトの名無しさん [sage] 02/12/13 15:27 AAS

911: デフォルトの名無しさん [sage] 02/12/13 16:10 AAS
そうそう、send()が一番わかりやすいから書いたけど、
recv()もconnect後にFD_READが来る前でも成功する可能性がある。
そうなると、次にFD_READが来てからrecv()しても、WSAEWOULDBLOCKになる可能性がある。

また、FD_READの処理部で複数回recv()することも出来る。
そして、2回目以降が成功する場合もある。
この場合も次のFD_READで何も受信できない場合が多い。
これは、1回目のrecv()後にバッファにデータが残っていたら、
recv()からの復帰前にFD_READが送られるから。

だったはず。

確か、FD_CLOSEの後にFD_READが来る可能性もあったはず。
912
(1): デフォルトの名無しさん [sage] 02/12/13 18:04 AAS
>確か、FD_CLOSEの後にFD_READが来る可能性もあったはず。

普通はおきないけど、FD_CLOSE 前のFD_READ が届いたときに
(ソケットバッファ未満の?)小さな recv() しかしない場合に、
発生する可能性ありなんだっけ?

winsock 側としては、
FD_READ
FD_CLOSE
をポストして、お役御免と思っていたら、FD_READ 時に全部 recv()
してくれないものだから、そこで、あわてて FD_READ を再発行って
印象。

それ以外のシチュエーションでも、FD_CLOSE後のFD_READなどが
ポストされる場合って、あるのかな?
913: デフォルトの名無しさん [] 02/12/13 20:22 AAS
Mobile IPv6 に対応したプログラムくみたいんですけど、誰か参考になる
ソースとかのありかおしえてくれませんか?
914: デフォルトの名無しさん [sage] 02/12/13 23:28 AAS
>>912
前スレで同じ話があったと思う。
915
(1): デフォルトの名無しさん [sage] 02/12/14 04:28 AAS
蒸し返すようだけど、>>885-888の話の流れからして、
888は「WSAEWOULDBLOCKを知らせる時には(sendやrecvも)いつもSOCKET_ERRORを返す」
ということを言いたかったんじゃないかと思う。
とすると、888も896も898以降も、みんなわかってるのに言葉のあやでひっかかってただけかも。
日本語勉強しないとね>俺も
916: 名無しさん@接続しっぱなし [] 02/12/14 12:43 AAS
>>845
http://www.cs.rice.edu/~gaurav/papers/usenix99.ps
これ読むと、select(2)のkernel内bottle neckは、
bit操作であることが分かるよ。

だからkqueue/keventとまではいかずに、poll(2)や/dev/pollでも、
selectよりもかなり改善が期待できる。(C10Kな状況では)
http://www.kegel.com/dkftpbench/Poller_bench.html
にベンチマークがある。
917
(1): デフォルトの名無しさん [] 02/12/14 12:57 AAS
ウイルスをください
もちろんダウンロードしたときに
こっちのパソコンが感染しないように
してほしいです。
ダウンロードさせてくれるサイトの紹介でも
いいです。
918: デフォルトの名無しさん [] 02/12/14 13:17 AAS
>>917
何に使うの?
919
(2): 888 [sage] 02/12/14 17:58 AAS
885=888です。
>>891 非同期と聞いてノンブロッキングと短絡的に考えてました。本で読んだばっかりなのに・・・鬱。
>>915 ふぉろーさんくす・・・言葉足らずだったばっかりに。許して>896,900,903,905,908
>>909 localhostの場合はすぐconnect完了するかもしれんので、必ずじゃないかも(UNIXの本にはそう書いてありました)。
あと、UNIXではEWOULDBLOCKじゃなくてEINPROGRESSだと知りました・・・いろいろ勉強不足。ごめ。もっと修行します。
920
(1): デフォルトの名無しさん [sage] 02/12/14 19:27 AAS
>非同期と聞いてノンブロッキングと短絡的に考えてました
って?非同期=ノンブロッキングではないってこと?
http://www.google.co.jp/search?hl=ja&ie=UTF-8&oe=UTF-8&q=%E9%9D%9E%E5%90%8C%E6%9C%9F+%E3%83%8E%E3%83%B3%E3%83%96%E3%83%AD%E3%83%83%E3%82%AD%E3%83%B3%E3%82%B0+%E3%82%BD%E3%82%B1%E3%83%83%E3%83%88&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=lang_ja
とか見ると「非同期(ノンブロッキング)」とか書いてあるけど…。
921
(2): 919 [sage] 02/12/14 19:40 AAS
>>920
>って?非同期=ノンブロッキングではないってこと?
ないです。891さんの言うとおり、やっぱりよく間違えられるんでしょう。
「UNIXネットワークプログラミング第2版Vol1」によると、入出力を扱う手法はブロッキング、ノンブロッキング、多重化(select と poll のこと)、シグナル駆動I/O、非同期I/O という5つの方法があって、
非同期I/O は aio_read、aio_write とかいうものを使う方法だそうです。Windows ではたぶん WriteFileEx と ReadFileEx で OVERLAPPED を指定した状態が、それに相当するのではないかと。
922: デフォルトの名無しさん [sage] 02/12/14 19:47 AAS
>>921
あ、そうなんですか。
うーん。何やら難しいですね。。。
923: 909 [sage] 02/12/14 22:40 AAS
>>919
俺はMSDNに書いてある記述の要約をしただけで、
Unix系の実装について触れた覚えはないんだが。

大抵の場合はlocalhostに関してもエラーが帰ってくる可能性が高いだろ。
connect(2)が完了するためには相手がaccept(2)するためにコンテキストスイッチが
発生するから、それを待たずに即座に復帰するよう実装するんじゃないか?

それでも、nonblockingでもconnect(2)が常に失敗することを仮定して
実装すべきではないと思う。つーか、エラーチェックくらいしろ、と。

あと、Unix系ではEAGAIN、EWOULDBLOCK、EINPROGRESSの三種類がある。
Linuxでは、manページによるとconnect(2)はEINPROGRESS、recv(2), send(2)は
EAGAINまたはEWOULDBLOCK(実際は同じ値)を返すらしい。
924
(1): 909 [] 02/12/14 22:40 AAS
>>921
使い分けだと3種類だな。

同期: ブロッキング
多重化: ノンブロッキング + (select or poll)
非同期: シグナル駆動I/O or 非同期I/O

Windowsの場合も同様。
ブロッキング、ノンブロッキング、select()、Windowメッセージ、イベント、重複I/Oに分かれる。
WSAEventSelect()ではWindowメッセージかイベントに対して通知をし、
OVERLAPPED渡すやつではイベントか、コールバックに通知をする。

同期: ブロッキング
多重化: ノンブロッキング + (select or event)
非同期: 重複I/O(イベント使わずコールバック)

MsgWaitForMultipleObjectsEx()使えば、スレッドの終了イベントを待機しながら、
Windowsメッセージを処理し、さらにI/Oを完全な非同期で処理することを1スレッドで
実装することも不可能ではない。
925
(1): 名無しさん@接続しっぱなし [sage] 02/12/15 01:35 AAS
ネットワークや分散の世界で、
非同期メッセージ通信というと、requestとacknowledgementが分かれていて、
acknowledgmentを別途取得するタイプのメッセージ通信のことです。

例えばDNSを引く時に、gethostbyname(3)を使うと、
関数呼び出しと値返しが同時に起きるので、同期メッセージ通信になります。
WSAAsyncGetHostByName(win32)だと非同期メッセージ通信です。

非同期I/Oは、kernelとのやり取りにおいて、
I/Oの結果をAPI呼び出し時に即座に返えさないタイプのI/Oです。

どのレベルのinteractionについて、同期/非同期を言っているのか、
混同している人は意外に多いようです。
926
(2): デフォルトの名無しさん [sage] 02/12/15 01:40 AAS
APIレベルの話なんでねえの?
927: 名無しさん@接続しっぱなし [sage] 02/12/15 01:42 AAS
>>924
Stevens本はpthreadを視野に入れてないので、
(というかStevensの使っているUNIXにはまともなthreadがなかった)

> 多重化(select と poll のこと)

でもいいのですが、Windowsの場合は、

> 多重化: ノンブロッキング + (select or event)

だけじゃなくて、多重化を実現する方法に、
マルチスレッドも入るんじゃないでしょうか?
(それからノンブロッキングは必須でない。多重化をより稼げるけど)
928: 名無しさん@接続しっぱなし [sage] 02/12/15 01:45 AAS
>>926
gethostbyname(3)もsend(2)もどっちもAPIじゃん?
929: 名無しさん@接続しっぱなし [sage] 02/12/15 01:51 AAS
>>926
ん?
「send/recv(write/read)レベルの話なんでねえの?」
「UNIXでいうところのsystem callレベルの話なんでねえの?」
と言っているのかな?

そこに限ってしまうと同期/非同期と
ブロッキング/ノンブロッキングの区別がなくなるから、
同期/非同期はもう少し大きい枠組みで理解しよう、
というのが、分かりにくかったかも知れないけど>>925の主旨でした。
930: デフォルトの名無しさん [sage] 02/12/15 02:07 AAS
このスレで扱ってる同期/非同期は、
「指示した動作の、完了を知る方法の違い」
でしかないと思った。

TCP/socketはネットワークアクセスのためのAPIだけど、
APIになった瞬間にネットワークの存在は関知しなくてもいいでしょ。
というか、知りえないでしょう。

925の言う「どのレベルでのinteractionか」というくだりの、
レベルの違いっていうのが、プログラムから見て意味あんのか疑問。
931: コロ助 [コロッケ大好きナリ] 02/12/15 12:10 AAS
すいません。WinSockの質問をしたいのですが。
サーバーにHTTP接続を試みているのですが、うまく接続できません。

ソース
sock[n]=socket(AF_INET,SOCK_STREAM,0);

WSAAsyncSelect(sock[n],hW,SM_ASYNC,FD_CONNECT|FD_CLOSE|FD_READ|FD_WRITE)

lpServEnt = getservbyname("http", "tcp");

if(lpServEnt==NULL)
{
ser.sin_port=htons(80);
}
else
{
ser.sin_port=lpServEnt->s_port;
}

lpHostEntry=(LPHOSTENT)bufHostEnt;
ser.sin_family=AF_INET;
ser.sin_addr=*((LPIN_ADDR)*lpHostEntry->h_addr_list);

if(SOCKET_ERROR!=connect(sock[n],(LPSOCKADDR)&ser,sizeof(SOCKADDR_IN)))

HTTPだと駄目なのですが、SMTPやFTPならうまく接続できて、データも転送できます。
なぜ、HTTPだけ接続できないのでしょうか?
932
(1): デフォルトの名無しさん [sage] 02/12/15 12:20 AAS
> うまく接続できません
> HTTPだと駄目

どこでどんなエラーが出てるのか、
またはエラーが出てないが応答がこないのか、
明示しないお前にコロ助を名乗る資格はない。
933
(1): コロ助 [コロッケ大好きナリ] 02/12/15 12:34 AAS
>>932
唯一、エラーが出ているのは、サーバーと接続(connect)したときで、

エラー

if(SOCKET_ERROR!=connect(sock[n],(LPSOCKADDR)&ser,sizeof(SOCKADDR_IN)))
{
MessageBox(hW,"connect","成功",0);
}
else
{
if(WSAGetLastError()!=WSAEWOULDBLOCK)
{
MessageBox(hW,"connect","失敗",0);
}
}

connect関数はSOCKET_ERRORを返しエラーとなりますが、その後の、if(WSAGetLastError()!=WSAEWOULDBLOCK)には引っかかりません。

そのほかはエラーは全く出ていません。
934
(1): コロ助 [コロッケ大好きナリ] 02/12/15 12:37 AAS
lpServEnt = getservbyname("http", "tcp");
でhttpを指定すると接続されないのですが、ftp、smtpだとうまく接続されます。

WinSockはhttp接続の際なにか特別な処理をしないといけないのでしょうか?
935
(1): デフォルトの名無しさん [sage] 02/12/15 12:41 AAS
>>933
WSAGetLastError() ぐらい知らんのかよ...。
936: デフォルトの名無しさん [sage] 02/12/15 12:43 AAS
>>934
gethostbyname()
937: 935 [sage] 02/12/15 12:43 AAS
すまん勘違いだった。
938: デフォルトの名無しさん [sage] 02/12/15 13:36 AAS
( ●∀●) コロ助にSYNパケットを送るモナ
939
(1): デフォルトの名無しさん [sage] 02/12/15 14:21 AAS
実は80はwell-known-portに含まれず、servicesにhttpが書いてない罠。
940: デフォルトの名無しさん [sage] 02/12/15 14:36 AAS
>>939
その時は、80 をセットするようにしてるみたいだけど ?
ちゃんと見てないけど、ロジックがおかしいのか ?
941
(1): デフォルトの名無しさん [ sage ] 02/12/15 14:51 AAS
で、結局WSAGetLastError()は何を返してるんだ?
それと、相手はちゃんと存在するのか?
942: デフォルトの名無しさん [] 02/12/15 14:52 AAS
っつーか、ネットワークプログラミングしてるくらいなら、
パケットダンピングくらいしろよ。
943: デフォルトの名無しさん [sage] 02/12/15 14:58 AAS
>>941
取りあえず、WSAEWOULDBLOCK じゃねーのか ?
WSAAsyncSelect() で Non-Blocking-Mode にしちゃってるから、当たり前だと思う。
ftp/smtp がちゃんと動いている方が不思議だ。
944: rubyist@カラアゲうまうま [ewgfjwefjew] 02/12/15 15:18 AAS
とっとと教えればキレることもねーんだよ馬鹿
俺が下手に出て教えてくれっていってんだから
すぐ書けばいいだろボケ
945: デフォルトの名無しさん [sage] 02/12/15 15:29 AAS
いつみてもワラタ
946
(2): デフォルトの名無しさん [sage] 02/12/15 19:41 AAS
inet_ntoa()とかマルチスレッドで使うときどうしてます?
inet_ntoa_r()無いので結局内部バッファ使わないのを自作してしまったんだけど
これ程度でmutexなどで排他かけるのもモタイナーイ気がして・・
947
(2): デフォルトの名無しさん [sage] 02/12/15 20:00 AAS
>>946
環境は ? マルチスレッドサポートしてるシステムなら、普通 inet_ntoa() もスレッドセーフになってると思うが。
948
(2): デフォルトの名無しさん [sage] 02/12/15 20:06 AAS
>>947
Solaris2.5/8,AIX4.3です
949: デフォルトの名無しさん [sage] 02/12/15 20:31 AAS
>>948
5年も前の環境じゃしょうがないかも知れないな。
素直に、排他制御しとくべし。
950: 948 [sage] 02/12/16 00:28 AAS
やっぱりみなさん当時はそうしてたんでしょうかね・・
951: デフォルトの名無しさん [sage] 02/12/16 00:46 AAS
つーか、普通その手のライブラリってTLS(TSS)に内部バッファ確保するようになってないか普通?
5年前の段階でTLSもないのがまともなOS面してたとも思えないんだが。
952: デフォルトの名無しさん [sage] 02/12/16 00:50 AAS
TLSはwin95にすらあったねえ。
953: デフォルトの名無しさん [ sage ] 02/12/16 00:50 AAS
なんでそのマシンでmanして調べてみないの?
954: デフォルトの名無しさん [] 02/12/16 05:45 AAS
windowsでは バークレーソケットではパフォーマンスでないのかな。。。
http://www-6.ibm.com/jp/developerworks/linux/020208/j_l-rt6.html#1

たしかに ab(ApacheBench) で windows上の apache と Linux上の apacheで
速度を計測してみると、ハードウェアは Windowsの方が上なのに3倍近く差が
でたしなぁ。。。 こんなの変ですよ!ゲイツさん!
955: デフォルトの名無しさん [sage] 02/12/16 05:53 AAS
Apacheのバージョンが不明だが、もし1.3系ならWin32で遅いのは
socketよりむしろApacheがタコだから
956: デフォルトの名無しさん [sage] 02/12/16 10:39 AAS
>>947
『スレッドセーフ』は各スレッドで排他制御無しで使えるって意味ではないという罠。
957: デフォルトの名無しさん [sage] 02/12/16 12:17 AAS
そろそろ新スレの季節ですが、、、
だれかテンプレまとめて。
なんならスレを立ててもいいから。
958: デフォルトの名無しさん [] 02/12/16 22:36 AAS
>>946
inet_ntop()を使うべし
959: デフォルトの名無しさん [] 02/12/16 23:25 AAS
rawソケットはどうして管理者権限でなければ使えないんでしょうか・・・
960
(1): デフォルトの名無しさん [sage] 02/12/16 23:43 AAS
DoSアタックとかに使えるからでないの.
961
(1): デフォルトの名無しさん [sage] 02/12/16 23:48 AAS
あ、技術的な問題じゃなかったんですか
962
(1): デフォルトの名無しさん [sage] 02/12/17 00:01 AAS
詳しくはないけど、セキュリティ的に問題アリアリなんでないのかな。
あるいはその可能性があるとか。
963
(1): デフォルトの名無しさん [sage] 02/12/17 00:03 AAS
bpfがrootにしか使えないのと似たようなもんだろ
964: デフォルトの名無しさん [sage] 02/12/17 00:04 AAS
>>960-962
パケット盗み見から始まって、IP / MAC アドレス詐称など何でもありありだからだよーん。
965: デフォルトの名無しさん [] 02/12/17 10:45 AAS
>sock_wait_established
>This macro has been deprecated in Dynamic C version 7.20.
>このマクロは動的なCバージョン7.20で大いに非難されました。

質問です。これは使わない方が良いということでしょうか。
たしかにsock_err ラベルにgotoされると構造化し難いですが。
代替関数は何になりますか?
1-
あと 36 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.029s