INTERNET_INVALID_PORT_NUMBER

GetHttpConnection 関数の第2引数のデフォルト引数が INTERNET_INVALID_PORT_NUMBER になっているのは理解しがたい面がある。
ここは本来は INTERNET_DEFAULT_HTTP_PORT であるべきである。しかし、どちらを使っても同じように動作はするようである。

資料 // Internet APIs // manifests #define INTERNET_INVALID_PORT_NUMBER 0 // use the protocol-specific default #define INTERNET_DEFAULT_FTP_PORT 21 // default for FTP servers #define INTERNET_DEFAULT_GOPHER_PORT 70 // " " gopher " #define INTERNET_DEFAULT_HTTP_PORT 80 // " " HTTP " #define INTERNET_DEFAULT_HTTPS_PORT 443 // " " HTTPS " #define INTERNET_DEFAULT_SOCKS_PORT 1080 // default for SOCKS firewall servers. ¶WinInet.hはPlatForm SDKのincludeディレクトリにある。

INTERNET_INVALID_PORT_NUMBER の「use the protocol-specific default」というコメントからすると、これを指定すると、使ったプロトコルに応じて「INTERNET_DEFAULT_***_PORT」のどれかになるということのようである。

すなわち、INTERNET_INVALID_PORT_NUMBERGetHttpConnection 関数で使われた場合は INTERNET_DEFAULT_HTTP_PORT が使われるということである。

こういう当惑させるようなことが起こるのは「INVALID」が実にまぎらわしいネーミングになっていることによる。
INVALID(無効の)どころか実際はその逆に何にでも使える万能の指定なのである。

- 2005/10/01 -







WinInetの使い(win_0452)
CInternetSession,GetHttpConnection,OpenRequest,AddRequestHeaders,SendRequestなどの使用例。



東洋的な精神風土、禅の世界などには「空(くう)」という考え方がある。何もない「空」は「無」ではなく、何にでもなりうる、何にでも変わりうるという点では、積極的な意味を持つ観念である。さしずめ、ここのINVALIDもそれに近いのかもしれない。