我要编写一个 TCP 服务器(Socket - Linux - C)。我有三个问题:
1)要知道网络(或连接)是否关闭,我是否使用了该选项SO_KEEPALIVE
?
例如:
int optval = 1;
socklen_t optlen = sizeof(optval);
if (setsockopt(file_descriptor,SOL_SOCKET,SO_KEEPALIVE,&optval,optlen)<0) {
Close(file_descriptor);
Print_error("setsockopt() failed");
2)我希望我的服务器联系其他服务器。我的服务器如何知道远程服务器是否关闭?
3)我想写一个并发服务器,所以我用fork()
它来创建孩子:
3.1) 我必须处理对共享变量的并发访问,即使它们仅用于读取目的?
3.2)我的进程列表中不会有僵尸......这段代码可以吗?
void sigchld_h (int signum);
int main(int argc, char *argv[]){
...;
}
void sigchld_h (int signum){
pid_t pid;
int status;
while ( (pid = waitpid(-1,&status,WNOHANG)) > 0)
printf("(%s) INFO - child %d terminated with exit status %d", nome_programma, pid, status);
}
非常感谢您的咨询。