linux socket编程 Connection reset by peer 错误

假设Server A上面有Process X,它有一个socket M,和另外的Server B上面的Process Y的 Socket N以TCP协议连接上了,那么,据我所知,有2种情况会出现RST包:

(1)X没有close socket就退出了,然后Y继续向M send数据,A的内核就会发送RST 到 socket N;

(2)X设置了SO_LINGER,其中l_onoff 非0, l_linger 为0,这样当A close socket M的时候,也会发送RST到socket N。

当socket N收到了RST,select的结果为socket可读,则:

(a)如果这个时候调用recv,返回-1,errno为ECONNRESET,如果再次调用recv,返回-1,errno为EPIPE,同事产生EPIPE信号;

(b)如果这个时候调用send,返回-1,errno为EPIPE,同时会产生SIGPIPE信号。


更多socket错误信息参见 http://blog.csdn.net/cc198877/article/details/7626000

 

转自http://hi.baidu.com/tangzhenjiang/blog/item/9700f8ed7475434879f05570.html

你可能感兴趣的:(编程,linux,socket,tcp,server)