gpt4 book ai didi

c - 通过套接字发送数据时,ENOENT 是什么意思?

转载 作者:行者123 更新时间:2023-11-30 17:35:42 27 4
gpt4 key购买 nike

我正在编写一些嵌入式 C 代码,通过 HTTP 协议(protocol)将数据发布到网站。第一个字节进展顺利,分块到 1024 字节缓冲区中。但最后,send() 调用失败,并显示 errno=2 (ENOENT)。我在manpage中找不到这个错误,所以我不知道出了什么问题。我的 HTTP POST header 显示

Content-Length: 12517

这是我发送的确切字节数(这是一个原始文件帖子)。

这是我的代码(sockfd 是一个正确打开的套接字):

void send_all_n(int sockfd, char *buf, int buf_len) {
int bytes_sent = 0;
char *buf_ptr = buf;
int failed = 0;

do {
bytes_sent = send(sockfd, buf_ptr, buf_len-bytes_sent, 0);
if (bytes_sent > 0) {
buf_ptr += bytes_sent;
} else if (bytes_sent == -1) {
switch(errno) {
case EWOULDBLOCK:
usleep(100000);
break;
default:
failed = 1;
break;
}
}
} while (bytes_sent < buf_len && failed == 0);
}

许多 1024 字节缓冲区运行良好,直到最后的某个地方,我的日志记录如下:

2014-04-09 18:13:31 +0800 [D]: [network] wrote 328 bytes to host, buf_len=1024, bytesleft=696
2014-04-09 18:13:31 +0800 [D]: [network] wrote -1 bytes to host, buf_len=1024, bytesleft=1025
2014-04-09 18:13:31 +0800 [S]: [network] could not send data: errno=2

更新:如果我在发送缓冲区之间添加 1 秒 sleep ,则效果很好。

最佳答案

您确定在失败的 send() 和记录它的调用之间没有调用更改 errno 吗?

至少为了调试,我会将 perror("send() failed") 添加到 switch()default 案例中.

关于c - 通过套接字发送数据时,ENOENT 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22959806/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com