Linux系統程式設計下,一些系統呼叫可能因為我們錯誤地認為回傳資訊而造成錯誤。
下面是一個判斷是不是該繼續接收資料的例子。
if (!((byteRead = recv(sock, buffer, bufsize, 0))))break;
在這個判斷式中存在一個陷阱,在發生recv錯誤的時候,如Connection Reset by Peer,recv會回傳-1,但是不足以跳出這個迴圈。會造成的錯誤是,byteRead會拿-1來進行運算,造成錯誤結果。
下面是比較正確的寫法,或是偵測perror()來得知是否現在是錯誤。
if (!((byteRead = recv(sock, buffer, bufsize, 0)) > 0))break;
沒有留言:
張貼留言