socket函数
简介
1
2
3
4
5
|
/* 头文件 */
#include <sys/types.h>
#include <sys/socket.h>
/* 函数原型 */
int
socket(
int
domain,
int
type,
int
protocol);
|
第二个
参数指定要创建的
套接字类型,流套接字类型为SOCK_STREAM、数据报套接字类型为SOCK_DGRAM、原始套接字SOCK_RAW(WinSock接口并不适用某种特定的协议去
封装它,而是由
程序自行处理数据包以及协议首部);
该函数如果调用成功就返回新创建的
套接字的描述符,如果失败就返回INVALID_SOCKET。(Linux下失败返回-1)
套接字描述符是一个整数类型的值。每个进程的进程空间里都有一个
套接字描述符表,该表中存放着套接字描述符和套接字
数据结构的对应关系。该表中有一个字段存放新创建的
套接字的描述符,另一个字段存放套接字
数据结构的
地址,因此根据套接字描述符就可以找到其对应的套接字数据结构。每个进程在自己的进程空间里都有一个
套接字描述符表但是套接字数据结构都是在
操作系统的
内核缓冲里。
创建流套接字的例子
1
2
3
|
struct
protoent *ppe;
ppe=getprotobyname(
"tcp"
);
SOCKET ListenSocket=socket(PF_INET,SOCK_STREAM,ppe->p_proto);
|