[過去ログ] ネットワークプログラミング相談室 Port4 (1001レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
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だと知りました・・・いろいろ勉強不足。ごめ。もっと修行します。
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 を指定した状態が、それに相当するのではないかと。
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(実際は同じ値)を返すらしい。
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.033s