技术
- socket本地通信
函数定义:ssize_t read(int fd, void * buf, size_t count);
函数说明:read()会把参数fd所指的文件传送count 个字节到buf 指针所指的内存中。
返回值:返回值为实际读取到的字节数, 如果返回0, 表示已到达文件尾或是无可读取的数据。若参数count 为0, 则read()不会有作用并返回0。
注意:read时fd中的数据如果小于要读取的数据,就会引起阻塞。
- 关于read()函数在socket的行为 翻自
https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.3.0/com.ibm.zos.v2r3.bpxbd00/rtrea.htm
#define_POSIX_SOURCE
#include <unistd.h>
ssize_t read(int fs, void *buf, size_t N);
- 能从socket句柄中返回数据
- 返回的数据最多N bytes
- 若数据少于Nbytes,则会返回现有的可用数据
- 若无可用数据,且socket处于阻塞模式,read()会阻塞,直到数据可用
- 若无可用数据,且socket处于非阻塞模式,read()返回-1,设置 error code to EWOULDBLOCK
- 对于socket可以分为数据报套接字(datagram sockets)和流套接字(Stream sockets)
- 对于datagram sockets,接收在buffer大小内的数据,将多余的数据丢弃
- 对于Stream sockets,可以使用循环read()来获取所有数据
- 查看句柄的占用情况
- 优秀的网络编程文章
https://blog.csdn.net/w968516q/article/details/53816801
- 关闭套接字后 显示被占用
-
socket句柄在不同线程的行为
-
监听socket的线程的退出方法
1. accept()阻塞 用信号方式退出
2. accept()非阻塞 使用select降低CPU的消耗
- errno在什么类型的错误发生后会被设置