socket sockaddr_in servidor programming programing program how geeksforgeeks code cliente c sockets unix network-programming posix

sockaddr_in - socket programing



¿Cuál es la diferencia entre read() y recv(), y entre send() y write()? (6)

¿Cuál es la diferencia entre read () y recv (), y entre send () y write () en la programación de socket? rendimiento y velocidad y otro comportamiento.


"Rendimiento y velocidad"? ¿No es ese tipo de ... sinónimos, aquí?

De todos modos, la llamada a recv() toma indicadores que read() no lo hace, lo que lo hace más poderoso, o al menos más conveniente. Esa es una diferencia. No creo que haya una diferencia significativa en el rendimiento, pero no lo he probado.


Acabo de notar recientemente que cuando usé write() en un socket en Windows, casi funciona (el FD pasado a write() no es el mismo que el que se send() a send() ; utilicé _open_osfhandle() para obtener el FD para pasar a write() ). Sin embargo, no funcionó cuando traté de enviar datos binarios que incluían el carácter 10. write() algún lugar insertó el carácter 13 antes de esto. Cambiarlo a send() con un parámetro flags de 0 solucionó ese problema. read() podría tener el problema inverso si 13-10 son consecutivos en los datos binarios, pero no lo he probado. Pero eso parece ser otra posible diferencia entre send() y write() .


La única diferencia es que recv / send le permite especificar ciertas opciones para la operación real. lectura / escritura son las funciones del descriptor de archivo ''universal'' mientras que recv / send son un poco más especializadas (por ejemplo, puede establecer un indicador para ignorar SIGPIPE, o para enviar mensajes fuera de banda ...).


Otra cosa en Linux es:

send no permite operar en fd sin socket. Por lo tanto, por ejemplo para escribir en el puerto usb, write es necesario.


Por el primer golpe en Google

read () es equivalente a recv () con un parámetro flags de 0. Otros valores para el parámetro flags cambian el comportamiento de recv (). Del mismo modo, write () es equivalente a send () con flags == 0.


read() y write() son más genéricos, funcionan con cualquier descriptor de archivo. Sin embargo, no funcionarán en Windows.

Puede pasar opciones adicionales para send() y recv() , por lo que puede tener que usarlos en algunos casos.