Socket Listner 好习惯吗?

问题描述 投票:0回答:1

我想构建一个非常简单的服务器,在嵌入式设备上一次仅接受一个连接。 (运行 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 ...
  }
} 

知道什么是好的做法吗? 哪种实现更容易出现错误或错误?

c sockets tcp rtos
1个回答
0
投票

我想说选项 A 是一个更好的解决方案,因为它更高效,因为它不会重复创建和销毁套接字资源,减少了系统调用和开销。如果不执行适当的清理,频繁创建新套接字(选项 B)可能会导致资源泄漏,如果出现问题,*ss 可能会很痛苦地修复。

此外,使用选项 B,如果之前的套接字未正确清理,您可能会遇到“地址已在使用中”错误。所以我会远离选项 B。

© www.soinside.com 2019 - 2024. All rights reserved.