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