首页 > C语言网络编程:socket函数

C语言网络编程:socket函数

函数描述

  • 头文件

  • 函数使用int socket(int domain, int type, int protocol);

  • 函数功能:创建一个通信的终点,并返回一个文件描述符来代表通信的终点

  • 函数参数:

    a. domain 代编当前创建的socket文件描述符使用的是哪一个协议族进行通信,这些协议族都包含在sys/socket.h,其中主要的协议族如下:

    • AF_UNIX, AF_LOCAL 本地进程通信
    • AF_INET IPV4网络传输层协议
    • AF_INET6 IPV6网络传输层协议
    • AF_IP IPX-Novell协议
    • AF_NETLINK 内核用户接口设备

      当前正式得协议族描述已经变为PF_INET。。。

      TCP/IP协议族如下

      在这里插入图片描述

    b. type函数socket()的参数type用于设置套接字通信的类型,指定使用TCP/IP协议族中的哪个子协议进行通信,主要有SOCKET_STREAM(流式套接字)、SOCK——DGRAM(数据包套接字)

    • SOCK_STREAM 提供有序的、可靠的、双链接的、字节流数据传输;主要是用作TCP链接时的数据传输,此时如果想要使用TCP协议,则将domain设置为AF_INET即可
    • SOCK_DGRAM 支持无链接、不可靠的数据传输,数据传输时定长;主要时用作UDP链接时的传输
    • SOCK_SEQPACKET 提供有序的,可靠的,双链接的数据传输通道,数据长度定长,使用的时候需要将数据全部读出
    • SOCK_RAW RAW类型,提供原始网络协议访问;即此时我们使用的通信协议为IP 协议
    • SOCK_RDM 提供可靠的数据报文,不过可能数据会有乱序
    • SOCK_PACKET 当前通信类型已经过时,不应在通信程序中使用
    • SOCK_NOBLOCK 将socket返回的文件描述符指定为非阻塞的,类似SOCK_STREAM | SOCK_NOBLOCK 表示使用面向链接的数据传输同时非阻塞
    • SOCK_CLOEXEC 表示一旦进程执行exec系统调用之后,将会自动关闭socket返回的套接字文件描述符

    c. protocol 特例化来一个协议,用来指定协议号

    一般情况下protocol写0,表示使用domaintype指定的协议,不过如果domaintype所指定的协议有好几个时,此时就需要通过具体的协议号来区分,否则写0即可。

    所有的协议编号都被保存在了/etc/procotols下,tcp协议编号为6,udp协议编号为17

    ip	0	IP		# internet protocol, pseudo protocol number
    hopopt	0	HOPOPT		# IPv6 Hop-by-Hop Option [RFC1883]
    icmp	1	ICMP		# internet control message protocol
    igmp	2	IGMP		# Internet Group Management
    ggp	3	GGP		# gateway-gateway protocol
    ipencap	4	IP-ENCAP	# IP encapsulated in IP (officially ``IP'')
    ...
    

    类似如下

    socket (AF_INET, SOCK_STREAM,6);socket (AF_INET, SOCK_STREAM,0);都代表tcp协议

代码举例

#include 
#include 
#include 
#include 
#include 
#include 
#include void print_err(char *str, int line, int err_no) { printf("%d, %s :%s
",line,str,strerror(err_no));_exit(-1);
}int main()
{ int skfd = -1;/*创建使用TCP通信的套接字文件描述符*/skfd = socket(AF_INET, SOCK_STREAM, 0);if ( -1 == skfd) { print_err("socket failed",__LINE__,errno);}return 0;
}

更多相关:

  • 3GPP组织概述 1. TSG/WG 3GPP是以工作组开展工作的,目前有3个大的技术规范组:RAN, SA, CT, 这一级别的工作组英语写为 TSG (Technical Specification Group)。每个TSG下面又分了很多工作组(WG: work group). 详见下表: https://www.3gpp.o...

  • 文章目录前言1. HTTP协议通信的问题1.1 tcpdump 抓取http 请求包1.2 报文分析1.3 HTTP 协议问题2. SSL & TLS 协议的基本介绍和历史演进3. TLS 1.2 实现加密传输的过程3.1 TLS HandShake 协议概览3.2 第一次握手:ClientHello3.3 第二次握手:从Server...

  • 一、ARP协议 ARP(Address Resolution Protocol)地址解析协议,将IP地址解析成MAC地址。 IP地址在OSI模型第三层,MAC地址在OSI第二层,彼此不直接通信; 在通过以太网发生IP数据包时,先封装第三层(32位IP地址)和第二层(48位MAC地址)的报头; 但由于发送数据包时只知道目标IP地址,不...

  • #vi /etc/httpd/conf/httpd.conf 添加下面配置 NameVirtualHost *:80 ProxyPreserveHost OnServerName www.域名.comProxyPass / http://www.域名.com:8080/system/ErrorLog...