在 Winsock 应用程序中,套接字描述符不是文件描述符,并且必须与 Winsock 函数一起使用。
在 UNIX 中,套接字描述符由标准文件描述符表示。 因此,UNIX 上的套接字描述符可以传递给任何标准文件 I/O 函数(例如读取和写入)。
此外,UNIX 中的所有句柄(包括套接字句柄)都是小型的非负整数,一些应用程序假设这是真的。
除了值INVALID_SOCKET不是有效的套接字之外,Windows 套接字句柄没有限制。 套接字句柄可能采用范围 0 到 INVALID_SOCKET–1 的任何值。
由于 SOCKET 类型为无符号,因此从中编译现有源代码(例如,UNIX 环境可能会导致编译器警告有关已签名/无符号数据类型不匹配)。
例如,这意味着,如果 套接字 和 接受 函数返回时检查错误,则不应通过将返回值与 –1 进行比较,或查看该值是否为负值(UNIX 中的常见和法律方法)。 相反,应用程序应使用 Winsock2.h 头文件中定义的清单常量INVALID_SOCKET。 例如:
典型的 BSD UNIX 样式
s = socket(...);
if (s == -1) /* or s < 0 */
{/*...*/}
首选样式
s = socket(...);
if (s == INVALID_SOCKET)
{/*...*/}
相关主题