我想构建一个非常简单的服务器,在嵌入式设备上一次仅接受一个连接。 (运行 RTOS)
关于套接字监听器,我想到了两个选项:
1- 选项 A:为所有传入连接设置一个侦听器。 (仅当监听器出现错误时才重置监听器)
*** A: Reset listner only when listner has an error ***
int fd_Listener = listen(INADDR_ANY, listenPort, 1);
while(fd_Listener){ // while listner is alive
int fd_Socket = accept(); //Blocking
while(fd_socket){ //while socket is alive and no error occured
//read() write() process() etc ...
}
}
2- 选项 B:每次连接终止时重置监听器。
*** B: Reset listner every time I reset the socket, (for each new connection a new listner) ***
while(1){
int fd_Listener = listen(INADDR_ANY, listenPort, 1);
int fd_Socket = accept(); //Blocking
while(fd_socket){ //while socket is alive and no error occured
//read() write() process() etc ...
}
}
知道什么是好的做法吗? 哪种实现更容易出现错误或错误?
我想说选项 A 是一个更好的解决方案,因为它更高效,因为它不会重复创建和销毁套接字资源,减少了系统调用和开销。如果不执行适当的清理,频繁创建新套接字(选项 B)可能会导致资源泄漏,如果出现问题,*ss 可能会很痛苦地修复。
此外,使用选项 B,如果之前的套接字未正确清理,您可能会遇到“地址已在使用中”错误。所以我会远离选项 B。