アル中プログラマの備忘録。もはやコーディングしてないけど。

酔いどれまさになう。プログラマとして就職し、システムエンジニア、プロジェクトマネージャーと立場を変えながら、システム開発に関わるとあるアル中の成長記録。

C

C言語でのキャスト、構造体で遊ぶ

投稿日:2012年3月29日 更新日:

C言語

C言語でソケット通信をする際に使う二つの構造体

  • 汎用的な構造になってるsockaddr
  • IPアドレスやポート番号をセットするsockaddr_in

両者のサイズは同じで、sockaddrの方がオブジェクト指向言語でのインターフェースのような感じになっています。
実際、sockaddr_inに値をセットした後、sockaddrにキャストして使われています。

IPアドレスなどを取り出したい時には、まずsockaddr_inのポインタが欲しくなるので、逆にsockaddrのポインタをキャストします。

IPアドレスとポートを引数としてsockaddrを返す関数を作りたい

本来は参照渡しで書くのでしょうが無理やりsockaddrの実態を返したいと思います。
まずは深く考えずにキャストして返そうとしたらエラーになりました。

struct sockaddr ret;
struct sockaddr_in address;
ret = (struct sockaddr)address;

そこでaddressのアドレスをsockaddrのポインタにキャストし、そのポインタのさす先を取り出すよう書き換えたところコンパイル通りました。

ret = *((struct sockaddr*)&address);

ただし、お遊びでやっただけで本来はこういう風に書かれる想定ではないはずですので真似しないでください。

酔いどれまさになう。

-C

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

関連記事

関連記事はありませんでした

カテゴリー