C/C++ recv() with timeout
C/C++ recv() with timeout
希望有人能帮助我。如果我的插座无法在一定时间内接收数据,我想实现某种超时...我在网上查找了方式,但是我查看的示例没有RECV()在像我这样的一段时间内,他们通常只会收到正在等待的整个缓冲区。也许我的效率不是很高,有人可以将我指向接收所有数据的更好方向。
要接收的字符串不是固定的长度,这就是为什么我一次接收1个,因为我不知道字符串有多大。如您所见,我的recv()将接收数据,直到找到文本字符()的结尾为止。我发现的select()示例会在呼叫接收之前使用select,但是我是否应该为每次循环的每次操作吗?或者也许在我什至输入WALE循环之前致电Select()?
无论如何,任何帮助都将受到赞赏。
string recv_data(int socket){
bool endfound = false;
char temp[1];
string recvstring ;
while(endfound == false)//receives 1 character at a time until ETX(x03)character is found
{
if(recv(socket,temp,sizeof(temp),0)<0)
{
perror("error in recv data");
}
if(memchr(temp,'x03',1) != NULL)
{
endfound = true;
}
recvstring += temp;
temp[0] = 0;
}
return formatting(recvstring);
}
您必须将套接字放入非阻滞模式,然后使用poll()。
poll()技术上也可以在常规阻塞插座上工作;但是,我的经验是,语义和种族条件上有各种细微的差异,当将Poll()与阻塞插座使用Poll()时,为了获得最佳可移植性,我一直使用非阻滞模式插座,以及Poll(),并仔细检查从recv()或read()。
返回值一些Google Food for您:fcntl(),F_SETFL
,O_NONBLOCK
。
相关文章:
- Problems with std::cin.fail()
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 这对"With a stackless coroutine, only the top-level routine may be suspended."意味着什么
- Boost.TEST with CLion: "Test framework quit unexpectedly"
- 避免碎片化的ClientHellos with OpenSSL (DTLS)
- Issues with Win32 ReadProcessMemory API
- Qt with WinAPI MouseProc
- [[maybe_unused]] with structured_binding?
- Issue with WriteProcessMemory
- OpenCV RTP-Stream with FFMPEG
- "Unable to start debugging. No process is associated with this object." - 在Visual Studio Code中使用GDB
- std::adjacent_difference with std::chrono time_point
- DLL Made with CMake 使程序崩溃
- QtCreator with C 库中的链接器问题
- SHBrowseForFolder with BIF_BROWSEFORCOMPUTER and SHGetPathFr
- specialized std::default_delete with QQmlComponent
- VS2019 - Sudo Remote Debugging on Linux with Cmake project
- boost:asio::read or boost:asio::async_read with timeout
- C/C++ recv() with timeout
- VideoCapture select timeout with OpenCV 3.0.0-rc1