C 我如何检查它是否在插座中可用?
我编写了一个简单的应用程序,用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> ...
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
选项,这完全取决于您的需求、您的应用程序架构。。。太宽了,太浪费带宽了。