zoukankan      html  css  js  c++  java
  • Linux Socket套接字描述符详解

    套接字又名socket,是一个接口,进程可以利用该接口和其他进程通信。无论是其他进程在本机上还是在其他机器上。

    套接字接口有许多不同的网络协议。包括TCP/IP协议栈!

    就如使用文件描述符来访问文件一样。

    程序是用套接字描述符来访问套接字。

    #include<sys/socket.h>

    int socket(int domain,int type,int protocol) 接下来来详细介绍这三个参数

    1.domain

    就如写信一样,不同国家写信的地址写法不同,英国美国有从街-区-市的从小到大的地址写法!而中国的地址写法

    是从大到小,市-区-街。就如不同域有着不同地址表示格式。

    常见的域是:AF_INET(IPV4域),AF_INET6(IPV6域),AF_UNIX,AF_UPSPEC...

    2.type

    有SOCK_DGRAM 固定长度的 无连接的 不可靠的报文传递。两个进程不需要建立连接只需要向对方进程套接字发送一个报文。

    (有点像写信,你发送信息就代表你写了很多信件。每封都有地址,接收人。)

    有SOCK_STREAM 可靠的,有序的,双向的连接型字节流。

    (有点像,你建了一条管道到别人家,建好以后你不用去送信,只需不断往管道里投字条。对方也可以往管道里投纸条到你家。)

    有SOCK_SEQPACKET

    (和SOCK_STREAM 类似只是从套接字得到的不是字节流而是基于报文的服务。)

    有SOCK_RAM

    (用于访问下面的网络层即IP层。构造自己的协议头部。)

    3.protocol

    这个参数通常是0,在前2个参数已经确认的情况下一般用来选择默认的协议。比如在AF_INET SOCK_STREAM的情况下默认选择TCP

    在AF_INET SOCK_DGREAM 的情况下默认选择UDP!

    就像一个文件描述符一样。可以用read函数 write函数对文件描述符进行操作。同理可以对套接字描述符进行操作。

    但是并不是所有的文件描述符操作都适用于套接字描述符。最常用的对套接字描述符的操作是shutdown

    #include<sys/socket.h>

    int shutdown(int sockfd,int how)

    如果how是SHUT_RD 表示关闭读端无法再从套接字里读取

    如果how是SHUT_WR 表示关闭写段无法再往套接字里写

    how是SHUT_RDWR 说明同时无法写和读!

    可以关闭一个方向开启另一个方向,比如关闭了写端但是还可以继续读取!

  • 相关阅读:
    [HNOI 2017]影魔
    [HNOI 2016]树
    [HNOI 2011]卡农
    [SCOI 2016]美味
    [SDOI 2011]染色
    [HNOI 2016]最小公倍数
    eclipse实现热部署和热加载
    mysql中时间比较的实现
    如何把本地项目部署到服务器上
    Linux部署项目和常用命令
  • 原文地址:https://www.cnblogs.com/zzzPark/p/6389188.html
Copyright © 2011-2022 走看看