我有一個UNIX域套接字,並且能夠在服務器和客戶端之間創建和通信。問題是服務器可能意外崩潰的情況:如何處理這種情況?客戶如何知道服務器是否退出?
我的代碼中的客戶端是不同程序的一部分,它也管理各種其他任務並通過套接字將數據發送到服務器。
返回錯誤值是由我維護的Enum。此代碼是庫的一部分。
我連接到服務器,如下
int sock;
struct sockaddr_un server;
//Create socket
sock = socket(AF_UNIX , SOCK_STREAM , 0);
if (sock == -1)
{
return ERR_SOCK;
}
server.sun_family = AF_UNIX;
strcpy(server.sun_path,SOCKET_PATH);
//Connect to remote server
if (connect(sock , (struct sockaddr *)&server , sizeof(struct sockaddr_un)) < 0)
{
return ERR_CONFAIL;
}
這之後我發送數據如下
ret=send(sock , message , sizeof(struct message_t) , 0);
if(ret < 0){
printf("Error while sending\n");
return ERR_NOCON;
}
通常一切工作正常,但如果我結束我的服務器和發送數據,然後發送不不返回並且客戶端終止。
SIGPIPE是什麼在殺死你的客戶端進程。 http://stackoverflow.com/a/10470017/2101267 – 2014-09-10 12:13:26
如果服務器崩潰,客戶端能否繼續有用的工作? – 2014-09-10 12:44:29
服務器只顯示一些信息。是的,即使服務器崩潰,客戶端也將處理非常有用的工作。我想重新啓動服務器並嘗試再次建立連接。你能提出一些建議嗎? – sandeep 2014-09-10 15:30:44