簡體   English   中英

MSG_PEEK的C'recv'不返回-1

[英]C 'recv' with MSG_PEEK doesn't return -1

我正在編寫C函數來檢查客戶端的套接字連接是否可用。 我在MSG_PEEK中使用“ recv”功能,不更改輸入緩沖區。

但是,當客戶端關閉套接字連接時,“ recv”應該返回-1,但不會。 客戶端關閉后,下面函數中的“ recv”始終返回0。

char is_avail(int connection) {
  char buffer;

  int result = recv(connection,&buffer,1,MSG_PEEK);
  if (result<0)
    return 0;
  else
    return 1;
}

有什么理由嗎? 我也想將MSG_PEEK與MSG_WAITALL結合使用。 我試過了:

recv(connection,&buffer,1,MSG_PEEK|MSG_WAITALL);

但這不會生效。

正確關閉套接字后,recv不會返回-1,而是返回“ 0”。

0->正常關閉套接字

-1->發生實際錯誤

> 0->數據已讀取。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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