簡體   English   中英

Linux編程:寫入重復的套接字失敗

[英]Linux programming: Writing to duplicated socket fails

在寫模式下關閉套接字后,我試圖寫到重復的句柄。 即使它們都具有不同的文件描述符,我也會遇到斷線的情況。 我的代碼有什么問題? 還是這是預期的行為?

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 pipe” printf語句正在執行並且輸出已打印。 我嘗試使用'fflush(stdout)'和'setbuf(stdout,NULL)'。 他們兩個都沒有工作。 有人可以幫忙嗎?

一旦關閉了連接的寫方向,就無法再對該連接進行寫操作,並且實現可以自由地與另一端進行通信,即不再有數據到達。 使用什么句柄訪問連接都沒有關系-這是相同的連接。

您已關閉FD(或更准確地說是連接到兩個FD的連接),因此寫入失敗。

如果你試圖讓一個插口對,使用socketpair (或pipe )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM