一、函数原型

#include <sys/socket.h>
int socket (int __domain, int __type, int __protocol)

功能:实现一个通信端点,通信双方是进程(同机进程和不同机进程)。该函数相当于文件操作符中的 open 操作,socket 的相关操作都是通过需要使用该描述符实现。

二、参数详解

1、__domain

(1)指定协议族,决定了可以处理哪个协议层及其以上的通信数据可以处理。

(2)常用的如下:

AF_INET( = PF_INET):使用 IPv4 协议(Internet Protocol Version 4),处理 IP 层及其上的通信数据。

AF_INET6( = PF_INET):使用 IPv6 协议(Internet Protocol Version 6),处理 IP 层即其上的通信数据。

AF_PACKET( = PF_PACKET):处理数据链路层及其以上的数据。

AF_UNIX( = AF_LOCAL = PF_UNIX = PF_LOCAL):处理本机不同进程间的通信数据。

(3)协议族亦用于决定 socket 的地址类型,例如 AF_INET 采用的是 ipv4(32bit) 和端口号(16bit)组合,而 AF_UNIX 采用的是以绝对路径名作为地址。

2、__type

(1)指定 socket 类型,实际上指定的是内核为我们提供的服务的抽象。

(2)常用的如下:

SOCK_STREAM:流式 socket 。

SOCK_DGRAM:数据报 socket 。

SOCK_RAW :原始 socket 。

3、__protocol

(1)指定传输协议(TCP / UDP),系统为每一个协议族和类型提供了默认的传输协议,当该值为 0 时,使用其默认的协议。

(2)有的小伙伴可能将该协议和上面的“__domain”指定的协议族混淆,实际上二者是包含和被包含的关系。

“__domain”指定的是该sokcet可以处理哪些协议层及其以上的数据,例如当“__domain”指定了 AF_INET ,则代码该socket 可以处理网络层及其以上的数据,那网络层上的协议有哪些呢?有 TCP 和 UDP,所以“__protocol”的就可以写明 TCP 和 UDP 了。所以,“__domain”称之为“协议族”,“__protocol”称之为“协议”。

(3)综上所述,对于不同的“__domain”,其能指派的“__protocol”是不同的。

对于 AF_INET 来说,其能指派的协议有 tcp 和 udp。但是对于 AF_PACKET 其能指派的协议有 tcp、udp、icmp 等。

三、返回值

成功则返回非负整数,失败则返回0,并置 errno 。

四、应用示例

1、tcp/ip 通信的demo 。

2、udp/ip 通信的demo 。

3、socket ipc demo 。

(SAW:Game Over!)

linux socket API / socket相关推荐

  1. python封装api linux_python Socket编程-python API 与 Linux Socket API之间的关系

    python socket编程 by SA19225409 地址协议家族 Python 支持 AF_UNIX. AF_NETLINK. AF_TIPC 和 AF_INET 家族 AF_UNIX 基于本 ...

  2. linux socket API / bind

    一.函数原型 #include <sys/socket.h> int bind (int __fd, const struct sockaddr * __addr, socklen_t _ ...

  3. 【Linux网络编程学习】socket API(socket、bind、listen、accept、connect)及简单应用

    此为牛客Linux C++课程和黑马Linux系统编程笔记. 1. 什么是socket 所谓 socket(套接字),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象. 一个套接字就是网络 ...

  4. php socket keepalive,linux keepalive探测对应用层socket api的影响

    问题 大部分人都知道tcp的keepalive. 假设读者知道keepalive会如何触发. 这篇文章想讨论keepalive触发后, 对socket使用者的影响. keepalive设置 修改/et ...

  5. linux网络通信移植,基于socket API的C/S通信:将Qt程序从Linux移植到windows

    Qt是一个跨平台的GUI开发语言,它是对C++在图形设计方面上的一种扩充.Qt本身包含一系列用来设计图形界面的类,并且对C++原有的类都进行了再次封装.如果你的程序采用Qt的类库,那么源程序在不同平台 ...

  6. api有哪些 javasocket_Java Socket编程以及与Linux Socket API关系

    Socket 编程(基于Linux) Socket独立于具体协议的网络编程接口,在ISO模型中,主要位于会话层和传输层之间:在通用的计算机网络五层模型中,主要位于应用层和传输层之间. Linux So ...

  7. api有哪些 javasocket_简单hello/hi程序、分析及Java Socket API与Linux Socket API对比

    1.Socket 定义 套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开.读写和关闭等操作.套接字允许应用程序将I/O插入到网络中,并与网络中的其他应 ...

  8. linux socketCAN通信,linux can 总线socket接口测试使用

    最近调试一个sja1000的can驱动,发现到了2.6.36,linux把can总线封装成了网络接口.内核文档里给出了这么修改的原因. 1. Overview / What is Socket CAN ...

  9. Linux网络编程 | Socket编程(一):Socket的介绍、UDPSocket的封装、UDP服务器/客户端的实现

    目录 套接字编程 Sockaddr结构 字节序 地址转换 常用套接字接口 UDP的通信流程 UDPSocket的封装 UDP服务器 UDP客户端 套接字编程 所谓套接字(Socket),就是对网络中不 ...

最新文章

  1. 【转】一文掌握 Linux 性能分析之网络篇(续)
  2. spring-注入对象list
  3. 东北育才 数论专场第2场
  4. static和extern的用法总结
  5. CodeForces Gym 100935E Pairs
  6. Java源代码加密工具(Allatori)用法说明
  7. 帅地鸽了大半年,一个专注于面试、基础知识、算法的小破站上线了
  8. 深度解密微信疯读狂加粉的伎俩
  9. 基于嵌入式Linux的语音识别系统硬软件设计
  10. 随着无人机将承担更多的作战任务,“AI辅助空战”或将应运而生
  11. 面试官没想到我对redis数据结构这么了解,直接给offer
  12. 向量叉乘计算多边形面积
  13. 用MSNCartoon制作个性化卡通头像
  14. Android Launcher启动流程
  15. kodi树莓派_树莓派如何安装最新版Kodi 18.6 及树莓派4B针对Kodi的优化
  16. IntelliJ IDEA 14注册码
  17. PHP如何把word文档转换为html
  18. 使用 python进行文本处理
  19. 助力“双创”提质提速,柳枝行动再出发
  20. “折翼行动” :全球第三大比特币矿机厂商遭遇供应链攻击

热门文章

  1. 科普:TLS、SSL、HTTPS以及证书(转)
  2. 前端面试高频题:删除数组重复元素的多种方法
  3. Httpwatch 工具介绍
  4. Apache2 httpd.conf配置文件中文版详解
  5. MSSQL数据库全库批量替换
  6. tensorflow基本概念
  7. maven项目打包插件:将maven项目打包成一个可执行的jar(瘦jar)
  8. Kubernetes 桌面客户端:Lens
  9. linux实用的脚本:xcall(同步执行命令)与xsync(同步文件目录)
  10. golang bool布尔类型浅讲