IPv4套接字地址结构

一、IPv4套接字地址结构(POSIX定义)

  (1)长度字段sin_len是为增加对OSI协议的支持而随4.3BSD-Reno添加的;并不是所有的厂家都支持套接字地址结构的长度字段,而且POSIX规范也不

      要求有这个成员;

  (2)POSIX规范只需要这个结构中的3个字段:sin_family、sin_addr和sin_port;对于符合POSIX的实现来说,定义额外的结构字段是可以接受的

二、POSIX规范要求的数据类型

  (1)POSIX规范定义u_char、u_short、u_int和u_long这些类型时特地标记它们为已过时,仅是为向后兼容才提供的;

  (2)IPv4地址和TCP或UDP端口号在套接字地址结构中总是以网络字节序来存储;

  (3)32位IPv4地址存在两种不同的访问方法;举例来说,如果serv定义为某个网际套接字地址结构,那么serv.sin_addr将按in_addr结构引用其中的32位

      IPv4地址,而serv.sin_addr.s_addr将按in_addr_t(通常是一个无符号的32位整数)引用同一个32位IPV4地址;

  (4)sin_zero字段未曾使用,不过在填写这种套接字结构地址时,我们总是把该字段置为0;

  (5)套接字地址结构中的某些字段用在不同主机之间的通信中,但是结构本身并不在主机之间传递

原文地址:https://www.cnblogs.com/soldierback/p/10661460.html

时间: 2024-10-04 16:34:52

IPv4套接字地址结构的相关文章

套接字编程简介: IPV4套接字地址结构/ 通用套接字地址结构/ IPV6套接字地址结构

IPv4套接字地址结构通常也称为"网际套接字地址结构",它以sockaddr_in命名,定义在<netinet/in.h>头文件中. struct in_addr { in_addr_t s_addr;/*32-bit IPv4 address*/ /*network byte ordered*/ }; struct sockaddr_in { uint8_t sin_len;/*length if structure(16)*/ sa_family_t sin_famil

套接字地址结构

大多数套接字函数都需要一个指向套接字地址结构的指针作为参数.每个协议簇抵都定义它自己的套接字地址结构 这些结构的名字均以sockaddr_开头,并以对应每个协议簇的唯一后缀结尾 1.IPv4套接字地址结构 IPv4套接字地址结构通常称为:网际套接字地址结构 它以sockaddr_in命名 struct  in_addr{ in_addr_t s_addr;//32位无符号整数类型 }; struct sockaddr_in{ unit8_t sin_len;//套接字地址结构长度 它是一个无符号

【UNIX网络编程(一)】套接字地址结构、网络字节序和地址转换函数

引言:套接字地址结构在网络编程的每个实现中都要用到,因此掌握套接字地址结构是以后编写网络程序的前提,地址结构可以在两个方向上传递:从进程到内核和从内核到进程.地址转换函数在地址的文本表达和他们存放在套接字地址结构中的二进制值之间进行转换. 大多数套接字函数都需要一个指向套接字地址结构的指针作为参数.不同协议都有自己的套接字地址结构.通用的套接字地址结构是sockaddr.IPv4套接字地址结构是定义在头文件<netinet/in.h>中的sockaddr_in,其POSIX定义如下: stru

新的通用套接字地址结构

作为IPv6套接字API的一部分而定义的新的套接字地址结构克服来现有struct sockaddr的一些缺点 不像struct sockaddr,新的struct sockaddr_storage足以容纳系统所支持的任何套接字地址结构 struct sockaddr_storage{ uni8_t ss_len; sa_family_t sa_family; }; sockaddr_storage类型提供的通用套接字地址结构相比sockaddr存在以下2点差别: 1)如果系统支持的任何套接字地址

IPv6套接字地址结构

struct in6_addr{ unit8_t sa_addr[16]; }; #define SIN6_LEN struct sockaddr_in6{ unit8_t sin6_len; sa_family_t sin6_family; in_port_t port; unit32_t sin6_flowinfo; struct in6_addr sin6_addr; unit32-t sin6_scope_id; }; 如果系统支持套接字地址结构中的长度字段,那么SIN6_LEN常值必须

UNIX网络编程第3章套接字编程简介3.2套接字地址结构3.3值结果参数3.4字节排序函数

1: #include <iostream> 2: #include "../lib/unpsunyj.h" 3: 4: int main(int argc, char **argv) 5: { 6: union { 7: short s; 8: char c[sizeof(short)]; 9: } un; 10:   11: un.s = 0x0103; 12: std::cout << "un.s =: " << un.s

[解决]通常每个套接字地址只允许使用一次

我们在做socket的开发的时候,经常会遇到这个错误:通常每个套接字地址 (协议/网络地址/端口)只允许使用一次 错误指示很明确:通信端口被占用了,导致通信无法进行. 但为什么端口被占用了呢?什么端口被占用了? 这里其实有一个大前提:你的程序中有没有指定socket通信端口? 如果指定了,解决办法很简单,每次通信完成手动释放就行了.下次通信重新建立连接. 如果没有指定,说明以下几点(可能你命中的是其中一点): 1.你的服务器开启的端口数太少: 2.连接释放等待时间太长: 3.你的socket通信

2017.07.09 Python网络编程之重用套接字地址

1.重用套接字地址: # -*- coding: UTF-8 -*-# 如果在某个端口上运行一个Python套接字服务器,连接一次后便终止了运行,就不能在使用这个端口了# !usr/bin/env python# Python Network Programming Cookbook --Chapter -1# This program is optimized for Python 2.7# It may run on any other version with/without modifi

《网络编程》套接字地址与名字转换

前言 在套接字编程中,我们经常使用数字的 IP 地址和端口号进程编程,但是我们平常所熟悉的是一些便于记忆的字符名字,要使这种名字能够为套接字操作函数识别,所以这两者之间必须存在着某种转换关系.本节介绍的是 [主机名 与 地址] 和 [服务名 与 端口号] 之间的转换.在 Unix 系统中,可以使用函数 gethostbyname.gethostbyaddr 实现[主机名 与 地址]之间的转换:可以使用函数 getservbyname.getservbyport 实现 [服务名 与 端口号] 之间