다시 소켓 프로그래밍 질문입니다.
글쓴이: 정성완 / 작성시간: 수, 2006/12/06 - 10:52오후
typedef struct packet_struct
{
unsigned int group;
unsigned int name_len;
unsigned int line_len;
char name[20];
char line[1024];
}chat_msg;
보낼 내용은 위와 같은 struct입니다.
chat_msg msg;
//msg 내용 설정
send(socket, (void*)&msg, sizeof(msg), 0);
이렇게 보내고, 받을때
chat_msg* r_msg = (chat_msg*)malloc(sizeof(chat_msg));
n = recv(socket, r_msg, sizeof(r_msg), 0);
if(n == sizeof(r_msg)) print_message(r_msg);
이런식으로 했습니다. 그랬더니 메세지 출력이 되었구요. 그럼 데이터는 전부 받았다는 말인데,
맨위 unsigned int group에만 이상한 값이 들어가 있고 나머진 0입니다. 왜 이럴까요.
환경은 INTEL칩셋이고 VMWARE사용중입니다.
밑에 글처럼 스트럭트 선언부 끝에 __attribute__ ((__packed__));를 해줬더니 맨위 group값은 제대로 나오고 나머지는 역시 NULL이네요
Forums:
typedef 를
typedef 를 사용하셨다면 __attribute__ ((__packed__)) 는 마지막이 아니라 chat_msg; 앞에 들어가야 합니다.
하지만 질문 내용을 봤을 때 align 의 문제는 아닌 것으로 생각이 되네요.
네... 그렇군요.
네... 그렇군요. 구조체 정렬문제가 아니라면 도대체 이유가 뭣일까요..
죽겠습니다.
sizeof(r_msg)에서 r_msg는
sizeof(r_msg)에서 r_msg는 포인터가 아닌가요?
sizeof(r_msg)의 값은 sizeof(chat_msg *)값과 같을 것 같은데...
sizeof(r_msg)를 sizeof(chat_msg)로 변경하셔야 할 것 같습니다.
추신: sizeof(r_msg)의 크기를 확인해보심이..
sizeof(r_msg) <-- 제가 보기에도 이부분이
제가 보기에도 이부분이 조금 의문스럽네요
sizeof()로 되어있는 부분을 모두 sizeof(chat_msg)이렇게 바꾸면 될듯도 싶고..
--------------------------------------------------
그걸 이루던지 이루지 못하던지 사람은 꿈에 이끌리는 법이죠.
'꿈'이라는 이름의 신의 순교자로서의 일생을
--------------------------------------------------
그걸 이루던지 이루지 못하던지 사람은 꿈에 이끌리는 법이죠.
'꿈'이라는 이름의 신의 순교자로서의 일생을
댓글 달기