以下はhttp://curl.haxx.se/libcurl/c/sendrecv.htmlのサンプル コードの一部です。
static int wait_on_socket(curl_socket_t sockfd, int for_recv, long timeout_ms)
{
struct timeval tv;
fd_set infd, outfd, errfd;
int res;
tv.tv_sec = timeout_ms / 1000;
tv.tv_usec= (timeout_ms % 1000) * 1000;
FD_ZERO(&infd);
FD_ZERO(&outfd);
FD_ZERO(&errfd);
FD_SET(sockfd, &errfd); /* always check for error */
if(for_recv)
{
FD_SET(sockfd, &infd);
}
else
{
FD_SET(sockfd, &outfd);
}
///* select() returns the number of signalled sockets or -1 */
res = select(sockfd + 1, &infd, &outfd, &errfd, &tv);
return res;
}
Linux では問題なく動作しましたが、Visual Studio 2010 に移行すると、select() 関数について不平を言います。すべての cURL ライブラリ/dll を正しくコンパイルおよびリンクし、http 要求としてダウンロードしました。
しかし、ソケットの select() 関数を使用しようとすると、次のエラーが表示されます。
error LNK2028: unresolved token (0A00034C) "extern "C" int __stdcall select(int,struct fd_set *,struct fd_set *,struct fd_set *,struct timeval const *)" (?select@@$$J220YGHHPAUfd_set@@00PBUtimeval@@@Z) referenced in function "int __cdecl `anonymous namespace'::wait_on_socket(unsigned int,int,long)" (?wait_on_socket@?A0x7d9db21b@@$$FYAHIHJ@Z)
error LNK2019: unresolved external symbol "extern "C" int __stdcall select(int,struct fd_set *,struct fd_set *,struct fd_set *,struct timeval const *)" (?select@@$$J220YGHHPAUfd_set@@00PBUtimeval@@@Z) referenced in function "int __cdecl `anonymous namespace'::wait_on_socket(unsigned int,int,long)" (?wait_on_socket@?A0x7d9db21b@@$$FYAHIHJ@Z)
また、select() 関数は Windows と互換性があるようです: http://msdn.microsoft.com/en-us/library/ms740141(VS.85).aspx
何か不足していますか?誰かがこの問題を回避する方法を教えてもらえますか?
ありがとう、 -- ルディ