火曜日, 6月 27, 2006

[Port][NW] SocketHandle ソケットハンドル

「なぁ、ソケットハンドルなんだけどさぁ」
と問いかけられて、「なんすか、ソレ」としか返せなかった、
プログラム歴半年(この文章書いている人)。

しらべるしかないじゃない。※1


4.ソケットハンドル値は必ず 16 以下だと仮定すること。恐ろしく間違いの泥沼。
http://www.kt.rim.or.jp/~ksk/wskfaq-ja/articles/lame-list.html#item4
ザ・間違いリスト

理由: ソケットハンドル値として取りうることのない値は、 winsock.h で定義されている INVALID_SOCKET だけです。その他の SOCKET 型の取りうる値は全て正しい獲物であり、アプリケーションはこれを取り扱わなくてはなりません。いずれにせよ、ソケットハンドルの値は隠蔽されるべきものであり、アプリケーションはいかなる理由があっても、特定の値に依存してはいけません。
代案: ソケットハンドルの値は、0 も含めて全ての値を取りうるものとして扱う。また、socket() や WSASocket() の呼出しごとに違ったソケットハンドル値が返ってくることを期待しないこと。ソケットハンドルは、Winsock の実装によっては再利用されることが有り得ます。



winsock.h の場所
C:\cygwin\usr\include\w32api
C:\Program Files\Microsoft Visual Studio .NET\Vc7\PlatformSDK\Include
C:\Program Files\Microsoft Visual Studio\VC98\Include
#windowsのOSそのものには組み込まれていない?

winsock.h の INVALID_SOCKET のところの記述

#define INVALID_SOCKET (SOCKET)(~0)

・・・・・ごめんなさい、意味がわかりません。

INVALID_SOCKET と ソースに書かれていた時、
その後の文字列と置換するよう、
コンパイラが読み替えてくれる所だと思うんだけど、
「~」ってなに?「~」がついた「0」ってなに?
「(SOCKET)」は、SOCKETの型にキャストしてるんだと思うんだけど。

この「~」(うにょと命名)が、どういう役割をしているか謎。
うまく検索できねぇ・・・・・

<google 検索 キーワード>
~0
"~0"


※1 http://logipara.com/
上記HPの管理人の最近の口癖。

0 件のコメント: