[問題]如何讓socket server端收到SIGEPE?

看板C_and_CPP (C/C++)作者 (larkes)時間9年前 (2017/02/27 10:04), 9年前編輯推噓1(101)
留言2則, 1人參與, 最新討論串1/2 (看更多)
開發平台(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

02/27 20:29, , 1F
send/recv失敗後再呼叫一次就有broken pipe了 需要這個
02/27 20:29, 1F

02/27 20:29, , 2F
幹嘛?
02/27 20:29, 2F
文章代碼(AID): #1OiuaiAV (C_and_CPP)
文章代碼(AID): #1OiuaiAV (C_and_CPP)