私はUDPを使って同じマシン上で構造体を送受信しようとしています。この場合、サーバとクライアントは同じマシン上で実行され、共通構造体定義(ヘッダファイルを使用)を共有します。UDPを使用して構造体を渡す
hostent構造体のDEFN(UNIXは、ビルトインタイプ):
struct hostent{
char *h_name;
char **h_aliases;
int h_addrtype;
int h_length;
char **h_addr_list;
}
Serverコードスニペットは、次のとおりです。
struct hostent* resolved_host = DNS_translate(DNSname);
if((numbytes = sendto(sockfd, (void*)&resolved_host, sizeof(struct hostent), 0, (struct sockaddr *)&client_addr, sizeof(struct sockaddr))) == -1)
{
perror("sendto failed");
exit(EXIT_FAILURE);
}
クライアントのコード・スニペットは、次のとおりです。
struct hostent resolved_host;
int addr_len = sizeof(struct sockaddr);
if((numbytes = recvfrom(sockfd, (void*)&resolved_host, sizeof(struct hostent), 0, (struct sockaddr *)&server_addr, &addr_len)) == -1)
{
perror("recvfrom failed");
exit(EXIT_FAILURE);
}
サーバが送信し、クライアントは通常通り(エラーは発生しません)受信します。 * resolved_host *構造体はサーバに格納されており、すべてのデータに問題なくアクセスできます。 しかし、クライアントで* resolved_host *構造体を使用しようとすると、seg faultが発生します。たとえば、
printf("Name : %s\n", resolved_host.h_name);
は、segフォールトを発生させます。構造が含まれてい
ああおかげで、それは完全に私の心をスキップ。私は今、愚かな気がする:| – Arun