[表示 : 全て 最新50 1-99 101- 201- 301- 2chのread.cgiへ]
Update time : 03/16 02:36 / Filesize : 99 KB / Number-of Response : 399
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

ネットワークプログラミング相談室 Port21



195 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 00:09:14 ]
WinSock2を使用して特定用途のTCP/IPサーバをCで作ろうとしていますが、ポート番号の自動割り振りでハマっています。
抜粋したコードは以下のとおりです。

WSADATA wsaData;
int len;
static SOCKET serverSocket;
static struct sockaddr_in addr;
if (WSAStartup(MAKEWORD(2, 2), &wsaData)) return -1;
serverSocket = socket(AF_INET, SOCK_STREAM, 0);
if (serverSocket == INVALID_SOCKET) return -1;
memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_addr.S_un.S_addr = INADDR_LOOPBACK; // ★ループバックアドレスを設定
addr.sin_port = htons(0); // ★ポート番号の自動割り振り
bind(serverSocket, (struct sockaddr *)&addr, sizeof(addr));
len = sizeof(addr);
getsockname(serverSocket, (struct sockaddr *)&addr, &len); // 自動的に割り振られたポート番号を取得
printf("%s\n", addr.sin_port); // 0が出力される
listen(serverSocket, 1);

getsocknameを行った後でaddr.sin_portに割り振られたポート番号が入っていることを期待するのですが、WinXP+VC7.1では0になっています。
手順がどこか悪いのでしょうか?






[ 続きを読む ] / [ 携帯版 ]

全部読む 前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<99KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef