在unix的网络编程中,我总是在服务器用来侦听连接的套接字上设置SO_REUSEADDR选项.这基本上说可以在机器上的同一端口上打开另一个套接字.这在从崩溃中恢复并且套接字未正确关闭时非常有用 - 应用程序可以重新启动,它只需在同一端口上打开另一个套接字并继续监听.
我的问题是,旧套接字会发生什么?毫无疑问,仍将在旧套接字上接收所有数据/连接.它会被操作系统自动关闭吗?
我在linux中开发了一个包含无限循环的C应用程序while(1).但是也有一些动态分配的,并且是无限循环下一些有用的指针,所以释放内存的唯一时间是在中断后while(1)通过ctrl-z,ctrl-c,kill -9 apppid,killall appname.所以我的想法是将新的处理程序与内存事件信号解除关联.
void deallocatehandler(int signal){ printf("Memory Deallocation\n"); exit(0);}
int main(){
signal(SIGINT, &deallocatehandler);
signal(SIGTSTP, &deallocatehandler);
signal(SIGKILL, &deallocatehandler);
while(1){
/**
Some code here
**/
}
}
Run Code Online (Sandbox Code Playgroud)
如果我按ctrl-c或ctrl-z调用处理程序,但问题出在SIGKILL上.命令kill -9并killall没有启动处理程序.
有人知道为什么吗?是否有建议纠正它?