作者larkes (larkes)
看板C_and_CPP
标题[问题]如何让socket server端收到SIGEPE?
时间Mon Feb 27 10:04:26 2017
开发平台(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://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1488161068.A.29F.html
※ 编辑: larkes (180.177.11.187), 02/27/2017 10:06:38
1F:推 Qbsuran: send/recv失败後再呼叫一次就有broken pipe了 需要这个 02/27 20:29
2F:→ Qbsuran: 干嘛? 02/27 20:29