Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 我如何检查它是否在插座中可用?_C_Sockets_Connect_Eof_Read Write - Fatal编程技术网

C 我如何检查它是否在插座中可用?

C 我如何检查它是否在插座中可用?,c,sockets,connect,eof,read-write,C,Sockets,Connect,Eof,Read Write,我编写了一个简单的应用程序,用C语言在两台计算机之间提供连接。我在套接字中同时读写时遇到了一个问题。我可以通过getch()检查用户是否按了任何键,但我不知道如何检查它是否在套接字缓冲区中。当我使用read()函数时,它会一直等到套接字中有东西。我想检查套接字缓冲区,然后使用read(),但找不到任何函数/标志来检查。可能是这个问题的不同解决方案,可能是使用另一个线程读取?您可以使用sys/ioctl.h文件的方法ioctl: #include <sys/ioctl.h> ...

我编写了一个简单的应用程序,用C语言在两台计算机之间提供连接。我在套接字中同时读写时遇到了一个问题。我可以通过
getch()
检查用户是否按了任何键,但我不知道如何检查它是否在套接字缓冲区中。当我使用
read()
函数时,它会一直等到套接字中有东西。我想检查套接字缓冲区,然后使用
read()
,但找不到任何函数/标志来检查。可能是这个问题的不同解决方案,可能是使用另一个线程读取?

您可以使用
sys/ioctl.h
文件的方法
ioctl

#include <sys/ioctl.h>

...

int count;
ioctl(fd, FIONREAD, &count);
#包括
...
整数计数;
ioctl(fd、FIONREAD和计数);

参考资料:

带有超时的
select()
函数是一种在数据到达套接字时获取通知的方法。您需要尝试建立异步套接字。请检查@Mautokar:您至少应该提供一个示例代码作为开始。您可以使用异步I/O或线程或非阻塞模式,或者使用
ioctl()
FIONREAD
选项,这完全取决于您的需求、您的应用程序架构。。。太宽了,太浪费带宽了。