社区
C语言
帖子详情
为什么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
打赏
收藏
为什么sock<0
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:);
复制链接
扫一扫
分享
转发到动态
举报
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)
sock
et 中
SOCK
_STREAM 和
SOCK
_DGRAM的区别?
sock
_stream 是有保障的(即能保证数据正确传送到对方)面向连接的
SOCK
ET,多用于资料(如文件)传送。
sock
_dgram 是无保障的面向消息的
sock
et , 主要用于在网络上发广播信息。
SOCK
_STREAM是基于TCP的,数据传输比较有保障。
SOCK
_DGRAM是基于UDP的,专门用于局域网,基于广播
SOCK
_STREAM 是数据流,一般是tcp/ip协议的编程,
SOCK
_DGRAM分是数据报,是udp协议网络编程 参考文章:
SOCK
_STREAM和
SOCK
_DGRAM两种类型的区别
SOCK
_STREAM (TCP)、
SOCK
_DGRAM (UDP)、
SOCK
_RAW
PF_PACKET
SOCK
_STREAM (TCP)、
SOCK
_DGRAM (UDP) 工作在传输层,
SOCK
_RAW 工作在网络层 网络层:
SOCK
_RAW 可以处理ICMP、IGMP等网络报文、特殊的IPv4报文、可以通过IP_HDRINCL套接字选项由用户构造IP头 传输层TCP套接字的名字:
SOCK
_STREAM; 特点:可靠,开销大 传输层UDP套接字的名字:
SOCK
_DGRAM; 特点:不可靠(局网内还是比较可靠的),开销小。 项目中经常使用
SOCK
_RAM类型进行数据包通信。使
TCP的request_
sock
与
sock
request_
sock
TCP服务端在接收到SYN报文时,调用conn_request回调处理,最终调用了tcp_conn_request函数,其分配一个request_
sock
(tcp_request_
sock
)结构体。request_
sock
之后用于TCP的三次握手,与正常的
sock
结构相比,request_
sock
仅包含一个相同的
sock
_common结构:struct request_so...
sock
_raw和
sock
_packet
套接字
SOCK
_RAW
SOCK
_PACKET 实际上,我们常用的网络编程都是在应用层的报文的收发操作,也就是大多数程序员接触到的流式套接字(
SOCK
_STREAM)和数据包式套接字(
SOCK
_DGRAM)。而这些数据包都是由系统提供的协议栈实现,用户只需要填充应用层报文即可,由系统完成底层报文头的填充并发送。然而在某些情况下需要执行更底层的操作,比如修改报文头、避开系统协议栈等。这个时候就需要使用其他的方式来实现。 一原始套接字 原始套接字(
SOCK
_RAW)是一种不同于
SOCK
_STREA...
mysql.
sock
是什么_mysql.
sock
到底存了什么信息?
mysql.
sock
到底存储了什么东西?mysql.
sock
作为mysql的套接字一般用于本地连接数据库,在速度上优于TCP/IP连接。一般放置在/tmp/mysql.
sock
目录下,我们先查看下它的内容:[root@ tmp]# ll -i | grep mysql85 srwxrwxrwx 1 mysql mysql 0 Apr 18 15:03...
C语言
70,020
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章