首页 > 系统相关 >Linux服务器编程 基本API与概念

Linux服务器编程 基本API与概念

时间:2023-09-23 12:13:59浏览次数:46  
标签:addr 字节 编程 地址 API SO Linux address socket

Linux服务器编程

基本API与概念

  • 基本参数和结构体

  • 协议族参数:PF_UNIX,PF_INET,PF_INET6;

  • 地址族参数(sa_family_t):AF_UNIX,AF_INET,AF_INET6;

  • 服务类型参数:

    • SOCK_STREAM流服务;SOCK_UGRAM数据报服务;
    • 与SOCK_NONEBLOCK相与 非阻塞类型;与SOCK_CLOEXEC相与 fork子进程在子进程中关闭socket
  • 错误信息

    • ECONNREFUSED:目标端口不存在
    • ETIMEOUT:连接超时
  • 通用socket地址结构体:sockaddr_storge

    • sa_family;int_ss_align
  • 专用socket地址结构体:sockaddr_un;sockaddr_in;sockaddr_in6

    • sin_family

    • sin_port(需用网络字节序表示):转换函数htons()htonl()

    • IPv4地址结构体:in_addr;IPv6地址结构体:in6_addr

      • 内含地址值s_addr;sa_addr[16](需用网络字节序表示):转换函数inet_pton()
    • 专用socket地址作为参数传入时需要强转为sockadrr类型

    • struct socketaddr_in address; //定义一个IPv4的socket专用地址
      bzero(&address,sizeof(address))//将该结构体的前n个字节清零
      address.sin_family=AF_INET    //为专用地址选择地址族参数
      address.sin_port=htons(port)  //为专用地址端口号赋值(转化为网络字节序)
      inet_pton(AF_INET,ip,&address.sin_addr)//为专用地址ipv4地址值赋值(转化为网络字节序)
      
  • 常用socket文件描述符属性参数

    • SO_REUSEADDR:复用处于TIME_WAIT状态的socket
    • SO_RCVBUF和SO_SNDBUF:表示TCP接收缓冲区和发送缓冲区的大小
    • SO_RCVLOWAT和SO_SNDLOWAT:TCP接收缓冲区和发送缓冲区的低水位标志,当可读数据大于低水位时,IO复用系统调用告知应用程序可以读数据;当发送区中空闲空间大于低水位时,IO复用系统调用告知应用程序可以写数据,默认为1字节
    • SO_LINGER:通过传入一个linger类型的结构体,通过该结构体中的 l_onoffl_linger两个参数控制close()函数的具体行为
  • 携带主机信息的hostent结构体:h_name主机名;h_aliases主机别名列表;h_addrtype地址族;h_length地址长度;h_addr_list按网络字节序列出的主机IP地址列表

  • 携带服务信息的servent结构体:s_name服务名;s_aliases服务别名列表;s_port端口号;s_proto服务类型(tcp或udp或其他)

  • 描述资源限制的rlimit结构:rlim_t类型:描述资源级别的整数类型;rlim_cur:指定资源的软限制(最好不要超过的限制);rlim_max:指定资源的硬限制(软限制的上限)

标签:addr,字节,编程,地址,API,SO,Linux,address,socket
From: https://www.cnblogs.com/cyj-8818/p/17724139.html

相关文章

  • 【Java 基础篇】Java继承:打开面向对象编程的大门
    继承是面向对象编程(Object-OrientedProgramming,OOP)中的一个重要概念。在Java中,继承允许一个类(子类)从另一个类(父类)继承属性和方法。这种机制使得代码重用、扩展和维护变得更加容易。本篇博客将深入探讨Java中继承的概念、语法和最佳实践,适用于初学者,让你轻松理解和运用继承的强大功......
  • 【Java 基础篇】Java 面向对象详解:面向对象编程的艺术
    如果你正在学习Java编程,面向对象编程(Object-OrientedProgramming,OOP)是一个不可或缺的概念。Java是一种面向对象的编程语言,这意味着它的编程范式基于对象、类和继承。在本篇博客中,我们将深入探讨Java中面向对象编程的核心概念,从什么是对象开始,逐步介绍类、继承、封装、多态等重要概......
  • 编程基础C Assignments
    编程基础CAssignments喵嘤,发现舍友和同学对于课堂留的一些作业有疑惑,因此准备发一篇博客来解释一下每次课的作业。但是博客园神奇的系统,“文章”是不支持显示到主页上的,只有“随笔”可以。因此建立这个目录,它的主要作用是可以跳转到每一次作业的解释文章上面。编程基础C922A......
  • 【Java 基础篇】Java 泛型:类型安全的编程指南
    在Java编程中,泛型是一项强大的特性,它允许您编写更通用、更安全和更灵活的代码。无论您是初学者还是有经验的Java开发人员,了解和掌握泛型都是非常重要的。本篇博客将从基础概念一直深入到高级应用,详细介绍Java泛型。什么是泛型?泛型是Java编程语言的一项特性,用于实现通用性更......
  • CentOS7 关于Linux Polkit本地权限提升漏洞(CVE-2021-4034)的在线和离线的两种修复方式
    CentOS7关于LinuxPolkit本地权限提升漏洞(CVE-2021-4034)的在线和离线的两种修复方式https://blog.csdn.net/liangtongning/article/details/122805070在线修复yumcleanall&&yummakecacheyumupdatepolkit-y[root@Fort~]#yumcleanall已加载插件:fastestmirror......
  • 7.3 通过API枚举进程
    首先实现枚举当前系统中所有进程信息,枚举该进程的核心点在于使用CreateToolhelp32Snapshot()函数,该函数用于创建系统进程和线程快照,它可以捕获当前系统中进程和线程相关的信息(如PID、线程数量、线程ID等),在对这些信息进行处理后,可以获得很多有用的数据,如当前系统中所有正在执行的进......
  • 7.4 通过API枚举进程权限
    GetTokenInformation用于检索进程或线程的令牌(Token)信息。Token是一个数据结构,其包含有关进程或线程的安全上下文,代表当前用户或服务的安全标识符和权限信息。GetTokenInformation函数也可以用来获取这些安全信息,通常用于在运行时检查某个进程或线程的权限或安全信息。该函数原......
  • linux 之路 第七章
    第七章磁盘陈列技术提高硬盘的读写速度解决硬盘损坏后数据丢失的情况1.DAID独立冗余磁盘阵列DAID0两块设备,提升数倍,rAID1两块盘,同时写入盘里,增加数据安全性,成本高使用率降低50%rAID5最少三块盘就可以做rAID5 保存的奇偶校验和写入到多个硬盘的校验和rAID10rADI1和rAID0组合......
  • 7.3 通过API枚举进程
    首先实现枚举当前系统中所有进程信息,枚举该进程的核心点在于使用CreateToolhelp32Snapshot()函数,该函数用于创建系统进程和线程快照,它可以捕获当前系统中进程和线程相关的信息(如PID、线程数量、线程ID等),在对这些信息进行处理后,可以获得很多有用的数据,如当前系统中所有正在执行的进......
  • 7.4 通过API枚举进程权限
    GetTokenInformation用于检索进程或线程的令牌(Token)信息。Token是一个数据结构,其包含有关进程或线程的安全上下文,代表当前用户或服务的安全标识符和权限信息。GetTokenInformation函数也可以用来获取这些安全信息,通常用于在运行时检查某个进程或线程的权限或安全信息。该函数......