[英]Trying to read from socket but it blocks the while loop
我想構建一個 while 循環,無論是否發送消息,它都會從非阻塞套接字連續讀取。 我使用 read 函數從套接字讀取,但是當它到達 read() 時,while 循環被阻塞。 我還需要使讀取非阻塞嗎?
while(1){
char client_response[256];
client_response = (char*) malloc(256);
int reader = read(socket_fd, server_response, sizeof(server_response));
printf("passed reader\n"); // this never shows
if(reader < 0){
perror("read fails\n");
return -1;
}
sleep(1);
}
我不確定您如何配置非阻塞套接字。 但是步驟在 Windows 和 Unix 之間是不同的。 如果您能告訴我操作系統,我可以提供有關非阻塞套接字配置的更多詳細信息。
下面是一種更平台中立的方式,以非阻塞方式輪詢套接字,而無需顯式配置非阻塞套接字。 使用MSG_DONTWAIT
標志(如果可用)或MSG_PEEK
標志作為查看是否可以進行調用的提示。
另外,我們只使用recv
而不是read
因為這是一個套接字。
#ifdef MSG_DONTWAIT
int reader = recv(socket_fd, server_response, sizeof(server_response), MSG_DONTWAIT);
#else
int reader = recv(socket_fd, server_response, sizeof(server_response), MSG_PEEK);
if (reader > 0)
{
reader = recv(socket_fd, server_response, sizeof(server_response), 0);
}
#endif
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.