我试图在一定数量的s中回复客户的回答。我怎么能这样做?我的意思是我有那个代码
unsigned secondsElapsed = 0;
while(secondsElapsed <= TIMER){
char tBuffer[32];
if (recv(clientSocket, tBuffer, sizeof(tBuffer), MSG_PEEK | MSG_DONTWAIT) == 0){
myPlayer->dcPlayer();
\\ More stuff to do if player is dissconected
\\ But if is not dc, and is typing, how can i check my socket to see
\\ if i have an answer there to read, else i`ll increment
\\ secondsElapsed until is equal to TIMER or until i get an answer
\\ from my client.
usleep(1000000);
secondsElapsed++;
}
所以,问题是:我如何检查我的客户是否给我一个答案?如果我尝试阅读,那么我的程序将被卡住,我将无法增加秒数。
答案 0 :(得分:4)
这里有很多选择。首先,您可以使用非阻塞套接字(通常不是那么好的解决方案)。更好的选择是使用操作系统提供的轮询/异步通知机制 - 例如,* Nix用户可以选择select
,poll
和epoll
,而Windows则可以选择{&#39;自己的异步事件通知API,例如,I / O完成端口,如下所述:https://msdn.microsoft.com/en-gb/library/windows/desktop/aa365198(v=vs.85).aspx
答案 1 :(得分:0)
您可以使用select()
(或* Nix系统上的pselect()
或(e)poll()
)了解数据何时可用,然后再拨打recv()
(或{{1} })阅读它,例如:
read()