user-0 提问: C语言socket编程如何避免SIGPIPE问题

回复:
user: user-1
content: 引用 14 楼 u013591397 的回复:[quote=引用 13 楼 mxgsgtc 的回复:] [quote=引用 11 楼 u013591397 的回复:] [quote=引用 9 楼 mxgsgtc 的回复:] [quote=引用 5 楼 u013591397 的回复:] [quote=引用 3 楼 mxgsgtc 的回复:] 33行添一下 sleep(5)试试 非常感谢你的帮助~ 我想问除了sleep还有什么方法能实现adder端晚一点关闭，刚刚问了一下说不允许用sleep。。因为后面需要循环向adder传输指令。。。。[/quote] ？ 循环向adder传输指令跟第33行添加sleep没有冲突吧[/quote]恩，话说我加上了怎么还是这个问题呢。。。[/quote] 嗯？ 我的是好用的啊，你在哪加的？ 不是在client代码加的吗？，还有，你给的代码client的s没有被定义[/quote]额，不好意思。。。复制修改的时候把s给修改没了。。。。我又改了一下，发现这次可以了，其实我一直很不明白为什么我总是会遇到这个问题，不管是pipe还是socket。。。很是苦恼啊。。。[/quote] 没事儿，多用用就好了，c/s结构都是先让server端先起来的

user: user-0
content: 引用 15 楼 mxgsgtc 的回复:[quote=引用 14 楼 u013591397 的回复:] [quote=引用 13 楼 mxgsgtc 的回复:] [quote=引用 11 楼 u013591397 的回复:] [quote=引用 9 楼 mxgsgtc 的回复:] [quote=引用 5 楼 u013591397 的回复:] [quote=引用 3 楼 mxgsgtc 的回复:] 33行添一下 sleep(5)试试 非常感谢你的帮助~ 我想问除了sleep还有什么方法能实现adder端晚一点关闭，刚刚问了一下说不允许用sleep。。因为后面需要循环向adder传输指令。。。。[/quote] ？ 循环向adder传输指令跟第33行添加sleep没有冲突吧[/quote]恩，话说我加上了怎么还是这个问题呢。。。[/quote] 嗯？ 我的是好用的啊，你在哪加的？ 不是在client代码加的吗？，还有，你给的代码client的s没有被定义[/quote]额，不好意思。。。复制修改的时候把s给修改没了。。。。我又改了一下，发现这次可以了，其实我一直很不明白为什么我总是会遇到这个问题，不管是pipe还是socket。。。很是苦恼啊。。。[/quote] 没事儿，多用用就好了，c/s结构都是先让server端先起来的[/quote]恩，我现在也注意到了，谢谢你的耐心帮助哈

user: user-0
content: 引用 7 楼 gpshq 的回复:http://www.cnblogs.com/caosiyang/archive/2012/07/19/2599071.html 感谢你的回答，我想再问一下，如果这么做在导致SIGPIPE的那一次写入不就不能成功了么，可是我需要那一次写入成功呀。

user: user-2
content: http://www.cnblogs.com/caosiyang/archive/2012/07/19/2599071.html

user: user-3
content: 程序加上	signal(SIGPIPE, SIG_IGN);

user: user-0
content: 引用 3 楼 mxgsgtc 的回复:33行添一下 sleep(5)试试 非常感谢你的帮助~ 我想问除了sleep还有什么方法能实现adder端晚一点关闭，刚刚问了一下说不允许用sleep。。因为后面需要循环向adder传输指令。。。。

user: user-1
content: 嗯，刚试了一下，就是那个原因，可能你的addr程序还没有执行read的时候你的客户端程序就开始写了，先让服务端处在read阻塞状态就可以了，33行加个sleep(5)，让客户端晚一点访问

user: user-1
content: 33行添一下 sleep(5)试试

user: user-0
content: 引用 13 楼 mxgsgtc 的回复:[quote=引用 11 楼 u013591397 的回复:] [quote=引用 9 楼 mxgsgtc 的回复:] [quote=引用 5 楼 u013591397 的回复:] [quote=引用 3 楼 mxgsgtc 的回复:] 33行添一下 sleep(5)试试 非常感谢你的帮助~ 我想问除了sleep还有什么方法能实现adder端晚一点关闭，刚刚问了一下说不允许用sleep。。因为后面需要循环向adder传输指令。。。。[/quote] ？ 循环向adder传输指令跟第33行添加sleep没有冲突吧[/quote]恩，话说我加上了怎么还是这个问题呢。。。[/quote] 嗯？ 我的是好用的啊，你在哪加的？ 不是在client代码加的吗？，还有，你给的代码client的s没有被定义[/quote]额，不好意思。。。复制修改的时候把s给修改没了。。。。我又改了一下，发现这次可以了，其实我一直很不明白为什么我总是会遇到这个问题，不管是pipe还是socket。。。很是苦恼啊。。。

user: user-1
content: 引用 11 楼 u013591397 的回复:[quote=引用 9 楼 mxgsgtc 的回复:] [quote=引用 5 楼 u013591397 的回复:] [quote=引用 3 楼 mxgsgtc 的回复:] 33行添一下 sleep(5)试试 非常感谢你的帮助~ 我想问除了sleep还有什么方法能实现adder端晚一点关闭，刚刚问了一下说不允许用sleep。。因为后面需要循环向adder传输指令。。。。[/quote] ？ 循环向adder传输指令跟第33行添加sleep没有冲突吧[/quote]恩，话说我加上了怎么还是这个问题呢。。。[/quote] 嗯？ 我的是好用的啊，你在哪加的？ 不是在client代码加的吗？，还有，你给的代码client的s没有被定义

user: user-0
content: 引用 10 楼 mujiok2003 的回复:被另外一边关闭了可否说的稍微细致一点，我明白这个确实是一边关闭了，但是我很想搞清楚这是为什么。。。

user: user-0
content: 引用 9 楼 mxgsgtc 的回复:[quote=引用 5 楼 u013591397 的回复:] [quote=引用 3 楼 mxgsgtc 的回复:] 33行添一下 sleep(5)试试 非常感谢你的帮助~ 我想问除了sleep还有什么方法能实现adder端晚一点关闭，刚刚问了一下说不允许用sleep。。因为后面需要循环向adder传输指令。。。。[/quote] ？ 循环向adder传输指令跟第33行添加sleep没有冲突吧[/quote]恩，话说我加上了怎么还是这个问题呢。。。

user: user-4
content: 被另外一边关闭了

user: user-1
content: 引用 5 楼 u013591397 的回复:[quote=引用 3 楼 mxgsgtc 的回复:] 33行添一下 sleep(5)试试 非常感谢你的帮助~ 我想问除了sleep还有什么方法能实现adder端晚一点关闭，刚刚问了一下说不允许用sleep。。因为后面需要循环向adder传输指令。。。。[/quote] ？ 循环向adder传输指令跟第33行添加sleep没有冲突吧

user: user-0
content: 引用 1 楼 user-5 的回复:没仔细看，但感觉你的代码里面没一个循环，也没一个select或者是线程之类的，SIGPIPE这不是一方已经把套接字关闭了吗? 是不是你有一个程序运行都结束了啊  我就把最简单地实验代码放上来了，就想实现互相传一个信息然后输出出来。。。对socket很是不懂，我想问的就是如何能让那个先关闭的端不要那么早关闭，让write操作完成

user: user-5
content: 没仔细看，但感觉你的代码里面没一个循环，也没一个select或者是线程之类的，SIGPIPE这不是一方已经把套接字关闭了吗? 是不是你有一个程序运行都结束了啊