我有一个多线程客户端-服务器应用程序。第一个线程是一个“监听器”,它将客户端添加到文件描述符数组中:
while (1) {
if ((connfd = accept(listenfd_service, (struct sockaddr *) &cliaddr, &clilen)) > 0) {
printf("service connected...\n");
int i;
for (i = 0; i < MAX_SERVICES; i++) {
if (service_sockets[i] == -1) {
service_sockets[i] = connfd;
break;
}
}
}
}
问题是当我使用 Ctrl+C 终止客户端并运行以下行时
for (j = 0; j < MAX_SERVICES; j++) {
if (service_sockets[j] != -1) {
int test = write(service_sockets[j], c, 72);
if (test == -1) {
service_sockets[j] = -1;
}
}
}
我在“测试”变量中得到 72。如果我第二次尝试运行这些行,我会收到一个 SIGPIPE 信号。