zoukankan      html  css  js  c++  java
  • UNIX环境高级编程 第16章 网络IPC:套接字

    上一章(15章)中介绍了UNIX系统所提供的多种经典进程间通信机制(IPC):管道PIPE、命名管道FIFO、消息队列Message Queue、信号量Semaphore、共享内存Shared Memory,另外还有第10章介绍的信号Signal。这六种IPC各有差异,但是都存在一个共同的限制:它们仅能用于同一台计算机上的进程间通信,不能用于不同计算机间的进程间通信。本章将说明一种既可以用于计算机内进程通信,又可以用于计算机间进程通信的UNIX服务,即:网络IPC:套接字。

    套接字描述符

    对于套接字(socket)的抽象是向UNIX系统的文件描述符看齐的。换句话说,套接字抽象与文件抽象相似,都是用一个非负整数的描述符来加以引用读写等操作,因此对于很多处理文件的系统API函数来说,它们既能处理文件描述符,又能处理套接字描述符,比如write( )和read( )函数都能接受套接字描述符。

    对于文件描述符,我们可以通过调用 open( ) 来得到相应文件的描述符。对于套接字描述符,则可以通过 socket( ) 来获得,其头文件及原型如下:

    #include <sys/socket.h>
    
    int socket(int domain, int type, int protocol);

    该函数在成功时返回一个套接字描述符,失败则返回-1。

    socket( ) 函数接受三个参数:

    int domain : 用于确定网络类型
    
    int type : 用于确定协议类型
    
    int protocol : 用于消歧义,决定网络协议

    之所以存在上面三个参数,是因为网络模型是分层的,比如TCP/IP是四层,而OSI是七层,单一参数无法精确决定网络协议,而前两个参数共同决定的网络协议也可能出现不唯一,当然由于事实上的标准是TCP/IP导致 protocol 通常是0即可决定出具体网络协议。

  • 相关阅读:
    Mac环境下,终端命令行开启、关闭和重启mysql数据库
    Java连接Mysql数据库详细代码
    强制关闭MySQL数据库
    ssh登录服务器出现Permission denied (publickey,gssapi-keyex,gssapi-with-mic)警告
    JSP中“转发”和“重定向”的区别
    Mac环境下配置Tomcat服务器
    TCP和UDP的区别
    div宽高未知,设置小的div位于大的div的中心
    HTML:使用Jquery动态生成二级选项列表
    $(document).ready()和window.onload的区别
  • 原文地址:https://www.cnblogs.com/pluse/p/6910379.html
Copyright © 2011-2022 走看看