• 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 说明同时无法写和读!

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

  • 相关阅读:
    Hadoop学习之安装HDFS
    常见的6种数据结构
    maven 编译出错 Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.5:clean
    jquery解决js对象、数组赋值时的引用传递
    405 method not allowed(方法不被允许)
    身份证件号 正确性检查方法
    svn 提交信息模板
    idea 使用说明
    java-System类
    java-Integer 类
  • 原文地址:https://www.cnblogs.com/zzzPark/p/6389188.html
Copyright © 2020-2023  润新知