常见socket错误返回码.pdfVIP

  • 23
  • 0
  • 约2.19万字
  • 约 28页
  • 2020-11-14 发布于四川
  • 举报
常见 socket 错误返回码 常见 SOCKET 错误返回码(转) WSAEINTR (10004) 被中断的系统呼叫 当以阻拦式进行的 WinSock 函式被 WSACancelBlockingCall() 中 断的时候, 这个阻拦式函式会得到 WSAEINTR 这个错误讯息。 读者 要注意的是,当你的程式有用 WSACancelBlockingCall 去中断阻 拦式函式的时候, 你必须为这个阻拦式函式写处理 WSAEINTR 错误 讯息的程式码,否则你的程式可能会出现些无预期的错误。 原则上,所有能以阻拦式进行的函式都可能会发生这个错误。 WSAEBADF (10009) 错误的档案代码 柏克莱 socket 介面中,档案描述子和 socket 描述子是相通的,开 启 socket 可以想像成开启一个档案。 WSAEBADF 在柏克莱 socket 介面的意义是指错误的 socket 描述子,这个错误的 socket 描述子可能是未经开启的 socket 或是以关闭的 socket 。 在 WinSock 中有个相通的错误代码 WSAENOTSOCK ,用来指定错 误的 socket 描述子。详细说明请参考 WSAENOTSOCK 部分。 WSAEACCES (10013) 无此权限 对于柏克莱 socket 介面函式,这个错误发生的原因通常是开启一个 不具有开启权限的档案或 socket 。例如在 UNIX 上,一般的使用者 不能开启 SOCK_RAW 的 socket ,通常是超级使用者 (super user) 才有此权限。如果一般的使用者企图开启 SOCK_RAW 的 socket , 将会得到这个错误讯息。 对于 WinSock API 函式介面,发生此错误的函式有二: send() 和 sendto() 。当利用 send() 或 sendto() 传送资料的时候,将目的位址 设成广播位址 ( broadcast address ) ,但是并未呼叫 setsockopt() 设定 SO_BROADCAST 选项时便会发生 WSAEACCES 错误。 WSAEFAULT (10014) 错误的记忆体位址 系统侦测出使用错误的记忆体位址。呼叫 WinSock 函式时,常常会 有参数是以指标的方式传入,这个指标可能是指向一个结构,如 sockaddr_in 结构,或是指向一个资料缓冲区。当程式不小心传入 一个错误记忆体未指的指标时,就会发生 WSAEFAULT 这个错误。 此外,当指标所指向的记忆体区块太小的时候,也会发生这个错误。 WSAEINVAL (10022) 参数错误 如果传入不正确的参数给 WinSock 函式的话,会导致 WSAEINVAL 这个错误。如果参数是一个结构的指标, 此结构内容填入不正确的值, 也会导致这个错误。例如, shutdown() 函式的 how() 参数只能是 0、 1 或 2 ,若是设定成其他数值,就会出现这个错误。 在网

文档评论(0)

1亿VIP精品文档

相关文档