當使用`ioctl()`函數和`FIONREAD`參數來判斷`accept()`函數返回的socket文件描述符(`socketfd`)時,如果返回錯誤并設置了錯誤碼`errno`,可以通過檢查`errno`的值來確定具體的錯誤原因。
以下是一些常見的`errno`錯誤碼和對應的錯誤原因:
1. `EBADF`(Bad file descriptor):`socketfd`參數無效,可能是因為該文件描述符未打開或已關閉。
2. `EINVAL`(Invalid argument):`socketfd`參數無效,可能是因為該文件描述符不是一個有效的套接字。
3. `ENOTSOCK`(Socket operation on non-socket):`socketfd`參數無效,可能是因為該文件描述符不是一個套接字。
4. `ENOTCONN`(Transport endpoint is not connected):`socketfd`參數無效,可能是因為該套接字未連接到遠程主機。
5. `ENOTTY`(Inappropriate ioctl for device):`FIONREAD`參數無效,可能是因為該操作不適用于該設備。
需要注意的是,`ioctl()`函數和`FIONREAD`參數的使用可能因不同的操作系統和套接字庫而有所差異,因此在具體的情況下,可以參考相關的文檔或手冊以獲取準確的錯誤碼和錯誤原因。