我有我的服务器/客户端在C上的这个问题。如果我在SIGINT后关闭服务器套接字,然后我尝试从客户端写在这个封闭的套接字上,在客户端生成SIGPIPE之前,我必须写两次。它不应该立即生成它吗?这是一种正常行为还是我需要解决的问题?这是我的代码。我正在通过127.0.0.1连接,在Ubuntu上测试相同的PC上的东西。写在关闭的套接字不会立即生成sigpipe
server.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
}
client.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:”);打印“成功”...
谢谢你的帮助! :) – testermaster 2014-10-31 01:26:06
原因可以做两个写与Nagle算法无关。你可以关闭Nagle并再次进行实验。 – meteorgan 2015-09-25 15:49:14