套接字:send() 函数返回“Broken Pipe”错误
Posted
技术标签:
【中文标题】套接字:send() 函数返回“Broken Pipe”错误【英文标题】:Socket: send() function returned 'Broken Pipe' error 【发布时间】:2016-03-30 14:54:17 【问题描述】:我是套接字编程的新手,我正在尝试使用 C++ 中的 send()
函数将一些数据包发送到服务器,但在向服务器发送数据包时总是收到“Broken pipe”错误。您能帮我解决以下几点吗?
send()
函数何时返回“Broken pipe”错误?
套接字编程中出现“Broken pipe”错误的原因是什么?
send()
函数出现“Broken pipe”错误的解决方案是什么?
注意:我使用命名套接字在客户端和服务器之间进行通信。
【问题讨论】:
【参考方案1】:我遇到了同样的问题,并认为您可以将 MSG_NOSIGNAL 作为标志参数设置为 0,以防止在套接字关闭时发送函数抛出信号。 insted 它将返回一个 -1 以显示发送未成功。
int rc = send(sockFD, "data", 4, MSG_NOSIGNAL);
if (rc == -1) cout << "socket send failed" << endl;
【讨论】:
【参考方案2】:当
send()
返回“Broken pipe”错误时
当您写入已被对等方关闭的连接时。
套接字编程中出现“Broken pipe”错误的原因是什么
写入已被对等方关闭的连接。
send() 函数出现“Broken pipe”错误的解决方案是什么。
不要写入已被对等方关闭的连接。
这通常表示你之前犯了一个应用协议错误,所以对端不理解你而放弃了。
【讨论】:
感谢您的回复,那么什么时候会出现“Bad file Descriptor”错误。 @K.H.Nagaradder - 除 EAGAIN 和 EWOULDBLOCK 外,大多数套接字发送错误都应视为连接失败,您的代码应仅关闭套接字句柄。如果您收到“错误的文件描述符”,这可能意味着您的编程错误。就像您已经关闭了套接字或者您发送的文件句柄不是套接字一样。 @K.H.Nagaradder 当您使用已关闭或从未打开的文件描述符调用系统函数时。一次一个问题,谢谢。以上是关于套接字:send() 函数返回“Broken Pipe”错误的主要内容,如果未能解决你的问题,请参考以下文章
如何规避错误 pq_flush: could not send data to client: Broken pipe found
TCP 套接字上的 send() 是不是可以返回 >=0 和 <length?
PHP系列 | PDO::prepare(): send of 68 bytes failed with errno=32 Broken pipe