0

以下は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

何か不足していますか?誰かがこの問題を回避する方法を教えてもらえますか?

ありがとう、 -- ルディ

4

1 に答える 1

0

Microsoftソケットライブラリとリンクする必要があります。プロジェクト内でWs2_32.libを使用するようにリンカーに指示します。Visual Studio 2010で、このライブラリを[プロジェクト]->[プロパティ]->[リンカー]->[入力]->[追加]に追加します。依存関係。

または、次のコードを使用してこのライブラリをコード内に追加します。

#pragma comment(lib, "Ws2_32.lib")

于 2013-03-02T08:12:53.927 に答える