Si está utilizando sockets de bloqueo, busque ajustar los tiempos de espera de envío() y recv() con las opciones SO_SNDTIMEO y SO_RCVTIMEO setsockopt().
Existen muchas pequeñas complejidades en la creación de un servidor adecuado, buscaría adquirir rogando, pidiendo prestado o robando este. Aquí hay un sample multithreaded socket server.
Además, si tiene control sobre ambos lados (el cliente y el software de socket del servidor) crearía un protocolo que tiene la longitud del mensaje que se pasará como los primeros 2 o 4 bytes del mensaje, de esa manera solo tiene que bloquear para que decodifique el número y siga leyendo hasta que haya transcurrido el número de bytes. Haga eso tanto para el cliente como para el servidor y hará que su código sea mucho más simple.
sí Quiero saber si uso recv() ¿puede conducir a DoS? Dado que el servidor puede esperar mucho tiempo. Por ejemplo, si el tamaño de mi mensaje es muy grande. – mousey
Tenga en cuenta que puede establecer un tiempo de espera en el socket y un tamaño de búfer máximo en recv, por lo que las oportunidades de abuso pueden verse limitadas. Supongo que si tienes un solo proceso, un par no deseado podría enviarte muchos bytes lentamente como un ataque de denegación de servicio ... – MZB