我在 C 上的服务器/客户端有这个问题。如果我在 SIGINT 之后关闭服务器套接字,然后我尝试从客户端写这个关闭的连接,我必须在客户端生成 SIGPIPE 之前写两次. 它不应该立即生成吗?这是正常行为还是我需要解决的问题?这是我的代码。我正在通过 127.0.0.1 连接的同一台 PC 上的 ubuntu 上进行测试。
服务器.c
sigset_t set;
struct sigaction sign;
int sock_acc;
int sock;
void closeSig(){
close(sock_acc);
close(sock);
exit(1);
}
int main(){
sigemptyset(&set);
sigaddset(&set, SIGINT);
sig.sa_sigaction = &closeSig;
sig.sa_flags = SA_SIGINFO;
sig.sa_mask = set;
sigaction(SIGINT, &sig, NULL);
//other code to accept the connection from the client
sigprocmask(SIG_UNBLOCK, &set, NULL);
//write/read calls
}
客户端.c
void closeSigPipe(){
close(ds_sock);
printf("Stop...");
exit(1);
}
int main(){
sigpipe.sa_sigaction = &closeSigPipe;
sigpipe.sa_flags = SA_SIGINFO;
sigaction(SIGPIPE, &sigpipe, NULL);
//other code to connect the server, and write/read calls
}
问题是当我使用 CTRL+C 关闭服务器终端时,从客户端对连接的第一次写入工作没有任何问题... perror("Error:"); 打印“成功”...