在写入模式下关闭套接字后,我正在尝试写入重复的句柄。我正在破坏管道,即使它们都有不同的文件描述符。我的代码出了什么问题?或者是预期的行为?
int clientDupFD = dup(fileDescriptors[0]);
shutdown(fileDescriptors[0], SHUT_WR);
printf ("\n Client: Writing to shutdown(SHUT_WR) socket");
writeOk = write(clientDupFD, msgPtr="Writing message after partial shutdown!", 5);
if(writeOk == -1) {
printf("\n ERR-%s: write() failed to write msg to socket", strerror(errno));
}
else {
printf("\n Client: Message '%s' successfully written to socket", msgPtr);
}
另外,当我通过CodeLite运行时,完整的输出(最后的printfs)没有被执行,为什么?
只有当我通过调试器尝试时,我才能看到" ERR-Broken管道" printf语句正在执行,输出已打印。我尝试过使用' fflush(stdout)'以及' setbuf(stdout,NULL)'。他们俩都没有工作。有人可以帮忙吗?
答案 0 :(得分:1)
一旦连接的写入方向被关闭,就不再能够在连接上进行写入,并且实现可以自由地与另一端通信,即不再有数据到达。使用什么句柄来访问连接并不重要 - 它是相同的连接。
答案 1 :(得分:1)
您已关闭FD(或更准确地说是连接到两个FD的连接),因此写入失败。
如果您尝试制作套接字对,请使用socketpair
(或pipe
)。