木村です。

>#VC++ 4.0 で
>#sock = socket(PF_INET, SOCK_STREAM, 0);
>#fp = fdopen(sock, "r");
>#が必ず失敗します。これじゃどうしようもないですよね。

fdopenは nt.cの fdopenに変わってますよね?

fdopenから返る直前の GetLastError()でなにが返ってきてますか? 
Winsockが初期化されていない以外のエラーであれば WSAGetError
(だったかな?)でエラーコードを確かめてみて頂けませんか?

そのチェックは通り抜けてるとなると、メモリ確保に失敗してない
とNULLは返らないと思います。

-- 
木村浩一
    e-mail koichi-ki / aix.or.jp
           kkimura / pure.cpdc.canon.co.jp