Hola:
Si estás usando estructuras para enviar el mensaje (por ejemplo, una estructura con el byte de identificador y el entero de la longitud), ten cuidado de leerla exactamente igual que la escribes y me explico.
Un byte dentro de la estructura ocupa un byte, pero para cuadrar el entero que va detrás, C deja en la estructura tres bytes vacios. Asi
- byte id - byte vacio - byte vacio - byte vacio - byte longitud - byte longitud - byte longitud - byte longitud
Si envias la estructura completa con un solo write y luego intentas leer primero el read del id y luego el read de la longitud, tendrás problemas, ya que estarás leyeno los bytes vacios como parte de la longitud.
Aquí tienes un ejemplo de cómo puedes
organizar los mensajes en los sockets.
Se bueno.