BSD socketでclient側のport番号を固定する
BSD socket APIでclient側のport番号を静的に決めたい。ググってもport番号を動的に決める例ばかりヒットして正しい情報になかなかたどり着けなかったのでメモ。
環境
- Ubuntu 20.04 LTS(WSL2)
- gcc 9.3.0
- netcat 1.206-1ubuntu1
portのbind
以下のサイトが参考になる。
Bind privileged port and remote authorization
connect
する前にbind
を唱えればいいらしい。33400ポートを開けるコードは以下のような感じ。
c_addr.sin_family = AF_INET; c_addr.sin_port = htons(33400); c_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); if (bind(sd, (struct sockaddr*)&c_addr, sizeof(c_addr))) { perror("client bind"); return EXIT_FAILURE; }
実行結果
指定したポートが使用されているかnc
コマンドで確認してみる。以下はサーバー側(netcat)のログ。

ちゃんと33400番ポートを使って通信できていた。
コードの全文は以下1。
https://gist.github.com/komori-n/b0ce6a9e768e17633f87efb24175039a
notes
- C言語ソケット通信サンプル | mathkuro のクライアントコードを参考にした