簡體   English   中英

試圖從套接字讀取但它阻止了 while 循環

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM