1.TCP数据读写
首先,read()和write()函数同样适用于socket。而socket编程接口停工了几个专门用于socket数据读写的系统调用,增加了对读写的控制。而TCP流数据读写的系统调用是:
#include<sys/types.h>
#include<sys/socket.h>
ssize_t recv(int sockfd,void *buf,size_t len,int flags);
ssize_t send(int scokfd,const void * buf,size_t len,int flags);
- sockfd:读写sockfd上的数据
- buf:读写缓冲区的位置
- len:读写缓冲区的大小
recv()函数成功时返回读取到实际的数据长度,它可能小于我们期望的长度len,所以要反复读取,才能获得完整的数据。recv返回0,说明的发送端已经关闭连接了。出错时返回-1并设置errno。
send()函数成功时返回写入的数据长度,失败则返回-1并设置errno。
flag参数提供了额外的控制:
| | | | recv | send |
| | | | | |
|–|--|–|--|–|
| 1 | | | | |
num | 选项名称 | 含义 | recv | send |
---|---|---|---|---|
1 | MSG_CONFIRM | |||
2 | ||||
3 | ||||
4 | ||||
5 | ||||
6 | ||||
7 | ||||
8 |