为什么sock<0

violetci 2001-02-06 01:31:00
sock=socket(AF_INET,SOCK_STREAM,0);
if (sock<0){
perror("error socket id:");
exit(1);
}
else {
printf(" %d",sock);
}
程序执行的时候,sock判断小于0,然后执行了perror(error socket id:);
...全文
64 点赞 收藏 2
写回复
2 条回复
violetci 2001年02月07日
嗯,这点你说得很对
不过我的只要问题不是出在这里,主要是因为没有调用WSAStartup()

你能介绍一点关于sock编程上面的书么?
我看的书上面的例程都不正确
回复 点赞
niki 2001年02月06日
在UNIX中所有句柄包括套接口(socket)句柄,都是非负的短整数,而且一些应用程序把这一假设视为真理(如所说你的程序)。Windows Sockets句柄则没有这一限制,除了INVALID_SOCKET不是一个有效的套接口外,套接口可以取从0到INVALID_SOCKET-1之间的任意值。

而在winsocket中,

typedef unsigned int u_int;
typedef u_int SOCKET;
#define INVALID_SOCKET (SOCKET)(~0)

(/*ie. 0xffffffff*/)

所以你的程序在windows下不能正常运行,将 sock < 0 改为 sock == NVALID_SOCKET
则在windows/unix下均可正常运行。(unix下INVALID_SOCKET好象是-1)
回复 点赞
发动态
发帖子
C语言
创建于2007-09-28

3.2w+

社区成员

24.0w+

社区内容

C语言相关问题讨论
社区公告
暂无公告