FIONBIO を設定する VxWorks の標準的な方法は、 withioctl()
ではなくwithfcntl()
です。on
FIONBIO のドキュメントには、データ型がないため、明らかにコンパイルされない例としてこれが示されています。
on = TRUE;
status = ioctl (sFd, FIONBIO, &on);
このようなものを使用するように言っているネットの周りの使用例を見てきました(これは本質的に同じことです):
int on = 1;
ioctl(fd, 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)'