看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: Win10, Linux, ...) Server: Linux Client: Windows 最近寫scoket programming時, 想要複製出讓server端收到SIGEPE的情況 所以在server端, accept對方的連線要求之後, 就寫一個無窮迴圈去發送資料給對方, code的寫法如下: int idx,result; for( idx = 0; 1; idx++ ) { result = send(clientfd, buffer, sizeof(buffer), 0); printf("errno : %d\n",errno); } 然後client則是連線成功之後, 呼叫close把socket關掉.Code大約的寫法如下: SOCKET s; struct sockaddr_in server; ....(省略)..... if (connect(socketfd , (struct sockaddr *)&server , sizeof(server)) < 0) { puts("connect error"); return 1; } else { close(socketfd); } 結果,server收到的errno是ECONNRESET,而不是EPIPE 然後程式就停止執行了. 後來我修改client的程式,把close(socketfd)改成shutdown(socketfd, 1), 結果server仍然一樣只有收到ECONNRESET. 然後我改成shutdown(socketfd, 2), 結果仍然一樣只有收到ECONNRESET. 請問... 我該怎麼做,才能讓server收到EPIPE呢? 謝謝賜教! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 180.177.11.187 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1488161068.A.29F.html ※ 編輯: larkes (180.177.11.187), 02/27/2017 10:06:38
Qbsuran: send/recv失敗後再呼叫一次就有broken pipe了 需要這個 02/27 20:29
Qbsuran: 幹嘛? 02/27 20:29