记linux下对网络IPC:套接字socket的学习

套接字描述符

所谓套接字描述符是用于 网络进程间的通信。套接字是通信端点的抽象,正如进程使用文件描述符访问文件,应用程序用套接字描述符访问套接字。
为调用一个套接字,调用socket。

int socket(int domain,int type,int protocol)

返回值:成功返回文件描述符,失败返回-1;
参数:
domain(域):确定通信的特性,包括地址格式,每种域都有自己的地址格式。

描述
AF_INETIPv4英特网域
AF_INET6IPv6英特网域
AF_UNIXUNIX域
AF_UPSPEC未指定

type:确定套接字的类型,进一步确定通信特征:

类型描述
SOCK_DGRAM固定长度的、无连接的、不可靠的报文传递
SOCK_RAWIP协议的数据报接口
SOCK_SEQPACKET固定长度的、有序的、可靠的、面向连接的报文传递
SOCK_STREAM有序的、可靠的、双向的、面向连接的字节流

protocol:通常是0,表示为给定的域和套接字类型选择默认协议。

int close(int sockfd)

作用:关闭一个套接字。
返回值:成功返回0,失败返回-1;

int shutdown(int sockfd,int how)

作用:用来禁止一个文件描述符的IO
返回值:成功返回0,失败返回-1
参数how:
SHUT_RD(关闭读端)
SHUT_WR(关闭写端)
SHUT_RDWR(关闭读写端)

将套接字与地址关联

int bind(int sockfd,const struct sockaddr *addr,socklen_t len);

返回值:成功返回0,失败返回-1。
参数: addr 地址族 len :地址族大小

建立连接

int connect(int sockfd,const struct sockaddr *addr,socklen_t len)

返回值:成功返回0,失败返回-1。
作用:如果要处理一个面向连接的网路服务(SOCK_STREAM或SOCK_SEQPACKET),那么在开始交换数据之前,需要在请求服务的套接字和提供服务的套接字之间建立一个连接,使用connect来建立连接。
参数:sockfd:请求服务的套接字,addr:为提供服务的套接字bind地址

int listen(int sockfd,int backlog)

返回值:成功返回0,失败返回-1。
作用:服务器需要调用listen来宣告它愿意接受连接请求。
参数:backlog的作用是决定等待被accept的连接队列的大小,例如当backlog为10的时候,此时有11个客户端发起连接请求,但是服务器都未及时处理,所以前十个请求就会进入等待对列,且最后一个连接请求不会进入到等待对列。

int accept(int sockfd,struct sockaddr*restrict addr,socklen_t *restrict len)

返回值:成功返回套接字描述符,失败返回-1;
作用:处理调用connect的客户端的连接请求,并且返回一个能与之通信的套接字描述符。
如果服务器调用accept且sockfd处于阻塞状态,那么该线程将会阻塞直到有连接请求发来。如果sockfd处于非阻塞状态,那么accept会立即返回-1,并将error设为EWOULDBLOCK。

数据传输

ssize_t send(int sockfd,void*buf,size_t bytes,int flags)

返回值:成功返回发送字节数,失败返回-1
作用:与write功能基本相同但是多了一个flags参数,可用来控制如何发送数据

## ssize_t recv(int sockfd,const void*buf,size_t bytes,int flags)

返回值:成功返回读取字节数,失败返回-1
作用:与read功能基本相同但是多了一个flags参数,可用来控制如何读取数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值