int socket(int,int,int)详解
来源:互联网 发布:d3.js v3api 编辑:程序博客网 时间:2024/04/29 04:55
在socket通信中,会用int socket(int,int,int)
新实例初始化 Socket 类使用指定的地址族、 套接字类型和协议。
但真的了解他的使用方式了么?
socket(AddressFamily, SocketType, ProtocolType)
上面的socket
初始化如果成功将会返回过来一个int
类型的正整数,否则就会返回一个-1
下面是来看一下函数中是如何定义这个socket的各个参数的类型的
public:Socket( AddressFamily addressFamily, SocketType socketType, ProtocolType protocolType)
使用socket
这个函数
socket(AddressFamily,SocketType,ProtocolType)
第一位AddressFamily
地址族
在Linux
的#include <sys/socket.h>
中,宏定义了40
个类型
/* * Address families. */#define AF_UNSPEC 0 /* unspecified */#define AF_UNIX 1 /* local to host (pipes) */#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)#define AF_LOCAL AF_UNIX /* backward compatibility */#endif /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */#define AF_INET 2 /* internetwork: UDP, TCP, etc. */#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)#define AF_IMPLINK 3 /* arpanet imp addresses */#define AF_PUP 4 /* pup protocols: e.g. BSP */#define AF_CHAOS 5 /* mit CHAOS protocols */#define AF_NS 6 /* XEROX NS protocols */#define AF_ISO 7 /* ISO protocols */#define AF_OSI AF_ISO#define AF_ECMA 8 /* European computer manufacturers */#define AF_DATAKIT 9 /* datakit protocols */#define AF_CCITT 10 /* CCITT protocols, X.25 etc */#define AF_SNA 11 /* IBM SNA */#define AF_DECnet 12 /* DECnet */#define AF_DLI 13 /* DEC Direct data link interface */#define AF_LAT 14 /* LAT */#define AF_HYLINK 15 /* NSC Hyperchannel */#define AF_APPLETALK 16 /* Apple Talk */#define AF_ROUTE 17 /* Internal Routing Protocol */#define AF_LINK 18 /* Link layer interface */#define pseudo_AF_XTP 19 /* eXpress Transfer Protocol (no AF) */#define AF_COIP 20 /* connection-oriented IP, aka ST II */#define AF_CNT 21 /* Computer Network Technology */#define pseudo_AF_RTIP 22 /* Help Identify RTIP packets */#define AF_IPX 23 /* Novell Internet Protocol */#define AF_SIP 24 /* Simple Internet Protocol */#define pseudo_AF_PIP 25 /* Help Identify PIP packets */#define AF_NDRV 27 /* Network Driver 'raw' access */#define AF_ISDN 28 /* Integrated Services Digital Network */#define AF_E164 AF_ISDN /* CCITT E.164 recommendation */#define pseudo_AF_KEY 29 /* Internal key-management function */#endif /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */#define AF_INET6 30 /* IPv6 */#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)#define AF_NATM 31 /* native ATM access */#define AF_SYSTEM 32 /* Kernel event messages */#define AF_NETBIOS 33 /* NetBIOS */#define AF_PPP 34 /* PPP communication protocol */#define pseudo_AF_HDRCMPLT 35 /* Used by BPF to not rewrite headers in interface output routine */#define AF_RESERVED_36 36 /* Reserved for internal usage */#define AF_IEEE80211 37 /* IEEE 802.11 protocol */#define AF_UTUN 38#define AF_MAX 40#endif /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */
一般常用AF_UNIX
、AF_INET
AF_UNIX
这个类型的地址族用于单台服务器通信,常用语嵌入式类型的通信 AF_INET
这个比较通用
AF = Address FamilyPF = Protocol Family
在Windows
下,AF_INET = PF_INET
可以完全等同使用,
而在Unix/Linux
系统中,在不同的版本中这两者有微小差别.对于BSD
是AF
,对于POSIX
是PF
.
第二位SocketType
,是套接字类型
关于套接字类型,有下面5
种类型的宏定义
/* * Types */#define SOCK_STREAM 1 /* stream socket */#define SOCK_DGRAM 2 /* datagram socket */#define SOCK_RAW 3 /* raw-protocol interface */#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)#define SOCK_RDM 4 /* reliably-delivered message */#endif /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */#define SOCK_SEQPACKET 5 /* sequenced packet stream */
第三位ProtocolType
,是协议类型
在Mac
下,类似于Linux
,有这么一段话Protocol families, same as address families for now.
。现在,协议族跟地址族相似
所以,可以跟地址族混用。
默认使用0
,未定义协议类型。
上面说明清楚了,就可以来初始化一个套接字实例了。
socket(AF_INET,SOCK_STREAM,0);
上面就是是实例化一个套接字,用网络类型的地址族,像:TCP
,UDP
等,都在传输层;
使用了套接字流的类型(类型还有数据报套接字<DatagramSocket>
)
然后就选择未定义类型的协议
如果初始化成功,就会返回一个 int
类型的非负整数,否则就返回一个-1
用于判断是否初始化成功的代码
if ((sockfd = socket(AF_INET , SOCK_STREAM, 0)) == -1) { perror("socket" ); return -1;}
0 0
- int socket(int,int,int)详解
- int socket(int domain, int type, int protocol)参数详解
- int
- int?
- int ?
- int
- Int
- int?
- int*&、int&*
- int*&、int&*
- Int (*(*F)(int,int))(int)
- int (*func(int)) (int *,int)
- int; int*; int&区别
- int socket( int family, int type, int,protocol)
- int socket (int domain, int type, int protocol);
- SOCKET socket(int af,int type,int protocol)解说
- int (*a)(int) ; int (*a[10])(int); int *(*a)(int) ;
- typedef int (* func)(int ,int )
- Java多线程11:ReentrantLock的使用和Condition
- 内网 外网发布
- STM32F4-IAP学习笔记(一)
- java参数传递
- MAC:通过NVM安装指定版本的node
- int socket(int,int,int)详解
- 在MVC中实现 网页错误跳转到500统一页面
- h5和css3兼容IE8浏览器
- 2017有哪些推荐的Unity3D开发的基础教程
- EF日期格式筛选
- esp8266固件刷新
- Java多线程12:ReentrantLock中的方法
- js 正则表达式
- 常见网络攻击手段原理分析