微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Android / Linux ioctl FIONREAD失败

我正在将一些(与套接字有关的)Windows C代码移植到Linux / Android,我遇到了ioctl命令的问题:

unsigned long u; if(sockfd != -1 && !ioctl(sockfd,FIONREAD,&u)) { return((long) u); } ... // throw exception

当我检查errno,我看到EINVAL,但我不明白为什么调用ioctl失败的这些论点。 我甚至试图宣布你是一个int,而它仍然失败。 我不知道什么是错的。 这个代码在Windows(ioctlsocket而不是ioctl)上工作得很好。

这里是Linux的一个分支:

socket(PF_INET,SOCK_STREAM,IPPROTO_TCP) = 3 bind(3,{sa_family=AF_INET,sin_port=htons(9099),sin_addr=inet_addr("0.0.0.0")},16) = 0 listen(3,5) = 0 ioctl(3,[1]) = -1 EINVAL (Invalid argument) write(2,"Exception code: 00000503,data: "...,52Exception code: 00000503,data: 00000000 ((null):0) ) = 52 shutdown(3,2 /* send and receive */) = 0 close(3) = 0 exit_group(1) = ?

移植到Android的Visual C / C + +,在Linux停留?

Unix函数gmtime_r的Windows相当于什么?

什么是WaitForMultipleObjects()和WSAEnumNetworkEvents()的等效的Linux API?

最近的Linux相当于Windows的CreateThreadpoolTimer

移植win32代码(windows.h)到linux

在FreeBSD v8.1上,Linux的“free”命令相当于什么

移植到Linux错误:“:”令牌之前的预期初始化程序

部署守护进程的过程和位置

如何编译C程序?

从iOS(iPad)到Windows的端口游戏

Linux在侦听套接字上不支持FIONREAD/SIOCINQ 。 看tcp(7) :

SIOCINQ返回接收缓冲区中排队的未读数据量。 该套接字不能处于LISTEN状态,否则会出现错误EINVAL )回。 SIOCINQ在<linux / sockios.h>中定义 。 或者,你可以使用<sys / ioctl.h>中定义的同义FIONREAD

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐