これが私の問題です:
サーバーとクライアント間の通信を処理するプログラムで使用できるように、ソケットアドレス構造体に適切な情報を入力しようとしています。これはサーバー コードの一部です。問題は、セグメンテーション違反です。を実行すると、構造体の属性gdb
に割り当てるとセグフォルトが発生すると表示されます。AF_INET
sin_family
servaddr
コード:
servaddr->sin_family = (short)(AF_INET);
なぜこれが起こるのか理解できないようです。
完全なコードは次のとおりです。
// Function Prototypes
struct sockaddr_in* getServerInfo(char[]);
int main()
{
char hostname[MAXHOSTNAMELEN];
struct sockaddr_in* servaddr = getServerInfo(hostname);
return 0;
} // End main
struct sockaddr_in* getServerInfo(char hostname[])
{
struct sockaddr_in* servaddr = malloc((size_t)sizeof(struct sockaddr_in));
gethostname(hostname, 32);
struct hostent *hostptr;
hostptr = gethostbyname(hostname);
memset((void *) &servaddr, 0, (size_t)sizeof(servaddr));
servaddr->sin_family = (short)(AF_INET);
memcpy((void *)& servaddr->sin_addr, (void *) hostptr->h_addr, hostptr->h_length);
servaddr->sin_port = htons((u_short)8000);
return servaddr;
}