Linux编程:写入重复的套接字失败

时间:2016-08-15 09:22:40

标签: c linux sockets

在写入模式下关闭套接字后,我正在尝试写入重复的句柄。我正在破坏管道,即使它们都有不同的文件描述符。我的代码出了什么问题?或者是预期的行为?

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)'。他们俩都没有工作。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

一旦连接的写入方向被关闭,就不再能够在连接上进行写入,并且实现可以自由地与另一端通信,即不再有数据到达。使用什么句柄来访问连接并不重要 - 它是相同的连接。

答案 1 :(得分:1)

您已关闭FD(或更准确地说是连接到两个FD的连接),因此写入失败。

如果您尝试制作套接字对,请使用socketpair(或pipe)。