, поэтому я пытаюсь отправить структуру между клиентом и сервером. Я определил структуру с обеих сторон:
struct msg {
char name[50];
char time[50];
int len;
char buf[200];
}
Проблема возникает в server.c
. Я уже нашел проблему в этой строке:
struct msg s1;
char buffer_input[1024]={0};// the buffer stream for sending
...// omitted all sorts of initializations cuz they all passed my debug and tests
memset(buffer_input,0,sizeof(buffer_input));
memcpy(buffer_input,&s1,sizeof(s1));
/* Originally, the send() call read: */
/* ssize_t size=send(client_sock,(struct sockaddr*)&client_sock_address,&addrlen); */
ssize_t size=send(client_sock,buffer_input,sizeof(buffer_input),0);
if(size<0) perror("send()");
тогда в стандартном выводе у меня есть:
send() : Socket operations on non-socket object
так что я догадываюсь, что причиной может быть memcpy(buffer_input,&s1,sizeof(s1))
. Поэтому я изменил код как:
memset(buffer_input,0,sizeof(buffer_input));
strcpy(buffer_input,"example");
Функция send () работала отлично, и я получал сообщения в правильных форматах.
После серии отладок я понял, что после memcpy(...)
файловый дескриптор клиентского сокета из 8
превратился в 0
.
Так что мне интересно, в каких случаях memcpy
может изменить файловый дескриптор сокетов ..