这里的目标是捕获 SIGINT 以关闭小型套接字服务器上的服务器套接字。我尝试使用嵌套函数来保持代码清洁。但...
当我执行 Ctrl-C(SIGINT,对吗?)时,我得到Illegal instruction: 4
. 阅读这篇文章后,我尝试添加-mmacosx-version-min=10.8
编译标志,因为我在 10.8 上。执行 Ctrl-C 时同样的错误。
这里有两个问题:为什么我会得到“非法指令 4”?如何在不使用全局变量的情况下关闭服务器套接字?
我的软件:
Mac OSX 10.8.4
GCC 4.2.1
这是我的编译方式:
gcc -fnested-functions main.c
这是代码:
#include <sys/socket.h>
#include <unistd.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
void register_sigint_handler(int *serverSocket)
{
void sigint_handler(int signal) {
printf("Shutting down...\n");
printf("Server socket was %d\n", *serverSocket);
close(*serverSocket);
exit(0);
}
signal(SIGINT, &sigint_handler);
}
int main(void) {
int serverSocket = 0, guestSocket = 0;
register_sigint_handler(&serverSocket);
serverSocket = socket(PF_INET, SOCK_STREAM, 0);
while (1) {}
close(serverSocket);
return 0;
}