C++ 如何使用ioctl()在VxWorks中的套接字上设置FIONBIO?

C++ 如何使用ioctl()在VxWorks中的套接字上设置FIONBIO?,c++,sockets,vxworks,C++,Sockets,Vxworks,VxWorks设置FIONBIO的标准方法是使用ioctl(),而不是fcntl()。FIONBIO的文档以此为例,显然不会编译,因为上的没有数据类型: on = TRUE; status = ioctl (sFd, FIONBIO, &on); 我在网上看到过这样的例子,即使用类似的东西(本质上是一样的): 但是,文档中说,ioctl()的原型是ioctl(int,int,int),我遇到了无法将int*转换为int的错误。如果我将该值作为int传递,我只会得到一个致命的内核任务级异

VxWorks设置FIONBIO的标准方法是使用
ioctl()
,而不是
fcntl()
。FIONBIO的文档以此为例,显然不会编译,因为上的
没有数据类型:

on = TRUE;
status = ioctl (sFd, FIONBIO, &on);
我在网上看到过这样的例子,即使用类似的东西(本质上是一样的):

但是,文档中说,
ioctl()
的原型是
ioctl(int,int,int)
,我遇到了无法将
int*
转换为
int
的错误。如果我将该值作为
int
传递,我只会得到一个致命的内核任务级异常

这是我当前的代码:

int SetBlocking(int sockfd, bool blocking)
{
  int nonblock = !blocking;
  return ioctl(sockfd, FIONBIO, &nonblock);
}
返回错误:

error: invalid conversion from `int*' to `int'
initializing argument 3 of `int ioctl(int, int, int)'
这一联系表明

 return ioctl(sockfd, FIONBIO, (char*) &nonblock);

看起来我只需要将
int*
转换为
int
。我不能使用c风格的强制转换,所以我使用了
重新解释强制转换

int SetBlocking(int sockfd, bool blocking)
{
  int nonblock = !blocking;

  return ioctl(sockfd,
    FIONBIO,
    reinterpret_cast<int>(&nonblock));
}
int-SetBlocking(int-sockfd,bool-blocking)
{
int nonblock=!阻塞;
返回ioctl(sockfd,
菲昂比奥,
重新解释铸件(非块);
}

很棒的链接!我真的很想知道她死了。可能是替代品
int SetBlocking(int sockfd, bool blocking)
{
  int nonblock = !blocking;

  return ioctl(sockfd,
    FIONBIO,
    reinterpret_cast<int>(&nonblock));
}