第1章:socket:套接字/1.1 服务端socket/1.1.1 socket函数:创建套接字/1.1.1.1 头文件
- 头文件
- #include<sys/socket.h>
-
/* Create a new socket of type TYPE in domain DOMAIN, using
protocol PROTOCOL. If PROTOCOL is zero, one is chosen automatically.
Returns a file descriptor for the new socket, or -1 for errors. */
extern int socket (int __domain, int __type, int __protocol) __THROW;
第1章:socket:套接字/1.1 服务端socket/1.1.1 socket函数:创建套接字/1.1.1.2 参数一:__domain 套接字中使用的协议族
- 参数一:套接字中使用的协议族
- 头文件: #include<bits/socket.h>
- 几个重要协议:
- IPV4互联网协议族(常用):#define PF_INET 2 /* IP protocol family. */
- IPV6互联网协议族: #define PF_INET6 10 /* IP version 6. */
- 本地通信的UNIX协议族:#define PF_LOCAL 1 /* Local to host (pipes and file-domain). */
- 底层套接字协议族:#define PF_PACKET 17 /* Packet family. */
- IPX Novell协议族:#define PF_IPX 4 /* Novell Internet Protocol. */
第1章:socket:套接字/1.1 服务端socket/1.1.1 socket函数:创建套接字/1.1.1.3 参数二_:_type套接字类型
- 参数二:套接字类型
- 头文件:#include<bits/socket_type>
-
Types of sockets. */
enum __socket_type
{
SOCK_STREAM = 1, /* Sequenced, reliable, connection-based
byte streams. */
#define SOCK_STREAM SOCK_STREAM
SOCK_DGRAM = 2, /* Connectionless, unreliable datagrams
of fixed maximum length. */
#define SOCK_DGRAM SOCK_DGRAM
SOCK_RAW = 3, /* Raw protocol interface. */
#define SOCK_RAW SOCK_RAW
SOCK_RDM = 4, /* Reliably-delivered messages. */
#define SOCK_RDM SOCK_RDM
SOCK_SEQPACKET = 5, /* Sequenced, reliable, connection-based,
datagrams of fixed maximum length. */
#define SOCK_SEQPACKET SOCK_SEQPACKET
SOCK_DCCP = 6, /* Datagram Congestion Control Protocol. */
#define SOCK_DCCP SOCK_DCCP
SOCK_PACKET = 10, /* Linux specific way of getting packets
at the dev level. For writing rarp and
other similar things on the user level. */
#define SOCK_PACKET SOCK_PACKET
/* Flags to be ORed into the type parameter of socket and socketpair and
used for the flags parameter of paccept. */
SOCK_CLOEXEC = 02000000, /* Atomically set close-on-exec flag for the
new descriptor(s). */
#define SOCK_CLOEXEC SOCK_CLOEXEC
SOCK_NONBLOCK = 00004000 /* Atomically mark descriptor(s) as
non-blocking. */
#define SOCK_NONBLOCK SOCK_NONBLOCK
};
-
- 面向连接:
- 值:SOCK_STREAM = 1
- 特点:
- 传输数据不丢失
- 传输的数据按发送顺序
- 可以监控socket缓冲区,如果满了就暂停传输
- 多数的数据没有边界,可以传输较大数据
- 可以分多次传输一次接收,也就是多次write,一次read
- 面向消息:
- 值:SOCK_DGRAM = 2
- 特点:
- 传输数据可能丢失
- 传输的数据不按发送顺序,可能后发送的先到
- 传输的数据有边界,限制每次传输的数据大小
第1章:socket:套接字/1.1 服务端socket/1.1.1 socket函数:创建套接字/1.1.1.4 参数三: __protocol 协议
- 参数三:协议
- 头文件:#include<netinet/in.h>
- 这个和第二个参数( 第1章:socket:套接字/1.1 服务端socket/1.1.1 socket函数:创建套接字/1.1.1.4 参数二:套接字类型)有关,如果是SOCK_STREAM = 1,则可以指定IPPROTO_TCP = 6;如果是SOCK_DGRAM = 2,则可以指定IPPROTO_UDP = 6
-
/* Standard well-defined IP protocols. */
enum
{
//默认
IPPROTO_IP = 0, /* Dummy protocol for TCP. */
#define IPPROTO_IP IPPROTO_IP
IPPROTO_ICMP = 1, /* Internet Control Message Protocol. */
#define IPPROTO_ICMP IPPROTO_ICMP
IPPROTO_IGMP = 2, /* Internet Group Management Protocol. */
#define IPPROTO_IGMP IPPROTO_IGMP
IPPROTO_IPIP = 4, /* IPIP tunnels (older KA9Q tunnels use 94). */
#define IPPROTO_IPIP IPPROTO_IPIP
//指定TCP
IPPROTO_TCP = 6, /* Transmission Control Protocol. */
#define IPPROTO_TCP IPPROTO_TCP
IPPROTO_EGP = 8, /* Exterior Gateway Protocol. */
#define IPPROTO_EGP IPPROTO_EGP
IPPROTO_PUP = 12, /* PUP protocol. */
#define IPPROTO_PUP IPPROTO_PUP
//指定UDP
IPPROTO_UDP = 17, /* User Datagram Protocol. */
#define IPPROTO_UDP IPPROTO_UDP
IPPROTO_IDP = 22, /* XNS IDP protocol. */
#define IPPROTO_IDP IPPROTO_IDP
IPPROTO_TP = 29, /* SO Transport Protocol Class 4. */
#define IPPROTO_TP IPPROTO_TP
IPPROTO_DCCP = 33, /* Datagram Congestion Control Protocol. */
#define IPPROTO_DCCP IPPROTO_DCCP
IPPROTO_IPV6 = 41, /* IPv6 header. */
#define IPPROTO_IPV6 IPPROTO_IPV6
IPPROTO_RSVP = 46, /* Reservation Protocol. */
#define IPPROTO_RSVP IPPROTO_RSVP
IPPROTO_GRE = 47, /* General Routing Encapsulation. */
#define IPPROTO_GRE IPPROTO_GRE
IPPROTO_ESP = 50, /* encapsulating security payload. */
#define IPPROTO_ESP IPPROTO_ESP
IPPROTO_AH = 51, /* authentication header. */
#define IPPROTO_AH IPPROTO_AH
IPPROTO_MTP = 92, /* Multicast Transport Protocol. */
#define IPPROTO_MTP IPPROTO_MTP
IPPROTO_BEETPH = 94, /* IP option pseudo header for BEET. */
#define IPPROTO_BEETPH IPPROTO_BEETPH
IPPROTO_ENCAP = 98, /* Encapsulation Header. */
#define IPPROTO_ENCAP IPPROTO_ENCAP
IPPROTO_PIM = 103, /* Protocol Independent Multicast. */
#define IPPROTO_PIM IPPROTO_PIM
IPPROTO_COMP = 108, /* Compression Header Protocol. */
#define IPPROTO_COMP IPPROTO_COMP
IPPROTO_SCTP = 132, /* Stream Control Transmission Protocol. */
#define IPPROTO_SCTP IPPROTO_SCTP
IPPROTO_UDPLITE = 136, /* UDP-Lite protocol. */
#define IPPROTO_UDPLITE IPPROTO_UDPLITE
IPPROTO_RAW = 255, /* Raw IP packets. */
#define IPPROTO_RAW IPPROTO_RAW
IPPROTO_MAX
};