Estoy trabajando en escribir una aplicación de red en C++ en la plataforma Linux utilizando la API sockets típica, y estoy buscando 2 formas alternativas de escribir una matriz de bytes a una secuencia TCP: llamando a write() o llamando a send(). Sé que, dado que esto es Linux, el manejador de socket es simplemente un descriptor de archivo y, por lo tanto, es válido para realizar llamadas de lectura() y de escritura() en el socket; sin embargo, el socket API también proporciona send() y recv () funciones para realizar las mismas tareas.Repercusión en el rendimiento del uso de write() en lugar de send() al escribir en un socket
Por lo tanto, me pregunto si hay alguna razón particular para elegir una clase de funciones sobre la otra: ¿las funciones de envío/recepción están optimizadas para escritura/lectura en red, funcionan mejor, etc.? ¿O es realmente arbitrario qué funciones uso? ¿Lectura() y escritura() se comportan correctamente en todos los casos?
¡Gracias por cualquier idea!
¿Es esto cierto para FreeBSD u otras plataformas también? - esa línea no aparece en mi página man de send (2). –
@GoodPerson Se aplica a todas las plataformas. Si eso no fuera así, 'inetd' y similares no funcionarían. ('inetd' duplica su socket en el stdin y stdout de su proceso daemon, y su proceso puede interactuar directamente con stdin y stdout de la manera normal, sin darse cuenta de que son sockets. Por supuesto, también puede hacer cosas de socket con ellos.) –