码迷,mamicode.com
首页 > 系统相关 > 详细

Linux网络编程之socket相关结构体

时间:2015-06-13 09:54:29      阅读:239      评论:0      收藏:0      [点我收藏+]

标签:

Linux中的网络编程是通过 Socket (套接字)实现。
Socket有三种类型:
流式套接字(SOCK_STREAM)
流式套接字可以提供可靠的、面向连接的通讯流,它使用TCP协议。TCP保证了数据传输的正确性和顺序性。

数据报套接字(SOCK_DGRAM)
数据报套接字定义了一种无连接的服务,数据通过相互独立的报文进行传输,是无序的,并且不保证可靠,无差错,它使用数据报协议UDP。

原始套接字(SOCK_RAM)
原始套接字允许使用IP协议,主要用于新的网络协议的测试等。


Socket 相关结构体:

  • struct sockaddr_un 是一种进行本地进程间 IPC 的方法.
    struct sockaddr_un
    {
    	sa_family_t sun_family;
    	char sun_path[UNIX_PATH_MAX];
    };
    sun_family: 一般是 PF_UNIX 或 AF_UNIX;
    sun_path: 路径名;
  • struct sockaddr 是一个通用的 socket 地址
    struct sockaddr
    {
    	u_short sa_family;
    	char sa_data[14];
    };
    sa_family: 地址族,一般为AF_INET,代表 Internet (TCP/IP) 地址族。
    sa_data: 包含该socket的IP地址和端口号。
  • struct sockaddr_in 是一个 Internet 网 socket 地址(一个 TCP 的 socket 地址)。
    struct sockaddr_in 
    {
    	short int sin_family;  
    	unsigned short int sin_port;
    	struct in_addr sin_addr;
    	unsigned char sin_zero[8];
    };
    
    sin_family: 地址族。一般来说是AF_INET和PF_INET
    sin_port: 端口号(使用网络字节顺序)。在linux 下,端口号的范围是 0~65535, 0~1024 范围的端口号已经被系统使用或保留。
    
    sin_addr: 存储IP地址,使用in_addr 这个数据结构。
    typedef struct in_addr
    {
    	union
    	{
    		struct
    		{
    			unsigned char s_b1, s_b2, s_b3, s_b4;
    		}S_un_b;
    		
    		struct
    		{
    			unsigned short s_w1, s_w2;
    		}S_un_w;
    		
    		unsigned long S_addr;
    	}S_un;
    }in_addr;
    in_addr 是一个存储ip地址的共用体,它有三种表达方式:
    第一种:用四个字节来表示IP地址的四个数字。
    第二种:用两个字节来表示IP地址。
    第三种:用一个长整型来表示IP地址。
    我们一般使用第三种。
    
    sin_zero: 为了将 sockaddr_in 结构与 sockaddr 结构对齐。
    注意:填值的时候使用 sockaddr_in ,而作为函数的参数传入的时候转换成 sockaddr 结构。







Linux网络编程之socket相关结构体

标签:

原文地址:http://blog.csdn.net/u011641885/article/details/46476529

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!