收发EtherCAT帧——recv

recv

 #include <sys/socket.h>

 ssize_t recv(int sockfd, void *buf, size_t len, int flags);

入参1为创建的文件描述符fd;

入参2为接收数据的缓冲区指针;

入参3为接收数据的长度;

入参4为表示信息,默认设置为0

当应用程序调用recv接收数据的时候,recv函数会等待sockfd中发送数据的缓冲区的协议发送完数据,如果在等待过程中出现网络错误,则会返回SOCKET_ERROR。如果sockfd中的缓冲区中没有数据或者协议已经发送完数据,则recv会检查sockfd的接受缓冲区,如果该缓冲区正在接受数据,则recv会一直等待,直到缓冲区接受数据完毕,之后recv将数据从缓冲区拷贝一份值buf中,数据通过协议转发的,recv只是将数据从缓冲区拷贝过来。注,如果recv在拷贝数据时出现错误,则返回SOCKET_ERROT,如果在协议传输数据中出现网络错误,则返回0。

阻塞与非阻塞recv返回值没有区别,都是:

       <0 出错    

       =0 对方调用了close API来关闭连接

       >0 接收到的数据大小

猜你喜欢

转载自blog.csdn.net/wofreeo/article/details/89398265