1,函数原型
#include <sys/socket.h>
ssize_t send(int sockfd, const void *buff, size_t nbytes, int flags);
ssize_t sendto(int sock, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen);
TCP使用send,UDP使用sendto,需要指定发送数据的ip和端口号。
返回值是实际发送的字符数,因为我们知道要发送的总长度,所以,如果没有发送完,我们可以继续发送。
- < 0,当返回值当返回值为 -1 时, 我们需要判断 errno:
A,如果errno为 EAGAINE 或 EWOULDBLOCK ,表示当前缓冲区写满,可以继续写,或者等待epoll或select的后 续 通 知,一旦有缓 冲 区,就会触发写操作,这个也是经常利用的一个特性。
B,如果errno为EINTR ,表示被中断了,可以继续写,或者等待epoll或select的后续通知。
C,如果errno不为EAGAINE或EWOULDBLOCK或EINTR,此时真的出错,此时应该close(sockfd)。
- >= 0 且不等于要求发送的长度,应该继续send,如果等于要求发送的长度,发送完毕。