そんなに支離滅裂かなあ。バックグラウンドにある
概念を素直に括り出しただけだと思うけど。
支離滅裂だと思ってる人は、実はソケットの概念を
ちゃんと理解してない希ガス。
UNIX の socket API なんて、4.2BSD の時に定義
されてからほとんど変わってないので、
>>946の
言うようなその場しのぎの拡張なんてものは、
そもそもないわけだし。(WinSock は知らん)
あと、handbook もいいけど、
/usr/share/doc/psd/20.ipctut/
/usr/share/doc/psd/21.ipc/
も読んだ方がいいような。
*BSD系の場合ね。Linux は知らん。
まあUNP読めばいいんだけどね。和訳もあるわけだし。
> バックグラウンドにある概念を素直に括り出した
言い換えれば、要するに「低水準」「そのまんま」「剥き出し」
なインタフェースなんだよな。
昔から概念が存在するファイルのようには、高度に抽象化・単純化された
インタフェースにはなってない。
ソケットプログラミングは、open/read/write/closeでは済まずに
皆にioctlを強要するようなイメージ。
もっと標準に近いところで、Java程度に手軽なC/C++ライブラリが
あるといいのだが。
あんまし単純化されちゃうと面白みがなくなる
んなことない。
普通socket/getaddrinfo/connect/read/write/closeだけで
済みますよ。openがsocket/getaddrinfo/connectに変わった
だけで、ファイルアクセスとレベルは変わらん。
>>955 おめでたいな・・・
趣味レベルにとどめとけよ
やりたいことにもよるが、
>>955の範囲で書けるプログラムも
多いでしょ。たとえば古き良き finger なんて、実際その程度
のことしかしてない。
それ以外のAPIが必要なのは、socketシステムコールがファイル
アクセスシステムコールよりも低レベルだからじゃなくて、
背後にある概念がファイルアクセスよりも複雑だからだな。
レベルの高い低いは似たようなもん。
>>945 >ろくなドキュメントをそろえもせずに
>口を開けば find grep man
じゃお前の部署で書いて晒せ
うちには予算が無い いや~ん(//∇//)
>>953 凝ったことしなくてイイんなら、ディスクリプタを fdopen に突っ込めば
イイんじゃないの?俺は使ったことないから知らんけど。
>>959 実際、4.3BSD以降の finger は、まさに fdopen() にソケットを
渡してる。
ただし stdio の実装がタコタコなOSだと駄目かも。
例えば SVR4 の 4.0.3 以降、4.1 より前では、fread() で
partial read を正しく処理してないため、ベンダが独自に
直してない限り fread() を使うと問題が出る筈。
むしろなんでもファイルにしようという概念が好かん
fd扱ってても結局ファイル扱ってるのかパイプ扱ってるのか
ソケット扱ってるのか意識しなけりゃならないし
生成するときはそれぞれゴチャゴチャと設定が必要だけど
とにもかくにも作ってしまえばあとはまあそれなりに
ディスクリプタを等価に扱える ってのは便利だよな
問題は生成時の処理のデタラメ加減なわけだが
>>961 「ファイル」って…「入出力ストリーム」です。
デバイスも入出力ストリーム・・・
と言えなくもないか
あんなに簡潔なAPIを、ゴチャゴチャとかデタラメとか
表現する感覚が理解できん。
ストリームをディスクリプタで抽象化するという概念を
ちゃんと理解していたら、あれ以外の選択肢は、ほぼ
あり得ないのは明らかなのに、そういうことも分かって
ないのね。かわいそう。
struct sockaddrをベースクラスのように扱って、サイズを見て判断
みたいなのはCだからしょうがないところはあるが、
キャストだらけの汚いコードを書かされる元
ユーザコード側の至る所でhtons, htonlなどを使う必要があるが、あれも
もっと減らせるだろ
プロトコルスタック側で変換かけりゃいいんだから
インターフェースは簡潔なんだけどね
getaddrinfo(3) と sockaddr_storage を使ってれば、いまどき
キャストなんて要らないよ。
sockaddr は opaque な型として扱うので、sockaddr_in みたいな
構造を触る必要もない。当然 htons や htonl も全く使わない。
感覚古すぎるよ...
いきあたりばったりの拡張であることは事実
windowsのapiよりは…
>>970 socket 関係のシステムコールは 4.2BSD の時に今のものと
ほぼ全く同じものが実装されて、その後、インターフェース
は特に変わってないんだけど。
自分が無知なのを自覚してないのか、それとも分かってて
デマを流しているのか、どちら?
まあ当時はIPv6とかは無かったわなあ
で、IPv6 でも、4.2BSD で設計されたシステムコールが
そのまま全く同じように使えると。こういうのは、普通
いきあたりばったりじゃなくて、先見の明があるって言
うよね。
getaddrinfo()とかは新しいでしょ
あ、あれはシステムコールじゃないか
まあでも、アドレスファミリー・プロトコル依存性だとか
>>966の言う汚さを隠蔽するために新しいインタフェースが導入されてるわけで
>>968の言うような世界はもともとは無かった訳だから
>>970の言うことも必ずしも間違いとは言えまいよ
そう? いきあたりばったりってのは完全に間違いだと思うけど。
右に左にフラフラしてたわけじゃなくて、まっすぐ自然な拡張
だと思うよ。システムコール自体は、最初っからプロトコル独立
になってたわけだしね。
プロトコル独立だけど透明ではなかったわけだ
だから後で隠蔽するラッパーを作る必要があった
>>978 ひょっとして全然分かってないんじゃない?
IPv6を利用する場合のAPIは、システムコールに
ついては以前と全く同じで、ラッパーでも何でも
ないよ。
ライブラリ関数として実装されていた以前の
gethostbyname(3)/gethostbyaddr(3) が、別の
ライブラリ関数である getaddrinfo(3)/getnameinfo(3)
に置き換わるだけ。これも、置き換えであってラッパー
じゃない。
ライブラリ関数=システムコールのラッパーという意味で書いたんだけど
まあどうでもいいや
置き換えは置き換え。ようするにインタフェースが代わったのは事実だよね
昔のままでは対応できなかったと。
gethostbyname
getipnodebyname
gethostbyaddr
とコロコロかわってますな
gethostbyname(3) や getaddrinfo(3) を
システムコールのラッパーと考える奴は
根本的にモノを分かってないと思われ。
>>981 gethostbyname()とgethostbyaddr()を並べて「コロコロかわってる」って
言うわけね。(w
とりあえず、君はプログラミングはしない方がいいよ。
いいよ俺はアフォでもモノがかわってなくても。
でも、インタフェース変わってるのは事実でしょ。
で、なぜか昔からかわってないんだと主張する香具師もいれば
>>968みたいに、新しいインタフェースなら綺麗なんだと主張する香具師もいる
>>982 getaddrinfoは本質的にはgethostbyname, gethostbyname2のラッパーじゃないのか
アドレスファミリの差異その他を隠蔽するための
inet_addr()のように使い物にならないとされて消えたのもあるな
システムコールは昔から変わってないし、
ネームサービスのためのライブラリ関数は、昔の
プロトコル依存した関数から、プロトコル独立の
きれいな関数に変わった。
全然矛盾してないと思うけど?
いきあたりばったりっていうのは、拡張に拡張を重ねて、
迷路みたいになったインターフェースことを言うんだよ。
昔よりずっと見通しが良くなったのを指して、いきあた
りばったりと表現するってのは、プログラミングだけ
じゃなくて日本語のセンスにも問題があるのでは?
なんだ単に「いきあたりばったり」って言葉にこだわってるだけか
もしかして?
それこそどうでもいい話だな
size_tがsocklen_tに変わったりとか
まあ色々あるわな
ネームサービス周りだけじゃないだろ
>>981 gethostbyaddrじゃなくて
getaddrinfo
だった
まぁどうでもいいな
しかしなんでそんなに必死なのか
>>989 size_t が socklen_t になったんじゃなくて、
int を使ってる OS と size_t を使ってる OS があった
ので、共通のソースにできるように socklen_t が定義
されただだよ。
つまり実際には型は変わってない。名前が統一されただけ。
行き倒れマッタリ
ひとり基地害がいるね
どこどこ?
商用UNIXではシステムコール並の扱いだけどね。
それが何か?
close(13);
1001 :
1001:
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。