为什么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:);
...全文
123 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
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)

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧