UNIX编程随笔(三十三)socket描述符

UNIX编程随笔(三十三)socket描述符
2010年04月20日
  socket用于运行在不同服务器上的进程之间通信(服务器通过网络相连),在同一服务器上的进程之间通信也可以,因此socket有着很好的扩展性。
  调用int socket(int domain, int type, int protocol);创建一个socket。socket作为一个抽象的通信端口,进程通过socket建立与其他进程socket的连接以及收发数据。domain指定通信的协议族,posix规定的取值如下:
  AF_INET IPV4协议族
  AF_INET6 IPV6协议族
  AF_UNIX UNIX域协议族
  AF_UNSPEC 其它协议族
  系统的实现还可以扩展定义其他协议族比如AF_IPX。
  type指定socket的类型,取值如下:
  [b]SOCK_DGRAM 默认UDP协议,消息分界,无连接,不可靠[/b]
  发送消息不需要建立连接,只需要往对端的socket发送消息即可,SOCK_DGRAM就像现实生活中的寄送邮件,写上递送的地址然后发送,信件可能丢失,也可能先发的信比后发的信后到。
  [b]SOCK_STREAM 默认TCP协议,面向连接的字节流,有序可靠,双向[/b]
  发送消息首先需要建立连接,连接建立好之后发送的消息为字节流(无边界,需要程序自行划分边界,发送消息的时候不需要再指定对方地址,因为在已经建立好的连接上进行交流,连接本身已经包含了双方的地址信息),SOCK_STREAM就像现实生活中的打电话,首先得拨通对方的号码建立起连接,然后进行双向的有序交流,先说的话先被对方听到。
  SOCK_SEQPACKET 默认SCTP协议,消息分界,面向连接,有序可靠,双向(在SOCK_STREAM的基础上增加了消息分界)
  SOCK_RAW 原始IP消息包 (可选)
  protocol指定对于前两个参数指定的协议族和socket类型的协议,一般传入0即可,表示使用默认协议。
  socket函数成功返回创建的[b]socket描述符(使用文件描述符实现)[/b],异常返回-1,虽然socket描述符是一个文件描述符,但是不是所有操作文件描述符的函数对socket描述符都适用,比如lseek。socket描述符可以调用dup进行复制,也可以调用close进行关闭。
  调用int shutdown (int sockfd, int how);deativate指定的socket的一条或者两条方向的数据传送,shutdown与close的区别是,close只是关闭了socket的一个socket描述符,因为socket描述符可以进行复制(文件引用计数),只有当对应于一个socket的所有socket描述符都被关闭之后,socket才会被系统释放,而shutdown允许deactivate一个socket的一条或者两条方向的数据传送,不管这个socket对应多少个socket描述符,how取值为:
  SHUT_RD 关闭socket的读端,socket是双向的,同一个socket既可以读也可以写,关闭读段之后进程不能从此socket读数据,进程只能发送数据
  SHUT_WR 关闭socket的写端,进程不能向此socket发送数据,进程只能接受数据
  SHUT_RDWR 关闭读写端
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值